Kubernetes Azure LoadBalancer 同一静态IP多端口访问实现咨询
结论
可以使用同一个负载均衡IP 10.1.1.100的9112端口访问app2,Azure LoadBalancer支持同一个静态IP绑定不同端口转发到不同后端服务,以下是两种可选配置方案:
方案1:新增独立app2 Service复用同一IP(推荐)
该方案无需修改原有app1的Service配置,服务之间隔离性好,改动成本最低。Azure LB会自动将两个Service的端口规则合并到同一个IP下,只要端口不冲突即可正常运行。
新增app2 Service配置如下:
apiVersion: v1 kind: Service metadata: name: "app2-service" annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: selector: app: app2 type: LoadBalancer loadBalancerIP: 10.1.1.100 ports: - port: 9112 targetPort: 9112
配置提交后可执行kubectl get svc确认两个Service的EXTERNAL-IP均为10.1.1.100,即可正常通过对应端口访问两个应用。
方案2:合并为单个多端口LoadBalancer Service
适合需要统一管理所有应用端口的场景,由于单个Service默认只能通过selector匹配一组标签的Pod,因此需要改为无selector的Service,手动关联EndpointSlice绑定两个应用的Pod地址。
步骤1:修改原有Service配置,删除selector,新增多端口
apiVersion: v1 kind: Service metadata: name: "app-combined-service" annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer loadBalancerIP: 10.1.1.100 ports: - name: app1 port: 9111 targetPort: 9111 - name: app2 port: 9112 targetPort: 9112
步骤2:创建EndpointSlice关联两个应用的Pod
apiVersion: discovery.k8s.io/v1 kind: EndpointSlice metadata: name: app-combined-endpointslice labels: kubernetes.io/service-name: app-combined-service addressType: IPv4 ports: - name: app1 port: 9111 - name: app2 port: 9112 endpoints: - addresses: - <替换为app1 Pod的实际IP> ports: app1: 9111 - addresses: - <替换为app2 Pod的实际IP> ports: app2: 9112
注意:该方案需要在Pod重建、IP变更时手动更新EndpointSlice,若无特殊统一管理需求优先选择方案1。
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

