我有两个(独立的)Kubernetes集群,一个设置为GKE / GCE集群,另一个设置在使用kube-up.sh
脚本创建的AWS环境中。两个集群都正常工作,我可以启动/停止pod,服务以及其他所有内容。
我希望位于这些群集中的pod可以相互通信,但不要将它们作为服务公开。为了实现这一点,我在两个集群之间建立了VPN连接,还有一些路由/防火墙规则,以确保VM / pod可以互相看到。
我可以确认以下方案正常运行:
GCE中的VM - > AWS中的VM(确定)
GCE中的Pod - > AWS中的VM(确定)
AWS中的VM - > GCE中的VM(确定)
AWS中的VM - > Pod在GCE(OK)
AWS中的Pod - > Pod在GCE(OK)
但是,我无法让GCE中的VM或Pod与AWS中的Pod进行通信。
我想知道是否有以任何方式使用当前的AWS VPC功能。似乎当VPN隧道的AWS端接收到发往Pod的数据包时,它并不真正知道如何处理它们。另一方面,GCE网络自动配置有将pod IP与GKE集群相关联的路由。在这种情况下,当发往Pod的数据包到达VPN隧道的GCE端时,它会被正确地转发到其目的地。
这是我的配置:
gKE / GCE in us-east1
网络:10.142.0.0/20
VM1 IP :10.142.0.2
Pod范围(适用于VM1):10.52.4.0/24
Pod1 IP :10.52.4.4
(运行busybox)
防火墙规则:允许来自172.16.0.0/12
路由:将目的地172.16.0.0/12
的所有内容发送到VPN隧道(在创建VPN时自动添加)
AWS在ap-northeast-1
VPC :172.24.0.0/16
Subnet1 :172.24.1.0/24
VM3 IP(在Subnet1中):172.24.1.5
Kubernetes群集网络(NON_MASQUERADE_CIDR
):172.16.0.0/16
Pod范围(CLUSTER_IP_RANGE
):172.16.128.0/17
Pod范围(适用于VM3):172.16.129.0/24
Pod3 IP :172.16.129.5
安全组:允许来自10.0.0.0/8的任何流量
路线:
10.0.0.0/8
172.16.129.0/24
到VM3 有没有人试图做类似的事情?有没有办法配置AWS VPC VPN网关以确保发往Pod的数据包被正确发送到托管它们的VM?有什么建议吗?
答案 0 :(得分:2)
你在kubernetes federation中提出的问题。
联合可以轻松管理多个群集。它是这样做的 提供2个主要构建块:
跨群集同步资源:联合提供了使多个群集中的资源保持同步的功能。这可以用于 例如,确保多个中存在相同的部署 簇。
跨群集发现:它提供了使用来自所有群集的后端自动配置DNS服务器和负载均衡器的功能。这个 例如,可用于确保全局VIP或DNS记录 可用于访问多个集群的后端。