AWS负载均衡器对接简单Kubernetes集群时请求超时问题排查
问题描述
搭建了包含1个Master节点和2个Worker节点的Kubernetes集群,仅部署了示例Nginx Pod。尝试接入AWS负载均衡器时请求持续超时。Kubernetes LoadBalancer Service配置如下:
apiVersion: v1 kind: Service metadata: name: nginx-service labels: app: nginx svc: test-nginx spec: type: LoadBalancer selector: app: nginx ports: - protocol: TCP port: 8080 targetPort: 80 nodePort: 31000
访问EC2节点公网IP加31000端口可正常获取「Welcome to nginx!」响应,但手动配置AWS负载均衡器以2个Worker节点为目标后无法正常工作。
可能的原因及排查方向
安全组配置缺失
- 检查负载均衡器的安全组:是否允许客户端访问其监听端口(如你配置的80/8080端口)。
- 检查Worker节点的安全组:是否允许负载均衡器的安全组访问31000端口。AWS负载均衡器转发请求时使用自身安全组作为源,而非客户端IP,因此Worker节点需开放对应端口给LB的安全组。
目标组配置错误
- 确认目标组的协议和端口:需选择TCP协议,端口设置为31000,与NodePort一致。
- 检查健康检查配置:健康检查路径需为Nginx可响应的路径(如
/),端口设为31000,超时、间隔等参数需合理。若健康检查失败,LB会将节点移出目标组,导致无可用转发目标。 - 验证目标组关联状态:确认2个Worker节点已加入目标组,且状态为「健康」。
负载均衡器监听规则不匹配
- 检查LB的监听规则:是否将客户端访问的端口(如80)正确转发到目标组的31000端口,协议需保持TCP一致。
NodePort监听异常
- 在Worker节点上执行
ss -tulpn | grep 31000,确认kube-proxy是否已在该端口监听。若某节点未监听31000,请求转发到该节点会超时。
- 在Worker节点上执行
网络与负载均衡器类型不兼容
- 若使用Application Load Balancer(ALB):确认Worker节点与LB处于同一VPC子网,且子网路由表允许LB与节点间的私网通信。
- 若使用Network Load Balancer(NLB):确认目标类型设置为「实例」,且LB可访问Worker节点的私网IP。
K8s内部关联问题
- 执行
kubectl get pods -o wide,确认Nginx Pod是否调度到了这2个Worker节点上。若Pod仅存在于其中一个节点,LB转发到无Pod的节点会超时。 - 执行
kubectl describe service nginx-service,查看Endpoints字段是否包含Pod的IP。若Endpoints为空或数量不符,说明Service的selector与Pod的labels不匹配。
- 执行
内容的提问来源于stack exchange,提问作者Peter Nguyen
相关产品推荐
相关产品推荐

