如何使 GKE 服务对在不同 VPC 中运行的另一个 GKE 集群可见

如何使 GKE 服务对在不同 VPC 中运行的另一个 GKE 集群可见

我正在努力使服务通过对等 VPC 变得可见。

我有两个 GKE 集群(cluster-Acluster-B),每个集群位于不同的 VPC 中。

我已经创建了一个连接两个 VPC 的 VPC 网络对等互连。

我按照说明启用ip-masquerade-agent并允许集群能够互相访问 Pod(https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent

事情是这样的,当我尝试从cluster-A卷曲Acluster-B可以工作,但是当我做curl一个服务它不起作用。

从运行于 的 Pod 中cluster-A

$ curl http://10.132.0.13:8080 # cluster-B Pod
Hello World

$ curl http://10.134.145.111:8080 # cluster-B Service
curl: Connection timed out

如何使服务在两个集群上都可见?

一些可能有帮助的重要信息:

簇-A

servicesIpv4Cidr: 10.30.0.0/18
clusterIpv4Cidr: 10.32.0.0/11

ip-masq-agent配置图:

apiVersion: v1
kind: ConfigMap
data:
  config: |
    nonMasqueradeCIDRs:
    - 10.32.0.0/11
    - 10.30.0.0/18
    resyncInterval: 60s
    masqLinkLocal: true
metadata:
  name: ip-masq-agent
  namespace: kube-system

簇B

servicesIpv4Cidr: 10.134.0.0/16
clusterIpv4Cidr: 10.132.0.0/16

ip-masq-agent配置图:

apiVersion: v1
kind: ConfigMap
data:
  config: |
    nonMasqueradeCIDRs:
    - 10.132.0.0/16
    - 10.134.0.0/16
    resyncInterval: 60s
    masqLinkLocal: false
metadata:
  name: ip-masq-agent
  namespace: kube-system

答案1

从另一个集群直接访问一个集群服务是不可行的,您可以使用负载均衡器。

解释它的参考资料位于 VPC 本机集群和别名部分文档其中指出:

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

即使示例指的是同一个 VPC,这也适用于使用 VPC Peering 的不同 VPC(因为它们被视为“同一个” VPC,但有一些例外情况,例如及物性

“只有直接对等的网络才能通信。不支持传递对等。换句话说,如果 VPC 网络 N1 与 N2 和 N3 对等,但 N2 和 N3 未直接连接,则 VPC 网络 N2 无法通过对等与 VPC 网络 N3 通信。”

答案2

不受 Google GKE 的支持,始终会创建一个“额外跳跃” VPC,从而有效地中断来自其他 VPC 的任何通信,任何客户都与此无关,投票支持功能请求: https://issuetracker.google.com/issues/244483997?pli=1

相关内容