kubernetes - 无法从一个集群访问另一个集群的 Kubernetes 服务(通过 VPC 对等互连)

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

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

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

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

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

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

最佳答案

看来您没有使用“VPC 原生”集群,而您需要的是“IP 伪装”。

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

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

关于kubernetes - 无法从一个集群访问另一个集群的 Kubernetes 服务(通过 VPC 对等互连),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66601972/

相关文章:

python - 有没有一种简单的方法可以优雅地关闭 python grpc 服务器?

testing - 在测试场景中阻止外部 web 服务模拟 "down"的策略?

heroku - 在Heroku上托管Dart应用程序的问题

ios - 我们可以使用 iOS 检测 SIM 卡是预付费还是后付费?

ios - AWS Amplify 数据库选项

hadoop - 云端小功能并行处理

image - Kubernetes Minikube Docker尝试提取镜像失败

docker - 如何在不运行K8S入口点的情况下保持docker pod?

vagrant - 多样化的 Kubernetes 和 Vagrant 问题

c - C 编程中从服务器到客户端的文件传输