我们将现有的开发集群从 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,所有 pod 再次在 1.13 池上运行。 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 也会伪装尝试访问外部 IP 的 pod,即使在集群的同一 VPC 上,除非目标位于 10.0.0.0/8 范围内。
从 1.14.x 版本开始,默认情况下不再在集群上添加此规则。这意味着当伪装规则被删除时,尝试到达任何端点的 pod 将使用它们的 Pod IP 而不是节点 IP。
您可以尝试重新创建 Cloud VPN 以包含 POD IP 范围。
关于kubernetes - GKE 集群升级到 1.14.6 后,VPN 无法访问内部网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58309735/