GKE Ingress报错找不到NEG资源无法正常创建问题咨询
问题解答
疑问1:NEG资源的创建主体&是否为Ingress配置问题
NEG(网络端点组)由GKE内置的NEG控制器负责创建,属于GKE控制平面的原生组件:对于VPC原生集群,默认情况下当Ingress关联到某个Service时,控制器会自动在对应GCP项目的集群所在区域创建对应NEG资源。
你当前的问题大概率不是Ingress本身的配置错误,而是NEG创建环节失败、或者Ingress控制器与NEG控制器之间的同步状态异常导致的,服务本身运行正常、健康检查通过仅能说明Service后端的Pod可用,不代表NEG资源创建环节正常。
疑问2:LB控制台无对应资源的原因
是的,GKE Ingress创建负载均衡是链式流程:需要先完成NEG创建、后端服务配置、健康检查绑定等前置步骤,才会生成完整的负载均衡资源。当前因为后端同步环节失败,流程提前终止,自然不会在LoadBalancer控制台生成对应的资源,这是Ingress创建失败的结果,不是诱因。
排查&解决步骤
- 检查Service的NEG配置
执行命令查看目标Service的配置:
确认Service的Annotation中是否存在kubectl describe svc webserver -n productioncloud.google.com/neg相关配置,正常情况下会自动生成cloud.google.com/neg: '{"ingress": true}'的标注,如果没有可以手动加上后重新apply Service配置,触发NEG创建。 - 验证NEG是否正常创建
执行gcloud命令确认对应NEG资源是否存在:
如果返回为空,查看Service的事件日志,排查是否有权限不足、区域不匹配等NEG创建失败的报错。gcloud compute network-endpoint-groups list --filter="name~webserver" - 清理异常同步缓存
很多时候该问题是Ingress控制器残留了旧的同步状态导致的,按以下顺序操作:- 先删除当前异常的Ingress:
kubectl delete ingress basic-ingress -n production - 等待5分钟以上,确保GKE控制平面清理完旧的同步记录
- 重新apply Ingress配置
- 先删除当前异常的Ingress:
- 验证GKE服务账号权限
确认GKE默认服务账号(格式为service-<你的项目ID>@container-engine-robot.iam.gserviceaccount.com)是否被授予了roles/container.serviceAgent角色,如果该角色被误删,会导致GKE控制平面无法创建GCP侧的网络资源。 - 手动清理残留资源
如果以上步骤都无效,可以手动到GCP控制台的「网络端点组」页面,搜索对应服务名的残留NEG,手动删除后再重新创建Ingress即可。
内容的提问来源于stack exchange,提问作者Floris Weers
相关产品推荐
相关产品推荐

