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

jla*_*310 5 google-cloud-platform kubernetes gke-networking

我们将现有的开发集群从 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 内部网络。所以它只是有网络问题的豆荚。

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

更新:

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

解析度:

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

小智 8

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

从 1.14.x 版本开始,默认情况下不再在集群上添加此规则。这意味着当伪装规则被删除时,尝试到达任何端点的 pod 将使用它们的 Pod IP 而不是节点 IP。

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