升级GKE至1.25后NEG健康检查异常求助
解决GKE 1.25升级后NEG健康检查异常问题
以下是针对该问题的排查方向和可落地解决方案:
1. 升级Ingress-Nginx控制器版本
你当前使用的Ingress-Nginx v1.5.1版本发布时间较早,对Kubernetes 1.25的兼容性不足。GKE 1.25已彻底移除networking.k8s.io/v1beta1 Ingress API,建议升级至支持K8s 1.25的稳定版本(如v1.8.0及以上)。
操作步骤:
- 备份当前Ingress-Nginx的配置资源
- 从官方Ingress-Nginx仓库获取对应新版本的云提供商部署文件
- 重新部署控制器:
kubectl apply -f deploy.yaml -n ingress-nginx
2. 排查Pod就绪探针状态
NEG的健康状态直接关联Pod的Ready状态,如果Ingress-Nginx控制器Pod的就绪探针失败,GKE会自动将对应的NEG端点标记为不健康。
排查操作:
- 查看Pod的就绪状态:
kubectl get pods -n ingress-nginx - 查看探针相关日志:
kubectl logs <ingress-nginx-controller-pod-name> -n ingress-nginx -c controller - 确认探针配置:确保控制器的
readinessProbe指向正确的端口(默认10254)和路径(/healthz),且Pod内部可正常访问该端点。
3. 调整健康检查阈值配置
你当前的TCP健康检查配置中checkIntervalSec和timeoutSec均设置为1秒,阈值过于严格,容易导致正常Pod被误判为不健康。建议调整为更合理的参数:
修改健康检查配置:
{ "checkIntervalSec": 5, "description": "TCP health check for Ingress-Nginx NEG", "healthyThreshold": 2, "kind": "compute#healthCheck", "logConfig": { "enable": true }, "name": "neg-tcp-health-check", "tcpHealthCheck": { "portSpecification": "USE_SERVING_PORT", "proxyHeader": "NONE" }, "timeoutSec": 3, "type": "TCP", "unhealthyThreshold": 3 }
执行更新命令:
gcloud compute health-checks update tcp neg-tcp-health-check --check-interval=5 --timeout=3 --unhealthy-threshold=3
4. 验证Service与Pod端口映射一致性
确认Service的targetPort与Ingress-Nginx容器的端口完全匹配:
- 查看Pod容器的端口配置:
kubectl describe pod <ingress-nginx-controller-pod-name> -n ingress-nginx | grep Ports - 若容器端口名称并非
http,需修正Service的targetPort配置,确保与容器端口的名称或数值一致。
5. 检查网络策略与NEG注解
- 确认没有
NetworkPolicy规则阻止健康检查流量访问Pod的80端口 - 验证Service的
cloud.google.com/neg注解格式正确,无语法错误(当前配置格式符合要求,可跳过格式校验)
验证修复效果
完成调整后,通过以下操作确认问题解决:
- 查看NEG端点状态:
gcloud compute network-endpoint-groups list gcloud compute network-endpoint-groups describe <neg-name> --zone <cluster-zone> - 检查健康检查状态:
gcloud compute health-checks describe neg-tcp-health-check - 测试Ingress访问:
curl <your-ingress-ip>
内容的提问来源于stack exchange,提问作者user2918879
相关产品推荐
相关产品推荐

