如何在AWS中实现同VPC及跨VPC的EKS集群gRPC调用?
AWS EKS集群间gRPC通信实现方案
一、同VPC下开发/Staging集群间的gRPC通信
两个集群处于同一VPC,网络天然连通,只需完成服务暴露和安全组配置:
- 用内部NLB暴露gRPC服务:
在目标集群(如staging)的gRPC服务部署中,通过AWS Load Balancer Controller创建内部网络负载均衡器(Internal NLB),添加注解service.beta.kubernetes.io/aws-load-balancer-internal: "true"指定内部LB,同时配置service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: "proxy_protocol_v2.enabled=true"适配gRPC的HTTP/2协议。 - 安全组规则配置:
允许源集群(开发)的节点安全组,向目标集群NLB的安全组发起gRPC默认端口(50051)的TCP流量;目标集群节点安全组允许NLB流量访问gRPC服务端口。 - 调用方式:
在开发集群的fullrest服务中,直接使用NLB的内部DNS名称或私有IP作为gRPC请求的目标地址。
也可选择轻量方案:
- 节点IP+NodePort访问:将gRPC服务设为NodePort类型,确保源集群节点能访问目标集群节点的NodePort端口,直接用目标节点私有IP加端口调用。
- 跨集群DNS转发:若两个集群都用CoreDNS,配置转发规则,将目标集群的服务域名(如
grpc-service.staging.svc.cluster.local)转发到目标集群CoreDNS的服务IP,实现类内部服务发现的调用。
二、跨VPC向生产集群发送gRPC请求
生产集群在独立VPC,需先打通网络再配置服务暴露:
- 建立VPC网络连通:
- VPC对等连接:在AWS控制台创建源VPC(开发/staging所在)与生产VPC的对等连接,双方接受请求后,更新各自VPC路由表,添加对方VPC CIDR的路由条目,指向对等连接。
- Transit Gateway(推荐多VPC场景):将所有相关VPC挂载到中转网关,统一管理路由,简化多VPC连通逻辑。
- 配置跨VPC服务暴露:
在生产集群中创建内部NLB暴露gRPC服务(添加service.beta.kubernetes.io/aws-load-balancer-internal: "true"注解),确保NLB子网在生产VPC内,且安全组允许源VPC CIDR的gRPC端口TCP流量。 - 验证安全组与路由:
- 源VPC节点安全组允许向生产VPC NLB安全组发起gRPC端口流量;
- 双方VPC路由表已添加对端CIDR的路由,指向对等连接/Transit Gateway。
- 调用方式:
在开发/staging集群的fullrest服务中,使用生产集群NLB的内部DNS名称(可通过Route 53私有托管区实现跨VPC DNS解析)或生产VPC私有IP作为请求目标。
额外注意事项
- gRPC基于HTTP/2,NLB的TCP模式完全兼容gRPC流量,无需额外配置;
- 若启用TLS加密gRPC通信,服务端需配置证书,客户端携带对应根证书完成验证;
- 测试阶段可使用
grpcurl工具在源集群节点验证连通性,比如执行grpcurl -plaintext <目标地址>:50051 list。
内容的提问来源于stack exchange,提问作者brian enno
相关产品推荐
相关产品推荐

