如何在Google Kubernetes Engine中选择Kubernetes负载均衡器的外部IP地址


16

我正在使用Google Kubernetes Engine部署网络应用,并且希望通过负载均衡器访问它,而该负载是我作为Google Cloud Platform中同一项目的一部分而控制的现有静态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,但是我找不到任何将其配置为使用所需IP的方法。该服务的文件提到了spec.clusterIP设置,但这似乎并没有涉及到的外部IP。同样,一旦设置了负载平衡器,该服务的status.loadBalancer.ingress.ip字段便被设置为其外部IP地址,但这似乎不是可配置的设置。

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

有什么办法可以做-在选定的静态IP地址上在Google Kubernetes引擎上公开Kubernetes pod(或复制控制器)?

Answers:


9

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

Kubernetes v1.1支持externalIP

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

到目前为止,还没有一个非常好的一致性文档来说明如何在GCE上使用它。可以确定的是,此IP首先必须是您预先分配的静态 IP之一。

跨区域负载均衡文档主要是为计算引擎,而不是Kubernetes /集装箱引擎,但它仍然是有用的,尤其在部分“配置负载平衡服务”。

如果仅在GCE上创建Kubernetes LoadBalancer,它将创建一个网络Compute Engine>网络>网络负载平衡>转发规则,该规则指向群集中由您的计算机组成的目标池(通常只有那些运行与服务选择器匹配的Pod的计算机) 。看起来删除名称空间并不能很好地清理那些创建的规则。


更新资料

现在实际上已支持它(即使没有记录):

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

现在,如果您删除LoadBalancer甚至命名空间,则在重新部署该群集时,它应该保留该IP地址。如果您需要更改集群,则应该可以进行一些手动调整:

  1. “网络负载平衡”部分的“目标池”选项卡下,单击“创建目标池”按钮:
    • 名称:(cluster-pool或任何其他名称)
    • 区域:选择集群之一的区域
    • 健康检查:可选,如果您愿意
    • 选择现有的实例组:您的Kubernetes集群
  2. “网络负载平衡”部分的“转发规则”选项卡下,单击“创建转发规则”按钮:
    • 名称:(http-cross-region-gfr或任何其他名称)
    • 区域:选择集群之一的区域
    • 外部IP:选择loadbalancer-ip-crossregion您刚刚保留的
    • 目标池:选择cluster-pool刚创建的

这些仍然相关吗?
2016年

8

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


以前:

这是一个贯穿裂缝的功能。它本来可以工作(甚至可能在某个时候工作了),但是没有经过充分的测试,并在沿途被破坏了,然后(临时地)被意外地设计了出来。

我的候选清单在1.0之后。

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


这可能应该是评论,而不是答案。
沃德-恢复莫妮卡

5
@Ward:开发人员说“不可能” 一个答案,恕我直言,它被这样接受。
斯文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.