【问题标题】:Can my VM directly access "services" in the google container engine?我的虚拟机可以直接访问谷歌容器引擎中的“服务”吗?
【发布时间】:2015-03-12 00:37:17
【问题描述】:

我正在使用 Google Cloud 和 Container Engine,但我无法让我的 VM 访问我的 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”。

【问题讨论】:

    标签: google-kubernetes-engine


    【解决方案1】:

    试试:

    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>

    (替换为您的集群名称,以及集群所在的区域)

    • 在网络 CIDR 范围内(默认网络为 10.240.0.0/16)为 GCE 虚拟机提供专用 IP。

    • 在集群的容器 CIDR 范围(在您的情况下为 10.128.0.0/14)中,GKE pod 被赋予私有 IP。

    • GKE 服务在集群服务 CIDR 范围内(在您的情况下为 10.131.240.0/20)分配了私有 IP。

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

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

    注意:我还没有真正尝试过,所以请告诉我它是否有效! :)

    【讨论】:

    • 效果很好!为我所有的集群节点添加了它,它们似乎在说话:)。
    • 我觉得我说得太快了。我现在尝试将 docker-registry 作为服务公开,当我从 Jenkins 推送时,我经常出现超时。我无法毫无错误地推送完整图像。不知道如何调试。从 10.240.0.0/16 内推送似乎工作正常。
    • 嗯。我对从 Jenkins 推送一无所知,但我猜它不喜欢注册表从不同的 IP 响应而不是它发送到的 IP。
    • 一种解决方案可能是在 Jenkins VM 上运行 kubernetes 服务代理。在我刚刚启动的节点上,kube-proxy 以“/usr/local/bin/kube-proxy -master=10.240.104.13:70 80 -v=2”启动,因此您可以尝试类似的操作(用您的主IP)。
    • 过时了,但我还是忘了回答。代理方法运行良好。
    猜你喜欢
    • 2020-07-02
    • 2018-01-19
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多