给阿里云K8s集群添加自定义 ingress 端口

截屏2021-09-16 15.39.24.png

0x00 背景

在生产环境中部署nacos, skywalking 等服务时, 发现nginx ingress 的80,443端口有点不够用了.
之前的解决办法是, 给不同的服务, 指定不同的host, 那么即使是相同的80端口,也可以通过请求域名,响应到不同的后端service.
上面的原理也很简单, 因为ingress nginx 最终实现就是转换为nginx的配置文件, 对于nginx 而言, 一个443,响应多个域名这是基本操作.

但是, 这不够优雅呀, 今天尝试找一下自定义端口方法.
参考: https://www.cnblogs.com/caibao666/p/12202335.html

0x01 开搞

第一步: 增加LB端口

原来的nginx-ingress-lb只开放80,443端口.

kubectl get svc -A | grep nginx
kube-system   nginx-ingress-lb                     LoadBalancer   172.21.12.8     172.16.79.230   80:31728/TCP

开始增加修改:

kubectl edit svc nginx-ingress-lb -n kube-system

# 增加一组端口
   - name: nacos-port
     # 可以删掉 nodePort , 系统会自动生成一个 大于30000的端口
     port: 8848
     protocol: TCP
     targetPort: 8848
#保存退出, 立即生效
:wq

再次确认一下修改效果

kubectl get svc -A | grep nginx
kube-system   nginx-ingress-lb                     LoadBalancer   172.21.12.8     172.16.79.230   80:31728/TCP,443:31954/TCP,8848:32123/TCP
第二步: 修改configmap
kubectl edit configmap tcp-services -n kube-system

# 在 apiVersion 下面添加一组配置: data 
apiVersion: v1
data:
  # 格式:  对外端口 :  namespace/service_name:service_port
  "8848": default/nacos-headless:8848

0x03 验证

这时候去查看 ingress 的信息, 发现不会有啥变化, 但这个LB是确确实实多了一个服务端口.
此时, 我们可以通过K8s的LB IP , 加上这个自定义端口, 就可以正常访问里面的nacos服务了.

我这里的nginx ingress 安装的是内网LB, 所以需要在外部配置一下nginx 把公网请求转进来, 比较简单, 不再赘述.

截屏2021-09-16 15.55.41.png

// 2021/10/21 追加快速使用方式:

k edit svc sample-server
    - nodePort: 31153
      port: 93
      protocol: TCP
      targetPort: 8093
    type: NodePort

k edit cm tcp-services -n kube-system
     "8093": default/sample-server:93

k edit svc nginx-ingress-lb -n kube-system
    - name: sample-server
      nodePort: 31426
      port: 8093
      protocol: TCP
      targetPort: 93

解释 :

  • ingress 对外暴露 8093, ingress 把93 指向 svc, 然后svc 再次请求pod的8093端口.
  • nginx-ingress-lb 和 tcp-services 的端口配置要保持一致
  • svc 的type 要指定为: NodePort
  • 先更新 cm, 再更新 nginx-ingress-lb , 切记!!!

jjffffjkkkj

你可能感兴趣的:(给阿里云K8s集群添加自定义 ingress 端口)