GKE环境下为Ingress-Nginx Helm Chart分配全局LB IP报错咨询
故障根因
你既没有缺少Helm配置参数,也不需要将GKE集群改为跨多区域部署,该问题的核心是负载均衡资源和静态IP的类型不匹配:
- Ingress-Nginx控制器默认创建的
LoadBalancer类型Service,底层对接的是GCP区域级外部负载均衡,这类负载均衡仅支持绑定和集群同区域的静态区域IP,不支持绑定全局静态IP - GCP的全局静态IP仅可用于全球级负载均衡(如GCP原生HTTP(S)负载均衡、全球SSL代理负载均衡等),GKE场景下只有原生
Ingress资源(非Ingress-Nginx控制器)创建的全球负载均衡才支持绑定全局静态IP
解决方案
你可以根据业务需求选择以下两种方案:
方案1:继续使用Ingress-Nginx控制器
如果不需要全球负载均衡的跨区域流量调度能力,直接使用你已经验证可行的同区域静态区域IP即可,原有部署命令无需调整,仅替换IP参数即可:
helm install ingress-nginx --set controller.service.loadBalancerIP="<同区域静态区域IP>" ingress-nginx/ingress-nginx
方案2:需要使用全局静态IP
如果业务必须使用全局静态IP,可选择以下两种实现路径:
- 路径A:切换使用GKE原生Ingress资源替代Ingress-Nginx控制器,只需在Ingress资源的annotations中添加参数
kubernetes.io/ingress.global-static-ip-name: "全局静态IP的名称",即可绑定提前创建的全局静态IP - 路径B:保留Ingress-Nginx控制器作为流量入口,手动配置GCP全球HTTP(S)负载均衡绑定全局静态IP,将Ingress-Nginx的Service作为全球LB的后端服务,这种场景下无需给Ingress-Nginx的Service指定loadBalancerIP参数
内容的提问来源于stack exchange,提问作者rk92
相关产品推荐
相关产品推荐

