如何让GKE中带NEG的内部Ingress LB支持跨区域访问?
问题
在us-west-1区域的GKE中部署了不暴露公网的内部服务serving-app,采用NEG+Ingress配置。该服务仅能在同区域内访问,us-east-1等其他区域的服务无法访问。
已知使用非NEG Ingress的普通LoadBalancer类型Service时,可通过注解实现内部负载均衡器跨区域访问,配置示例如下:
apiVersion: v1 kind: Service metadata: name: serving-app labels: app: serving-app annotations: cloud.google.com/load-balancer-type: "Internal" networking.gke.io/internal-load-balancer-allow-global-access: "true" cloud.google.com/neg: '{"ingress": false}' spec: selector: app: serving-app ports: - name: http port: 80 protocol: TCP targetPort: 80 type: LoadBalancer loadBalancerIP: "a.b.c.d"
但当前采用的NEG+Ingress配置无法实现跨区域访问,配置如下:
NEG-Service 配置
apiVersion: v1 kind: Service metadata: name: serving-app annotations: cloud.google.com/neg: '{"ingress": true}' cloud.google.com/backend-config: '{"default": "serving-app-backend-config"}' spec: type: NodePort selector: app: serving-app ports: - name: http port: 80 protocol: TCP targetPort: 80
NEG-Ingress 配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: serving-app-neg-ingress annotations: kubernetes.io/ingress.class: "gce-internal" kubernetes.io/ingress.regional-static-ip-name: "serving-app-neg-static-ip" spec: defaultBackend: service: name: serving-app port: number: 80
遇到的困境:
- 找不到NEG+Ingress模式下对应全局访问的注解
- 无法通过GCP控制台将LB改为全局类型
- 未找到相关官方文档支持
请问是否可让该NEG-Ingress内部LB支持跨区域访问?或有什么替代方案?
解决方案
一、NEG+内部Ingress是否支持跨区域访问?
不行。GCP的内部区域Ingress(gce-internal类)本身是区域级资源,绑定的内部负载均衡器仅能在同区域内提供访问能力,不管是否使用NEG后端,当前都没有官方支持的方式让这类Ingress实现跨区域访问。你提到的networking.gke.io/internal-load-balancer-allow-global-access注解仅适用于LoadBalancer类型的内部服务,不适用于Ingress资源。
二、替代方案
1. 改用带NEG的全局内部负载均衡器(Global ILB)
创建全局内部负载均衡器,后端绑定跨区域的NEG(需确保目标区域与服务所在区域的VPC网络连通,可通过跨区域VPC或VPC对等连接实现)。注意:Kubernetes Ingress目前不支持自动创建全局内部LB,需通过GCP控制台或gcloud命令手动配置,后端服务需设为全局模式并绑定不同区域的NEG。
2. 使用跨区域VPC网络+内部LoadBalancer服务(带NEG)
放弃Ingress,沿用你之前提到的LoadBalancer类型内部服务配置:保留networking.gke.io/internal-load-balancer-allow-global-access: "true"注解,同时开启NEG(cloud.google.com/neg: '{"ingress": false}')。这种方式下,内部LB会被配置为允许全局访问,其他区域的服务只要在同一VPC或对等VPC中,即可通过LB的静态IP访问serving-app。
3. 部署跨区域服务网格(如Istio)
如果需要更灵活的跨区域流量管理,可部署Istio等服务网格。通过网格的服务发现和流量路由能力,实现跨区域服务间的通信,无需依赖GCP LB的全局访问特性。
内容的提问来源于stack exchange,提问作者kadamb

