如何为Kubernetes负载均衡器指定静态IP地址?

Mar*_*ina 25 load-balancing google-compute-engine kubernetes

我有一个在Google Compute Engine上运行的Kubernetes集群,我想为我的外部服务(type: LoadBalancer)分配静态IP地址.我不确定此刻是否可行.我在该主题上找到了以下来源:

  • Kubernetes服务文档允许您定义外部IP地址,但它失败,无法将对象解组为类型为[] v1的Go值.LoadBalancerIngress
  • publicIPs场似乎让我指定IP地址外,但它似乎没有任何工作
  • 这个Github问题表明我正在尝试做的事情尚不支持,但将在Kubernetes v1.1中
  • clusterIP场也让我指定一个IP地址,但失败" 提供的IP不在有效范围 "

我觉得在设置Web服务时使用静态IP非常重要.我在这里错过了什么吗?如果有人能在这里开导我,我将非常感激!

编辑:澄清:我没有使用Container Engine,我自己使用Compute Engine的官方安装说明设置了一个集群.与我的k8s服务相关联的所有IP地址都标记为"临时",这意味着重新创建kubernetes服务可能会导致不同的外部IP地址(这就是我需要它们为静态的原因).

Wer*_*ght 45

TL; DR运行Kubernetes v1.1的 Google容器引擎只支持loadBalancerIP将自动分配的IP标记为静态.

Kubernetes v1.1支持externalIPs:

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...
Run Code Online (Sandbox Code Playgroud)

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

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

如果你只是在GCE创建Kubernetes负载平衡器,它会创建一个网络计算引擎>网络>网络负载均衡>转发规则指向您的集群上了你的机器的目标池(通常只有那些运行服务选择相匹配的荚) .看起来删除命名空间并不能很好地清理那些创建的规则.


更新

实际上现在支持它(即使记录在案):

  1. 检查您是否正在运行Kubernetes 1.1或更高版本(在GKE下编辑您的群集并检查"节点版本")
  2. Networking> External IP addresses下分配静态IP :
    • 部署一次loadBalancerIP,等到运行时分配外部IP kubectl get svc,然后在该页面的列表中查找该IP,并将其从Ephemeral更改为Static.
    • 单击群集区域中的"保留静态地址"区域,附加到"无".
  3. 编辑您的LoadBalancer以具有loadBalancerIP=10.10.10.10上述功能(适应Google提供给您的IP).

现在,如果您删除负载平衡器,甚至你的命名空间,它会保留这一组在重新reploying该IP地址.


更新2016-11-14

另请参阅Kubernetes文章,其中介绍了如何在Kubernetes上为单个或多个域设置静态IP.


Tim*_*kin 13

Kubernetes v1.1将进行一些更改.

首先,GCE中的所有负载均衡器都将获得静态IP.这允许我们模拟GCE不支持的"更新"操作.

其次,https://github.com/kubernetes/kubernetes/pull/13005提出了一个新字段来明确设置负载均衡器的IP.

请注意,只要您的服务存在,您的"短暂"IP就属于您.这大致类似于AWS对ELB名称的作用(随机分配,直到您发布它).

publicIPs(或v1中的deprecatedPublicIPs)将被替换为具有非常相似语义的externalIPs.这些是"非托管"IP - kubernetes不会使用它们建立负载均衡器,但它会接受它们的流量.

clusterIP是群集内地址,通常在群集或"项目"或VPC之外(在GCE或AWS术语中)不可用

  • 好吧,我的公共端点指向该IP地址的DNS条目,所以我想确保它不会改变,以防我必须更改k8s服务对象!我真的认为这是一个常见的用例吗?:) (2认同)