无法从外部访问EC2内K8s LoadBalancer,请求排查配置问题
Kubernetes LoadBalancer Service外部访问故障排查
问题现象
在Kubernetes集群中部署了简单Web应用,通过LoadBalancer类型的Service暴露服务,但仅能从EC2实例内部通过curl访问,外部无法连通。
相关配置文件
Service配置
apiVersion: v1 kind: Service metadata: name: load-balancer-service spec: type: LoadBalancer selector: tag: frontend ports: - name: port-lb-k8s protocol: TCP port: 8080 targetPort: 80
Deployment配置
apiVersion: apps/v1 kind: Deployment metadata: name: frontend-deployment spec: selector: matchLabels: tag: frontend replicas: 3 # 注释与实际副本数不符,实际将运行3个匹配模板的Pod template: metadata: labels: tag: frontend spec: containers: - name: frontend-container image: coitlearning/coit-frontend
EC2实例截图

排查与解决方案
内部可访问说明Pod与Service的标签匹配正常、容器内Web服务运行正常,外部访问失败重点从以下方向排查:
确认LoadBalancer外部IP状态
执行命令查看Service状态:kubectl get services load-balancer-service- 若
EXTERNAL-IP列显示<pending>:说明云服务商未成功分配负载均衡IP,需检查集群的云提供商组件配置(如AWS EKS的IAM角色权限、VPC网络是否满足负载均衡创建要求)。 - 若已分配IP:直接访问该IP的8080端口,验证是否能连通。
- 若
安全组与网络ACL检查
- 检查AWS负载均衡对应的安全组,是否允许外部IP段(如
0.0.0.0/0)访问8080端口。 - 检查Kubernetes集群节点的安全组,是否允许负载均衡的流量转发到节点端口(Service会在节点上监听随机端口,需确保节点安全组允许负载均衡IP段访问这些端口)。
- 检查VPC网络ACL,是否放行8080端口的入站、出站流量。
- 检查AWS负载均衡对应的安全组,是否允许外部IP段(如
容器端口监听验证
进入Pod内部,确认Web服务是否正常监听80端口:kubectl exec -it $(kubectl get pods -l tag=frontend -o name | head -n1) -- netstat -tulpn若服务未监听80端口,需调整Deployment的容器配置或Service的
targetPort字段。AWS负载均衡目标组检查
登录AWS控制台查看负载均衡的目标组:- 确认目标组已关联Kubernetes集群节点,且节点状态为健康。
- 检查健康检查配置,确保健康检查的端口、路径与Web服务实际情况匹配,健康检查失败会导致负载均衡停止转发流量。
内容的提问来源于stack exchange,提问作者Jitender
相关产品推荐
相关产品推荐

