如何通过AWS VPN终端节点访问同VPC内EKS集群的Pod服务?
解决方案
方法1:使用ClusterIP Service直接访问
- K8s默认的ClusterIP类型Service会分配一个VPC内可达的私有IP,这个IP可以被VPC内(包括VPN连接后的客户端)的资源访问。
- 先获取你的Service的ClusterIP和映射端口(需对应Pod的3005端口),连接VPN后直接用
ClusterIP:端口访问即可。 - 核心原因:Pod IP属于K8s集群的Overlay内网网段,VPC内非EKS节点无法直接路由;而ClusterIP的流量会由EKS节点负责转发到Pod,全程在VPC内部流转。
- 确保EKS节点安全组允许VPN客户端所在的VPC CIDR访问该Service的端口。
方法2:使用NodePort Service
- 创建NodePort类型的Service,指定一个30000-32767范围内的端口,映射到Pod的3005端口。
- 配置EKS节点安全组,允许VPN客户端CIDR访问这个NodePort端口。
- 连接VPN后,用任意EKS节点的私有IP加上NodePort即可访问服务,流量完全在VPC内部。
方法3:使用AWS内网负载均衡器(Internal LoadBalancer)
- 若需要稳定的入口(不依赖单个节点或ClusterIP),可以创建仅VPC内部可达的内网ELB,不会生成公网IP。
- 示例Service YAML配置:
apiVersion: v1 kind: Service metadata: name: your-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 targetPort: 3005 selector: app: your-pod-label
- 内网ELB的私有域名/IP仅在VPC内可访问,连接VPN后直接使用即可,完全符合你的需求。
关键检查项
- 确认VPN客户端的IP段已加入EKS集群所在VPC的路由表,保证流量能路由到EKS节点或内网ELB。
- 验证EKS节点安全组的入站规则,已允许VPN客户端CIDR访问对应服务端口。
内容的提问来源于stack exchange,提问作者Noam
相关产品推荐
相关产品推荐

