无法从一个集群访问 Kubernetes 服务到另一个集群(通过 VPC peerng)

时间:2021-03-12 14:39:20

标签: kubernetes networking cloud cluster-computing google-kubernetes-engine

我想知道是否有人可以帮助解决我的问题,这是设置:

  • 我们在 GKE 中有 2 个独立的 kubernetes 集群,在 v1.17 上运行,它们每个都位于一个单独的项目中
  • 我们已经在两个项目之间建立了 VPC 对等
  • 在集群 1 上,我们有一个由内部 HTTPS 负载均衡器公开的“service1”,我们不希望它公开
  • 在集群 2 上,我们打算能够通过内部负载均衡器访问“service1”,它应该通过两个项目之间的 VPC 对等连接来实现这一点

问题来了: 当我在集群 2 上的 GKE 节点上通过 SSH 连接时,我可以成功运行 curl 请求来访问在集群 1 上运行的 https://service1.domain.com,并获得预期的响应,因此流量肯定是从集群 2 > 集群路由1. 但是,当我从 POD 运行相同的 curl 命令并在 GKE 节点上运行时,相同的 curl 请求会超时。

我已经运行了尽可能多的故障排除,包括 telnet、traceroute 等,但我真的不明白为什么会这样。如果有人能阐明这里的差异,那就太好了。

我确实想知道 pod 网络是否以某种方式通过集群公共 IP 而不是通过 VPC 对等连接转发流量。

4 个答案:

答案 0 :(得分:0)

您面临的问题似乎与此 SO question 中提到的问题相似,也许您的 Pod 使用了 VPC 范围之外的 IP,因此无法访问对等 VPC?

答案 1 :(得分:0)

更新:在 Google Cloud 中,我尝试从另一个启用了 VPC 本地网络的集群访问该服务,我相信这允许 pod 使用 VPC 路由和可能的内部 IP。

问题解决了:-)

答案 2 :(得分:0)

正如其中一个答案中提到的,IP aliases (VPC-native) 应该是开箱即用的。如果使用基于路由的 GKE 集群而不是 VPC 原生集群,您将需要使用自定义路由。

根据此document

<块引用>

默认情况下,与 GKE 一起使用时支持 VPC 网络对等互连 IP 别名。如果不使用IP别名,可以导出自定义路由 以便可以从对等网络访问 GKE 容器。

这也在这个document

<块引用>

如果您有没有 VPC 原生寻址的 GKE 集群,您可能有 多个静态路由将流量定向到虚拟机实例 托管您的容器。您可以导出这些静态路由,以便 容器可从对等网络访问。

答案 3 :(得分:0)

因此,您似乎没有使用“VPC 原生”集群,而您需要的是“IP 伪装”。

来自 this 文档: “GKE 集群使用 IP 伪装,以便集群外的目的地仅接收来自节点 IP 地址的数据包,而不是来自 Pod IP 地址的数据包。这在期望仅接收来自节点 IP 地址的数据包的环境中非常有用。”

您可以使用 ip-masq-agentk8s-custom-iptables。在此之后,它将起作用,因为它就像您是从节点而不是在 pod 内部进行调用一样。