我在Google Compute Engine上运行了Kubernetes群集,我想为外部服务(type: LoadBalancer
)分配静态IP地址。我不确定目前是否可能这样做。我在该主题上找到了以下来源:
我觉得在设置Web服务时使用静态IP非常重要。我在这里错过了什么吗?如果有人能在这里启发我,我将非常感激!
编辑:澄清:我没有使用Container Engine,我自己使用Compute Engine的官方安装说明设置了一个集群。与我的k8s服务相关联的所有IP地址都标记为"短暂的",这意味着重新创建kubernetes服务可能会导致不同的外部IP地址(这就是我需要它们为静态的原因)。
答案 0 :(得分:42)
TL; DR Google容器引擎运行Kubernetes v1.1 支持loadBalancerIP
只需将自动分配的IP标记为静态第一
Kubernetes v1.1支持externalIPs:
apiVersion: v1
kind: Service
spec:
type: LoadBalancer
loadBalancerIP: 10.10.10.10
...
到目前为止,还没有关于如何在GCE上使用它的非常好的一致文档。可以肯定的是,此IP必须首先是您预先分配的静态 IP之一。
cross-region load balancing文档主要用于计算引擎而不是Kubernetes / Container Engine,但它仍然特别适用于“配置负载平衡服务”部分。
如果您只是在GCE上创建Kubernetes LoadBalancer,它将创建一个网络计算引擎&gt;网络&gt; <网络负载平衡>转发规则指向由群集上的计算机组成的目标池(通常只有运行与服务选择器匹配的Pod的目标池)。看起来删除命名空间并不能很好地清理那些创建的规则。
实际上现在支持它(即使记录在案):
loadBalancerIP
的情况下部署一次,等到运行kubectl get svc
时分配了外部IP,然后在该页面的列表中查找该IP并从 Ephemeral <更改< / em>到静态。loadBalancerIP=10.10.10.10
(适应Google为您提供的IP)。现在,如果删除LoadBalancer甚至是命名空间,它将在该群集上重新部署时保留该IP地址。
另请参阅Kubernetes article,了解如何在Kubernetes上为单个或多个域设置静态IP。
答案 1 :(得分:13)
Kubernetes v1.1将进行一些更改。
首先,GCE中的所有负载均衡器都将获得静态IP。这允许我们模拟&#34;更新&#34; GCE不支持的操作。
其次,https://github.com/kubernetes/kubernetes/pull/13005提出了一个新字段来明确设置负载均衡器的IP。
注意你的短暂&#34;只要您的服务存在,IP就属于您。这大致类似于AWS对ELB名称的作用(随机分配,直到您发布它为止)。
publicIPs(或v1中的deprecatedPublicIPs)将被替换为具有非常相似语义的externalIP。这些是“不受管理的”#34; IP - kubernetes不会使用它们建立负载均衡器,但它会接受它们的流量。
clusterIP是群集内地址,通常在群集外部不可用,或者&#34;项目&#34;或VPC(以GCE或AWS术语表示)
答案 2 :(得分:1)
如果您使用的是Google容器引擎,并且正在使用type: LoadBalancer
,那么Google云端平台应该为您创建一个网络负载均衡器,其中包含将路由到此服务的静态IP地址。您不需要指定任何IP地址。
要查找网络负载均衡器的IP,请运行:
gcloud compute forwarding-rules list --project "YOUR-PROJECT-ID"
您还应该能够运行:
kubectl get services
这将返回您的服务的群集和外部IP和端口。
答案 3 :(得分:0)
在我这边,我确认 loadBalancerIP
字段允许使用 Kubernetes 1.18.2 为 GKE LoadBalancer 指定静态 IP 地址:
apiVersion: v1
kind: Service
spec:
...
type: LoadBalancer
loadBalancerIP: 10.136.0.49
此外,以下命令返回给定项目的负载均衡器 IP:
gcloud compute forwarding-rules list --project <PROJECT_IS>
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET
aaba14cac607a4413813bebfb7eaaf8a us-central1 10.136.0.49 TCP us-central1/backendServices/aaba14cac607a4413813bebfb7eaaf8a
该命令证明它工作正常:
kubectl get service <svc-name>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
<svc-name> LoadBalancer 10.136.27.201 10.136.0.49 4040:30754/TCP 57s