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: 32123 # 這裏隨意寫一個未被使用的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 把公網請求轉進來, 比較簡單, 不再贅述.
完~