You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从外部访问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实例截图

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端口的入站、出站流量。
  • 容器端口监听验证
    进入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:16:01