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
网友评论