GKE 集群升级到 1.14.6 后,VPN 无法访问内部网络

VPN access to in-house network not working after GKE cluster upgrade to 1.14.6

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

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

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

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

更新:

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

决议:

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

直到 GKE 1.13.x,即使没有必要,GKE 也会伪装 pods 尝试访问外部 IP,即使在集群的同一 VPC 上,除非目的地在 10.0 上.0.0/8 范围。

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

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