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

无法从一个群集访问到另一个群集的Kubernetes服务(通过VPC peerng),kubernetes,networking,cloud,cluster-computing,google-kubernetes-engine,Kubernetes,Networking,Cloud,Cluster Computing,Google Kubernetes Engine,我想知道是否有人可以帮助解决我的问题,以下是设置: 我们在GKE中有两个独立的kubernetes集群,运行在v1.17上,它们分别位于一个单独的项目中 我们在这两个项目之间建立了VPC对等网络 在集群1上,我们有一个由内部HTTPS负载平衡器公开的“service1”,我们不希望这是公开的 在集群2上,我们希望能够通过内部负载平衡器访问“service1”,它应该通过两个项目之间的VPC对等连接来访问 问题是: 当我在集群2的GKE节点上通过SSH连接时,我可以成功地运行一个curl请求来

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

  • 我们在GKE中有两个独立的kubernetes集群,运行在v1.17上,它们分别位于一个单独的项目中
  • 我们在这两个项目之间建立了VPC对等网络
  • 在集群1上,我们有一个由内部HTTPS负载平衡器公开的“service1”,我们不希望这是公开的
  • 在集群2上,我们希望能够通过内部负载平衡器访问“service1”,它应该通过两个项目之间的VPC对等连接来访问
问题是: 当我在集群2的GKE节点上通过SSH连接时,我可以成功地运行一个curl请求来访问集群1,并获得预期的响应,因此流量肯定是从集群2>集群1路由的。但是,当我从POD运行相同的curl命令时,在GKE节点上运行,相同的curl请求会超时

我已经运行了尽可能多的故障排除,包括telnet、traceroute等,我真的很困惑为什么会出现这种情况。如果有人能在这里阐明差异,那就太好了


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

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

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


问题已解决:-)

如其中一个答案中所述,应该是现成的。如果使用基于路由的GKE群集而不是VPC本机群集,则需要使用自定义路由

照此

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

这也在本文中进行了解释

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


因此,您似乎没有使用“VPC本机”群集,您需要的是“IP伪装”

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


您可以使用
ip masq代理
k8s自定义iptables
。在这之后,它将起作用,因为它就像是从节点而不是从pod内部进行呼叫。

听起来像是路由问题。手动创建路由,以便将对cluster2 pod范围的请求发送到cluster2节点。VPC对等支持辅助范围,但不支持放弃。