跨区域的 Google Cloud VPC 别名 IP 路由

跨区域的 Google Cloud VPC 别名 IP 路由

我有一个在 Google Kubernetes Engine 上运行的多集群/多区域 k8s 平台。底层 GCP VPC 网络以全局路由模式运行。k8s 服务通过 Alias IP 子网分配内部 IP(clusterIP)地址。

我可以将节点从一个集群 ping 到另一个集群,因此防火墙规则或路由通常没有问题,但我无法跨集群连接到其内部别名 IP 上的各个服务。

我可以从同一集群上的其他节点和容器连接到服务,但如果我在同一区域的 k8s 集群之外创建实例,则无法连接。

即使子网出现在 VPC 路由表中,别名 IP 范围似乎也可能未被路由。

有没有什么方法可以确保所有别名 IP 子网在整个 VPC 中正确路由?

一些细节...

kubectl get services --namespace production
NAME                               TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                         AGE
elasticsearch                      LoadBalancer   10.0.64.103   xxx.xxx.xxx.xxx   9200:30182/TCP,9300:31166/TCP   1m

gcloud compute routes list
NAME                            NETWORK  DEST_RANGE     NEXT_HOP                  PRIORITY
default-route-ac89edf7c623eb22  foo      10.0.64.0/19   foo                       1000

clusterIP 在列出的子网范围内,但在本地 k8s 集群之外无法访问。

答案1

对于您现有的设置,这是预期的行为。我相信您遇到的是一个别名 IP 的限制,这在本 GCP 文档中有记录“使用别名 IP 创建 VPC 原生集群“:

“内部服务的集群 IP 仅在集群内部可用。如果您想从 VPC 内部访问 Kubernetes 服务,但从集群外部(例如,从 Compute Engine 实例)访问,请使用内部负载均衡器。”

因此你应该考虑使用内部负载平衡能够从外部访问集群内部运行的服务。

相关内容