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



我想知道是否有人能帮助解决我的问题,下面是设置:

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

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

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

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

所以您似乎没有使用"VPC本机";集群,您需要的是";IP伪装";。

根据本文件:"GKE集群使用IP伪装,使得集群之外的目的地只接收来自节点IP地址而不是Pod IP地址的数据包。这在期望仅接收来自节点IP地址的数据包的环境中非常有用">

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

如其中一个答案所述,IP别名(VPC本机(应该开箱即用。如果使用基于路由的GKE集群而不是VPC本地集群,则需要使用自定义路由。

根据本文件

在与IP别名。如果不使用IP别名,则可以导出自定义路由使得GKE容器可以从对等网络到达。

本文件中也对此进行了解释

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

您面临的问题似乎与本SO问题中提到的问题类似,也许您的pod使用的IP超出了VPC范围,因此无法访问对等VPC?

UPDATE:在谷歌云中,我试图从另一个启用了VPC本地网络的集群访问服务,我相信这允许pod使用VPC路由,可能还有内部IP。

问题已解决:-(

最新更新