6

我们将现有的开发集群从 1.13.6-gke.13 升级到 1.14.6-gke.13,我们的 pod 无法再通过我们的 Google Cloud VPN 访问我们的内部网络。我们的生产集群(仍在 1.13 上)共享相同的 VPC 网络和 VPN 隧道,并且仍然可以正常工作。唯一改变的是开发集群上的管理节点和节点池升级到 1.14。

我在开发集群上的一个 pod 中打开了一个 shell,并尝试 ping 我们需要访问的内部服务器的 IP 地址。没有收到回复。在我们的生产集群中的 pod 上执行相同的操作可以按预期工作。

我通过 ssh 连接到集群中的一个节点,并且能够 ping 通内部网络。所以只是 pod 有网络问题。

对集群中公开服务的访问仍按预期工作。健康检查没问题。

更新:

我使用最新的 1.13 版本创建了一个新的节点池,从 1.14 池中排空了 pod,并且在 1.13 池上再次运行的 pod 一切正常。1.14 肯定有问题。这是由一些新的配置选项引起的问题还是只是一个错误还有待观察。

解析度:

IP 伪装在这里讨论https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent。我的解决方案是将每个集群的 pod 子网添加到 GCP 上的 VPN 云路由器中的广告网络列表中。所以现在 pod 网络可以遍历 VPN。

4

1 回答 1

9

在 GKE 1.13.x 之前,即使没有必要,GKE 也会伪装 pod 尝试访问外部 IP,即使在集群的同一 VPC 上,除非目标位于 10.0.0.0/8 范围内。

从 1.14.x 版本开始,集群不再默认添加该规则。这意味着尝试到达任何端点的 Pod 将使用其 Pod IP 而不是节点 IP,因为伪装规则已被删除。

您可以尝试重新创建 Cloud VPN 以包含 POD IP 范围。

于 2019-10-09T23:41:46.620 回答