如何让 GKE 集群使用私有 IP 或网络进行通信?

How to make GKE clusters communicate using private IPs or networks?

有没有办法让 GKE 集群(在同一网络中)使用内部 IP 地址相互通信?

我知道 GKE 内部负载均衡器只能处理来自相同网络和相同区域的流量。我觉得这个实现很奇怪。

我知道 pod IP 是可路由的,但它们不是静态的,可以随时更改。另外,我知道外部负载平衡器中有 loadBalancerSourceRanges 配置选项,使用它我只能允许我想要的子网,但是如果我想使用内部而不使用 public IP 来保持每次通信怎么办?

有什么方法可以达到我的目的吗?像配置防火墙规则或其他什么?或 "Global routing mode" 在创建 VPC 网络或其他任何东西时?

如果您在 2 个不同区域有 2 个集群,并且希望它们使用内部 IP 进行通信,最好的选择是在集群中使用 nodePort 服务来公开您的 pods 然后 configure a VM instance to act as a proxy对于每个集群。

这与将 LoadBalancer 服务用作内部负载均衡器具有相同的效果,但它的好处是可以跨多个区域工作。它还允许同一个负载均衡器处理所有服务的请求。

您需要注意的一件事是代理实例过载。根据请求的数量,您可能需要为集群配置多个代理实例,每个代理实例只处理少量服务。

感谢Global Access,添加networking.gke.io/internal-load-balancer-allow-global-access: "true"注释将允许您跨区域通信。

“全球访问在 GKE 集群 1.16+ 上的 Beta 版和 1.17.9-gke.600+ 上的 GA 中可用。”

https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing#global_access