如何让EKS服务仅在同VPC内访问并与AWS Lambda通信?
EKS实现VPC内专属访问端点的方案
当然可以通过EKS结合AWS原生能力实现,针对你的需求(同VPC内的Lambda访问EKS服务、不暴露公网),推荐以下两种核心方案:
1. 内部负载均衡器(Internal LoadBalancer)
这是最适配的方案,创建Service时指定AWS内部型负载均衡器,端点仅在VPC内可见:
- 创建
type: LoadBalancer类型的Service,添加AWS专属注解开启内部LB:apiVersion: v1 kind: Service metadata: name: service-a annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: service-a ports: - protocol: TCP port: 80 targetPort: 8080 - AWS会自动创建一个仅VPC内可访问的NLB/ALB,Lambda处于同VPC即可通过LB的内网地址访问服务A。
- 额外安全加固:给LB的安全组配置规则,仅允许Lambda所在安全组或VPC CIDR段访问,进一步缩小访问范围。
2. NodePort + 安全组/网络策略
如果不想用负载均衡器,可选择NodePort配合访问控制:
- 创建
type: NodePort的Service,EKS节点会在指定端口暴露服务。 - 配置EKS节点的安全组,仅允许VPC内的IP段(如Lambda的VPC CIDR)访问该NodePort端口,阻断公网流量。
- 搭配Kubernetes
NetworkPolicy,在集群层面限制Service A仅接收来自VPC内IP的请求,实现双层防护:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: restrict-service-a-to-vpc spec: podSelector: matchLabels: app: service-a ingress: - from: - ipBlock: cidr: 10.0.0.0/16 # 替换为你的VPC CIDR ports: - protocol: TCP port: 8080
关于ClusterIP的补充
你提到的ClusterIP仅能被EKS集群内部的Pod访问,Lambda不在集群Pod网络中,因此无法直接通过ClusterIP访问服务,所以需要用到上述两种方案来打通VPC内的跨资源访问。
内容的提问来源于stack exchange,提问作者opensource-developer
相关产品推荐
相关产品推荐

