Helm Chart部署中如何获取Ingress IP配置前后端通信
问题解答
查询Ingress IP地址的方法
执行kubectl get ingress不显示地址属于正常现象,GCP负载均衡器分配IP通常需要1~3分钟的初始化时间,刚部署完成时ADDRESS字段为空。可通过以下方式查询:
- 等待资源初始化完成后,执行带宽输出参数的命令查看,ADDRESS列即为分配到的公网IP:
kubectl get ingress -n <业务所在命名空间> -o wide - 直接提取Ingress资源的状态字段获取IP:
kubectl get ingress <后端Ingress资源名> -n <业务所在命名空间> -o jsonpath='{.status.loadBalancer.ingress[0].ip}' - 如果你使用的是自行部署的Nginx Ingress控制器,实际对外IP绑定在控制器的LoadBalancer类型Service上,可执行以下命令查询EXTERNAL-IP字段:
kubectl get svc -n <Nginx Ingress控制器所在命名空间> | grep ingress-nginx-controller
自动配置后端访问地址的方案
方案1:集群内直接访问(优先推荐)
前后端同属一个GKE集群时,不需要经过公网Ingress绕转,直接使用Kubernetes集群内部DNS解析访问后端Service即可,无需等待Ingress IP分配,地址永久固定不会随部署变动:BACKEND_URL: http://<后端Service名称>.<后端所在命名空间>.svc.cluster.local:8000
例如后端Service名为backend-service、部署在default命名空间时,配置值为http://backend-service.default.svc.cluster.local:8000。
该方案访问延迟最低,不消耗公网带宽,也不会产生额外的GCP负载均衡费用。
补充:使用Ingress暴露服务时,对应的后端Service不需要配置为LoadBalancer类型,改为ClusterIP类型即可,可避免额外创建公网负载均衡产生不必要的成本。
方案2:必须走公网Ingress访问时的自动获取方式
如果业务要求前端必须通过公网Ingress访问后端,且前后端通过同一个父Helm Chart管理,可通过Helm模板的lookup函数实时查询后端Ingress的IP,无需手动填写:
- 调整部署顺序,保证后端资源先部署、待Ingress IP分配完成后再部署前端,可通过Helm hook或helmfile的
depends_on配置实现顺序控制 - 在前端Chart的Deployment环境变量模板中添加如下配置,安装/升级时Helm会自动从Kubernetes API查询对应Ingress的IP注入:
env: - name: BACKEND_URL value: {{ printf "http://%s:8000" (lookup "networking.k8s.io/v1" "Ingress" .Release.Namespace "<后端Ingress资源名>").status.loadBalancer.ingress[0].ip }}
内容的提问来源于stack exchange,提问作者Hamza Ince
相关产品推荐
相关产品推荐

