我们有一个在 GKE 上运行的 Kubernetes 集群,使用为此创建的自己的 VPC,子网为
10.184.0.0/20
。该集群的工作负载已被分配用于公共访问的外部负载均衡器,以及用于内部通信的内部集群 IP。服务的子网是 10.0.0.0/20
。
同一 VPC 上有一个 google cloud Classic VPN 设置,以便能够访问专用网络。
我们有另一个本地托管系统,该系统使用隧道通过上述 VPN 进行连接。本地网络可以通过子网上的私有 IP 来 ping VPC 中的节点
10.184.0.0/20
,但也可以 ping/telnet 到子网上的集群 IP 10.0.0.0/20
。
这可以实现吗?
这确实是可能的,因为您的隧道已经启动并且您可以 ping 您的节点,我的猜测是您无法从本地应用程序到达 Pod 和服务范围,这意味着您仅通告主 10.184.0.0 /20 CIDR 但不是辅助节点,对吗?
您可以轻松检查,通过运行连接测试,它将模拟源-目标之间的流量(在这种情况下,源是来自本地网络的 IP,目标应该是您的服务 IP),同时考虑多种产品(防火墙规则、VPC 对等互连、路由、VPN 隧道等),并让您知道您的环境中是否存在错误/缺失。
如果您的 VPN 配置中缺少这些范围,则需要重新创建它,并确保在流量选择器中添加辅助范围(或使用较宽的 0.0.0.0/0 CIDR)。
最后,请记住,您需要使用 services(集群 IP、NodePort、负载均衡器)公开您的应用程序,并从本地网络再次测试。
我遇到了同样的问题:似乎 clusterIP 无法通过 VPN 访问,而我可以访问 pod 和节点(pod 位于辅助范围内,就像集群 IP 一样,全部位于 VPN 中包含的同一超范围内)
使用私有注释从 clusterIP 迁移到 LoadBalancer 就成功了。 该服务获得 VPC 主要范围内的 IP,并且可从 VPN 访问