在EKS上通过kubectl及YAML部署应用时LB健康检查持续失败如何排查
常见排查步骤
1. 验证Pod服务可用性
- 执行
kubectl get pods -l app=appscripting,确认Pod处于Running状态,无异常重启记录 - 进入Pod执行端口监听校验:
kubectl exec -it <Pod名称> -- ss -tunlp,确认容器内同时监听了80和443端口。注意你当前的ReplicaSet配置仅声明了containerPort: 80,且Service配置了443端口转发到容器的443端口,若容器本身未启动HTTPS服务监听443,会直接导致转发失败 - 本地端口转发验证服务响应:
kubectl port-forward <Pod名称> 8080:80 8443:443,访问本地127.0.0.1:8080和127.0.0.1:8443,确认服务本身可以正常返回响应
2. 验证Service与NodePort连通性
- 执行
kubectl describe svc app-scripting,查看Endpoints字段是否正确关联了运行中Pod的IP,若Endpoints为空说明标签匹配异常 - 记录输出中80、443端口对应的NodePort值(即30000-32767段的端口)
- 登录任意集群工作节点,分别执行
curl localhost:<80对应的NodePort>、curl -k localhost:<443对应的NodePort>:- 若访问失败,首先检查节点安全组的入站规则,是否放开了30000-32767端口段允许LB所属CIDR访问
- 其次检查kube-proxy组件状态:
kubectl get pods -n kube-system -l k8s-app=kube-proxy,确认所有kube-proxy Pod正常运行
3. 验证AWS LB配置
- 登录AWS控制台查看对应LB的健康检查规则,确认检查的端口、协议、路径符合预期:EKS默认会将LB健康检查指向Service第一个端口对应的NodePort,你可以通过Service的
service.beta.kubernetes.io/aws-load-balancer-healthcheck-*系列注解自定义健康检查规则 - 检查LB的出站规则,是否允许访问集群节点的30000-32767端口段
- 确认集群VPC的网络ACL没有拦截LB到工作节点的流量
快速验证方法
你可以先暂时注释掉Service配置中443端口的相关规则,仅保留80端口配置后重新kubectl apply更新服务,若健康检查恢复正常,说明问题出在443端口的容器监听或转发配置上。
内容的提问来源于stack exchange,提问作者brooksly
相关产品推荐
相关产品推荐

