我正在部署使用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在文档中):
loadBalancerIP情况下部署一次,等到您运行kubectl get svc时分配一个外部IP kubectl get svc ,该页面列表中的IP)。 将其中一个标记为静态 ,假设它的外部地址是10.10.10.10 。 loadBalancerIP=10.10.10.10 (适应Google提供给您的IP)。 现在,如果您删除了LoadBalancer甚至是您的名称空间,则应该在该群集上重新部署时保留该IP地址。 如果您需要更改群集,应该可以进行一些手动操作:
cluster-pool (或任何其他名称) http-cross-region-gfr (或任何其他名称) loadbalancer-ip-crossregion cluster-pool 好消息。 这将在Kubernetes v1.1中修复。 您可以将service.spec.loadBalancerIP字段设置为您知道您拥有的IP。
以前:
这是一个穿过裂缝的特征。 它本该工作(甚至有可能在某个时候工作),但没有得到很好的testing,一路上被打破,然后意外的devise(暂时)。
这是我在1.0之后修复的事情。
https://github.com/GoogleCloudPlatform/kubernetes/issues/10323