You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes 1.23.x升级至1.24.x时Nginx Ingress出现502错误的兼容配置求助

Kubernetes 1.23.x升级至1.24.x时Nginx Ingress出现502错误的兼容配置求助

我之前升级K8s版本时也踩过这个坑,确实1.24版本对Ingress Controller的健康探测逻辑做了调整,尤其是Azure环境下必须把探测路径改成/healthz才会正常,但这样又会和1.23版本不兼容,导致升级过程中Ingress掉链子。你提到的TCP探测方案确实是个靠谱的兼容思路,我来给你详细说说怎么配置和验证:

一、修改Ingress Controller的探测配置为TCP类型

不管你是用原生YAML还是Helm部署的Ingress Controller,核心都是把原来的HTTP探测换成TCP端口探测——因为TCP探测只检查端口是否处于监听状态,不依赖具体的HTTP路径,完美避开两个版本的路径差异问题。

1. 原生YAML部署的情况

找到你的Ingress Controller的Deployment或StatefulSet配置文件,把livenessProbe和readinessProbe部分改成下面这样:

livenessProbe:
  tcpSocket:
    port: 10254  # Nginx Ingress默认的健康检查端口,别改除非你自定义过
  initialDelaySeconds: 10
  periodSeconds: 10
readinessProbe:
  tcpSocket:
    port: 10254
  initialDelaySeconds: 10
  periodSeconds: 10

修改后执行kubectl apply -f <你的配置文件路径>,K8s会自动滚动更新Ingress Pod,不会一次性重启所有实例,能有效避免 downtime。

2. Helm部署的情况

如果是用官方Helm chart部署的,修改你的values.yaml文件里的探测配置:

controller:
  livenessProbe:
    enabled: true
    type: TCP
    port: 10254
  readinessProbe:
    enabled: true
    type: TCP
    port: 10254

然后执行Helm更新命令:

helm upgrade ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx -f values.yaml

二、验证配置有效性

  1. 先检查Ingress Pod状态:
kubectl get pods -n ingress-nginx

确保所有Pod都处于Running状态,且READY列显示正常(比如1/1)。
2. 测试业务服务的可用性:用curl或者直接访问你的Ingress域名,确认没有502错误,服务能正常响应。
3. 可以先在测试环境把K8s版本从1.23升到1.24,全程观察Ingress的状态,确认没有出现服务中断的情况。

三、额外注意事项

  • 确保你的Ingress Controller版本是兼容1.23和1.24的,比如官方的v1.3.x或v1.4.x版本,太老的版本可能不支持TCP探测或者和新K8s版本有其他兼容性问题。
  • 如果你用的是AKS(Azure Kubernetes Service),负载均衡器的健康检查会自动适配TCP探测配置,不需要额外在Azure门户里调整。

这样配置后,不管是在1.23还是升级到1.24版本,Ingress Controller的健康探测都能正常工作,升级过程中就不会出现downtime了。

备注:内容来源于stack exchange,提问作者Peter Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:59:07