我想知道是否有人可以帮助解决我的问题,这是设置:
问题来了: 当我在集群 2 上的 GKE 节点上通过 SSH 连接时,我可以成功运行 curl 请求来访问在集群 1 上运行的 https://service1.domain.com,并获得预期的响应,因此流量肯定是从集群 2 > 集群路由1. 但是,当我从 POD 运行相同的 curl 命令并在 GKE 节点上运行时,相同的 curl 请求会超时。
我已经运行了尽可能多的故障排除,包括 telnet、traceroute 等,但我真的不明白为什么会这样。如果有人能阐明这里的差异,那就太好了。
我确实想知道 pod 网络是否以某种方式通过集群公共 IP 而不是通过 VPC 对等连接转发流量。
答案 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-agent
或 k8s-custom-iptables
。在此之后,它将起作用,因为它就像您是从节点而不是在 pod 内部进行调用一样。