我们将现有的开发集群从 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 存在网络问题。
对集群中公开服务的访问仍然按预期进行。健康检查没问题。
UPDATE:
我使用最新的 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 范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)