3

我正在使用谷歌云和容器引擎,但我无法让我的虚拟机访问我的 kubernetes“服务”

我的场景:我在计算引擎中部署了一个 Jenkins VM(一切都是默认网络)。然后我部署了一个 Container Engine 集群并启动了一个 docker 注册表(带有一个 pod 文件)并在 pod 前面使用了一个“服务”。我可以从所有集群主机和主服务器很好地访问 docker 注册表。我还尝试创建一个外部负载均衡器,以便 docker 注册表是公共的。一切正常。

但是,我不希望注册表公开。我只希望我的 Jenkins VM 能够访问容器集群中的 docker 注册表“服务”。但它不起作用。看起来他们在不同的子网上。Jenkins 的 IP 为 10.240.126.57,Container 集群中的 docker-registry-service 的 IP 为 10.131.249.127。

实现这一目标的最佳方法是什么?我玩过“Routes”,但由于某种原因,我无法让它发挥作用。旁注:所有虚拟机都可以 ping 所有容器,反之亦然,但我无法访问“容器引擎服务 IP”。

4

1 回答 1

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 范围(在您的情况下为 10.128.0.0/14)中被赋予私有 IP。

  • GKE 服务在集群服务 CIDR 范围(在您的情况下为 10.131.240.0/20)中被赋予私有 IP。

GKE 创建 GCE 路由以获取正确 pod 的流量,但不添加任何内容以从集群外部公开服务。

上面的 GCE 路由会将默认网络上到 10.131.240.0/20 的任何流量转发到集群的节点 1。在那里运行的服务代理将负责将流量传输到实现该服务的 pod。如果您愿意,您甚至可以为每个 gke 节点添加一条路由,以平衡每个服务代理之间的流量。

注意:我实际上还没有尝试过,所以让我知道它是否有效!:)

于 2015-01-13T23:57:31.773 回答