K8s存活探针持续失败但Pod内CURL访问健康端点正常求助
Kubernetes存活探针失败但Pod内curl正常的排查思路
针对存活探针报错dial tcp 10.224.0.130:7000: connect: connection refused,但Pod内部curl本地/health端点正常的情况,按以下步骤排查:
检查应用监听地址:这是最常见的根因。很多应用(如你使用的gunicorn/Flask)默认仅绑定
127.0.0.1,仅允许容器内部本地访问,而Kubernetes存活探针是通过Pod的集群IP发起请求,因此会被拒绝。- 进入Pod执行
ss -tulpn查看端口监听状态,确认7000端口是否绑定0.0.0.0而非仅127.0.0.1。 - 若为gunicorn启动,确保启动命令包含
--bind 0.0.0.0:7000;若为Flask,需设置环境变量FLASK_RUN_HOST=0.0.0.0或启动时指定--host=0.0.0.0。
- 进入Pod执行
验证Pod网络可达性:在Pod所在节点上执行
curl http://10.224.0.130:7000/health:- 若节点上也无法连接,说明应用监听地址或Pod网络配置存在问题;
- 若节点上能正常访问,需检查kubelet服务状态,或节点防火墙是否拦截了kubelet的探针请求。
排查NetworkPolicy规则:确认集群中是否存在针对该Pod所在Namespace的NetworkPolicy,是否限制了7000端口的入站访问——kubelet的探针请求需要被允许通过,否则会被拦截。
调整探针参数:尽管你设置了
initialDelaySeconds:20,但如果应用启动依赖外部服务(如数据库、配置中心),可能探针首次检查时应用尚未完全就绪:- 尝试延长
initialDelaySeconds(例如改为60),同时可增加failureThreshold(默认值3),给应用更多启动缓冲时间。
- 尝试延长
查看容器启动日志:执行
kubectl logs <pod-name> -c flask-container,检查应用启动过程中是否有异常日志,确认服务是否真的在7000端口正常启动。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

