AWS EKS配置问题:API Gateway无法访问私有子网中的Pod
解决API Gateway无法访问EKS私有子网Pod的500错误
你的问题根源有两个:
- Pod IP是动态的:Pod重启或重建后IP会变化,硬编码Pod IP完全不可靠
- 公网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内资源通信的桥梁,配置步骤:
- 登录AWS控制台,进入API Gateway服务
- 左侧菜单选择VPC Links,点击「Create VPC Link」
- 选择对应类型的VPC Link(REST API选「REST API VPC Link」,HTTP API选「HTTP API VPC Link」),输入名称
- 选择EKS集群所在的VPC,勾选私有子网(与Pod所在子网一致)
- 选择一个安全组,该安全组需允许出站访问EKS节点的80端口(或你Service配置的端口)
- 完成创建,等待VPC Link状态变为「Available」
步骤3:修改API Gateway集成配置
回到已创建的API,修改GET方法的集成配置:
- 进入方法的集成配置页,将集成类型从「HTTP」改为「VPC Link」
- 选择刚创建的VPC Link
- 设置端点URL为:
http://api-dev-service.dev.svc.cluster.local:80/status- 使用Kubernetes内部DNS名比ClusterIP更稳定,即使Service重启也不会变更
- 确认HTTP方法为GET,保存配置
步骤4:配置安全组规则
确保EKS节点的安全组允许VPC Link的安全组访问Service端口(80):
- 进入EC2控制台,找到EKS节点的安全组(eksctl创建的节点组安全组名称通常包含
eks-xxx-nodegroup) - 添加入站规则:
- 类型: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
相关产品推荐
相关产品推荐

