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

AWS EKS配置问题:API Gateway无法访问私有子网中的Pod

解决API Gateway无法访问EKS私有子网Pod的500错误

你的问题根源有两个:

  1. Pod IP是动态的:Pod重启或重建后IP会变化,硬编码Pod IP完全不可靠
  2. 公网API Gateway无法直接访问VPC私有IP:默认的公网API Gateway部署在AWS公共网络环境,没有权限直接访问EKS私有子网内的资源

以下是分步解决方案(推荐方案一:API Gateway VPC集成 + Kubernetes ClusterIP Service)

步骤1:创建Kubernetes ClusterIP Service(稳定访问Pod)

先给后端Deployment创建ClusterIP Service,提供稳定的访问入口,替换动态的Pod IP:

apiVersion: v1
kind: Service
metadata:
  name: api-dev-service
  namespace: dev
spec:
  selector:
    app: api-dev  # 匹配Deployment中Pod的标签
  ports:
    - protocol: TCP
      port: 80        # Service对外暴露的端口
      targetPort: 5000 # 转发到Pod的端口
  type: ClusterIP

执行命令应用配置:

kubectl apply -f service.yaml

可以通过kubectl get service -n dev查看Service信息,或直接用Kubernetes内部DNS名api-dev-service.dev.svc.cluster.local访问(VPC内资源可直接解析该DNS)。

步骤2:创建API Gateway VPC Link(打通VPC访问路径)

VPC Link是API Gateway与VPC内资源通信的桥梁,配置步骤:

  1. 登录AWS控制台,进入API Gateway服务
  2. 左侧菜单选择VPC Links,点击「Create VPC Link」
  3. 选择对应类型的VPC Link(REST API选「REST API VPC Link」,HTTP API选「HTTP API VPC Link」),输入名称
  4. 选择EKS集群所在的VPC,勾选私有子网(与Pod所在子网一致)
  5. 选择一个安全组,该安全组需允许出站访问EKS节点的80端口(或你Service配置的端口)
  6. 完成创建,等待VPC Link状态变为「Available」

步骤3:修改API Gateway集成配置

回到已创建的API,修改GET方法的集成配置:

  1. 进入方法的集成配置页,将集成类型从「HTTP」改为「VPC Link」
  2. 选择刚创建的VPC Link
  3. 设置端点URL为:http://api-dev-service.dev.svc.cluster.local:80/status
    • 使用Kubernetes内部DNS名比ClusterIP更稳定,即使Service重启也不会变更
  4. 确认HTTP方法为GET,保存配置

步骤4:配置安全组规则

确保EKS节点的安全组允许VPC Link的安全组访问Service端口(80):

  1. 进入EC2控制台,找到EKS节点的安全组(eksctl创建的节点组安全组名称通常包含eks-xxx-nodegroup)
  2. 添加入站规则:
    • 类型:TCP
    • 端口范围:80
    • 来源:选择创建VPC Link时使用的安全组

可选方案:用内部NLB暴露Service(适合灵活扩展场景)

如果需要通过负载均衡器访问服务,可创建内部Network Load Balancer(NLB):

apiVersion: v1
kind: Service
metadata:
  name: api-dev-nlb-service
  namespace: dev
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
    service.beta.kubernetes.io/aws-load-balancer-internal: "true" # 标记为内部NLB,仅VPC内可访问
spec:
  selector:
    app: api-dev
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000
  type: LoadBalancer

创建完成后获取NLB的DNS名,在API Gateway的VPC Link集成中使用该DNS作为端点URL即可。

完成以上配置后,重新测试API Gateway端点即可正常访问后端服务。

内容的提问来源于stack exchange,提问作者Roman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:53:21