将PHP应用迁移至EKS时部署失败:就绪探针连接被拒绝
针对你遇到的就绪探针错误Get "http://172.17.0.6:80//health.php": dial tcp 172.17.0.6:80: connect: connection refused,可以从以下几个方向排查:
容器内Web服务未正常启动
直接进入运行中的容器(若Pod未被销毁),检查Web服务状态:kubectl exec -it <pod-name> -- ps aux确认apache/nginx等服务是否在运行。同时查看服务日志定位启动失败原因:
# Apache示例 kubectl exec -it <pod-name> -- tail -f /var/log/apache2/error.log # Nginx示例 kubectl exec -it <pod-name> -- tail -f /var/log/nginx/error.log确保Dockerfile中使用前台启动命令(比如
CMD ["apache2-foreground"]),避免服务后台运行导致容器退出。Web服务监听地址错误
检查容器内Web服务是否监听0.0.0.0:80,而非仅127.0.0.1(后者会拒绝外部连接):kubectl exec -it <pod-name> -- netstat -tulpn若监听地址不对,修改apache/nginx配置文件,将监听地址改为
0.0.0.0:80,重新构建镜像。就绪探针路径配置错误
注意错误日志中的路径是//health.php(双斜杠),检查Deployment的就绪探针配置,确认httpGet.path是否误写为//health.php,应修正为/health.php。错误的路径可能导致服务无法识别请求,间接触发连接问题。探针触发时机过早
如果Web服务启动较慢,探针可能在服务就绪前就开始检测。查看Pod事件确认:kubectl describe pod <pod-name>调整探针参数,增加
initialDelaySeconds(比如设为30),给服务足够的启动时间,同时可适当调整periodSeconds和failureThreshold。容器内网络限制
检查容器内是否有防火墙规则或SELinux限制阻止80端口访问:# 查看iptables规则 kubectl exec -it <pod-name> -- iptables -L # 检查SELinux状态(RHEL系镜像) kubectl exec -it <pod-name> -- getenforce关闭不必要的防火墙规则,或调整SELinux策略(测试阶段可临时关闭
setenforce 0验证)。
内容的提问来源于stack exchange,提问作者Phoenix

