如何在Google容器引擎中selectKubernetes负载均衡器的外部IP地址

我正在部署使用Google Container Engine的networking应用程序,并且希望通过负载均衡器访问我作为Google云平台中同一项目的一部分而控制的现有静态IP地址,因为我要使用的域名已经指向这个IP。

我用于该窗格的yaml文件是:

apiVersion: v1 kind: Pod metadata: name: my-pod labels: app: my-app spec: containers: - name: my-container image: gcr.io/my-project/my-app:latest 

我可以使用以下方法设置负载平衡器:

 apiVersion: v1 kind: Service metadata: name: my-load-balancer spec: ports: - port: 80 targetPort: 80 selector: app: my-app type: LoadBalancer 

这提供了一个应用程序可访问的外部IP,但我找不到任何方式来configuration它使用我想要的IP。 服务文档提到了spec.clusterIP设置,但是这似乎与外部IP无关。 同样,一旦设置了负载平衡器,服务的status.loadBalancer.ingress.ip字段就被设置为其外部IP地址,但这似乎不是一个可configuration的设置。

另外,我尝试在Google Compute Engine控制台中手动创build转发规则,以将stream量从我的静态IP地址引导至由Kubernetes设置的目标池,但是当我尝试连接连接时被拒绝。

有什么办法做我想做的 – 在Google Container引擎上公开一个Kubernetes Pod(或复制控制器)在一个选定的静态IP地址?

    TL; DR运行Kubernetes v1.1的 Google Container Engine支持loadBalancerIP只是将自动分配的IP标记为静态优先。

    Kubernetes v1.1支持外部 IP:

     apiVersion: v1 kind: Service spec: type: LoadBalancer loadBalancerIP: 10.10.10.10 ... 

    到目前为止,关于如何在GCE上使用它,还没有一个非常好的一致文档。 可以肯定的是,这个IP必须首先是你预先分配的静态 IP之一。

    跨区域负载平衡文档主要针对计算引擎而不是Kubernetes / Container引擎,但是它仍然非常有用,特别是“configuration负载均衡服务”部分。

    如果您只是在GCE上创build一个Kubernetes LoadBalancer,它将创build一个networking计算引擎>networking>networking负载平衡>转发规则,指向您的群集中由您的计算机组成的目标池(通常只有那些运行与服务select器匹配的数据包) 。 看起来删除名称空间并不能很好地清理那些创build的规则。


    更新

    它现在实际上已经被支持了(尽pipe在文档中):

    1. 检查您是否正在运行Kubernetes 1.1或更高版本(在GKE下编辑您的群集并检查“节点版本”)
    2. 在“ networking连接”>“外部IP地址”下,您应该已经将一些Ephemeral标记为指向您的群集的VM实例(如果不是或不确定,请在没有loadBalancerIP情况下部署一次,等到您运行kubectl get svc时分配一个外部IP kubectl get svc ,该页面列表中的IP)。 将其中一个标记为静态 ,假设它的外部地址10.10.10.10
    3. 编辑您的LoadBalancer,使其具有loadBalancerIP=10.10.10.10 (适应Google提供给您的IP)。

    现在,如果您删除了LoadBalancer甚至是您的名称空间,则应该在该群集上重新部署时保留该IP地址。 如果您需要更改群集,应该可以进行一些手动操作:

    1. 在“networking负载平衡”部分的“目标池”选项卡中 ,单击“创build目标池”button:
      • 名称: cluster-pool (或任何其他名称)
      • 地区:select您的其中一个群集的地区
      • 健康检查:可选,如果你愿意
      • select现有的实例组:您的Kubernetes集群
    2. 在“networking负载均衡”部分的“转发规则”选项卡中 ,单击“创build转发规则”button:
      • 名称: http-cross-region-gfr (或任何其他名称)
      • 地区:select您的其中一个群集的地区
      • 外部IP:select您刚保留的loadbalancer-ip-crossregion
      • 目标池:select刚刚创build的cluster-pool

    好消息。 这将在Kubernetes v1.1中修复。 您可以将service.spec.loadBalancerIP字段设置为您知道您拥有的IP。


    以前:

    这是一个穿过裂缝的特征。 它本该工作(甚至有可能在某个时候工作),但没有得到很好的testing,一路上被打破,然后意外的devise(暂时)。

    这是我在1.0之后修复的事情。

    https://github.com/GoogleCloudPlatform/kubernetes/issues/10323