我想知道是否有人可以帮助解决我的问题,设置如下:
- 我们在 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-agent
或k8s-custom-iptables
。之后,它将起作用,因为它就像您从节点而不是 Pod 内部进行调用一样。
关于kubernetes - 无法从一个集群访问另一个集群的 Kubernetes 服务(通过 VPC 对等互连),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66601972/