我正在努力使服务通过对等 VPC 变得可见。
我有两个 GKE 集群(cluster-A
和cluster-B
),每个集群位于不同的 VPC 中。
我已经创建了一个连接两个 VPC 的 VPC 网络对等互连。
我按照说明启用ip-masquerade-agent
并允许集群能够互相访问 Pod(https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent)
事情是这样的,当我尝试从cluster-A
到卷曲A荚它cluster-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