我正在使用Google Cloud和Container Engine,但我无法让我的VM访问我的kubernetes“服务”
我的情景: 我在计算引擎中部署了一个Jenkins VM(everthing是默认网络)。然后我部署了一个Container Engine集群,我启动了一个docker注册表(带有一个pod文件)并在pod前面使用了“服务”。我可以很好地从所有集群主机和主机访问docker注册表。我还尝试创建一个外部负载均衡器,以便docker注册表是公共的。一切正常。
但是,我不希望注册表公开。我只是希望我的Jenkins VM能够访问Container集群中的docker注册表“service”。但它不起作用。看起来他们在不同的子网上。 Jenkins具有IP 10.240.126.57,Container集群中的docker-registry-service具有10.131.249.127。
实现这一目标的最佳方法是什么?我玩“路线”,但由于某种原因,我无法让它工作。旁注:所有虚拟机都可以ping所有容器,反之亦然,但我无法访问“容器引擎服务IP”。
答案 0 :(得分:2)
尝试:
gcloud compute routes create svc-fwd-1 --destination-range 10.131.240.0/20 --next-hop-instance k8s-<clusterName>-node-1 --next-hop-instance-zone <zone>
(替换为群集的名称,以及群集所在的区域)
GCE虚拟机在网络CIDR范围内获得私有IP(默认网络为10.240.0.0/16)。
GKE pod在群集的容器CIDR范围内被赋予私有IP(在您的情况下为10.128.0.0/14)。
GKE服务在群集服务CIDR范围内给出了私有IP(在您的情况下为10.131.240.0/20)。
GKE创建GCE路由以获取到正确的pod的流量,但不添加任何内容以从群集外部公开服务。
上面的GCE路由会将默认网络上的任何流量转发到10.131.240.0/20到群集的node-1。在那里运行的服务代理将负责获取实现该服务的pod的流量。如果您愿意,您甚至可以为每个gke节点添加路由,以平衡每个服务代理之间的流量。
注意:我实际上没有试过这个,所以让我知道它是否有效! :)