创建 GCE 负载均衡器时出错:请求的地址 ip 既不是静态的,也没有分配给 LB

创建 GCE 负载均衡器时出错:请求的地址 ip 既不是静态的,也没有分配给 LB

我遇到过这样的情况:Kubernetes 显然无法再为服务分配外部 IP 地址kubectl create -f Deployment.yamlkubectl describe service <my-service>报告如下错误

CreatingLoadBalancerFailed    
Error creating load balancer (will retry): Failed to create load balancer 
for service default/<my-service>: requested ip <my-address> is 
neither static nor assigned to LB <id>(default/<my-service>): <nil>

gcloud compute addresses list表明这my-address是一个静态 IP 地址:

NAME          REGION        ADDRESS       STATUS
<my-address>  europe-west1  <ip-address>  RESERVED

并包含分配给负载均衡器Deployment.yaml的规范:<my-service><my-address>

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: my-app
ports:
  - protocol: UDP
    port: <my-port>
type: LoadBalancer
loadBalancerIP: <my-address>

特别奇怪的是:(几乎)相同的部署以前也成功过。我已经尝试过重新创建我的集群,但这也无济于事。还有什么可能出错,我该如何克服错误,使我的服务再次可从外部访问?

更新我已经保留了一个新的静态(这次也是全局)IP 地址,gcloud compute addresses create test-address --global并相应地更改了对 LB 的分配:loadBalancerIP: test-address。但同样的错误仍然存​​在。

更新如果我没有loadBalancerIP在 中指定Deployment.yaml,则部署成功且不会出现错误,并且会为 分配一个新的外部 IP 地址my-service。可以从外部通过此地址 ping 通该服务。

更新如果我使用 删除我以前的地址gcloud compute addresses delete my-address --region europe-west1,使用 提升新的外部地址gcloud compute addresses create --addresses <ip-address> --region europe-west1,然后使用loadBalancerIP: my-address恢复的原始线路重新部署Deployment.yaml,则相同的错误会再次出现。

答案1

我遇到了类似的问题。事实证明,如果 IP 地址保留为全局,则它将不起作用。我删除了我的保留,并将其更改为与我的 kubernetes 集群相同的区域。 --global 我必须使用--region europe-west2- 与我的 k8s 集群相同的区域。

之前:失败 gcloud compute addresses create my-secure-sftp --global

之后:成功 gcloud compute addresses create my-secure-sftp --region europe-west2

@看https://github.com/kubernetes/kubernetes/issues/22721更多细节

答案2

问题在于Deployment.yaml我引用的地址loadBalancerIp是符号名称,而不是数字 IP 地址(分别显示为和NAME)。如果我改用数字 IP 地址,负载平衡器就会启动,我的服务可以通过此地址(通过负载平衡器)从外部访问。(ADDRESSgcloud compute addresses list之前的回答让我走上了正确的道路。我可能错误地认为使用符号名称以前是有效的。)

背景因为我交换切换到自己的 VM 实例(而不是 Google Cloud shell)来开发容器映像,我收到了"Insufficient Permission"来自该 VM 实例的错误gcloud compute addressess list。我明白我可以通过以下方式改进此问题重新创建具有范围的 VM 实例 https://www.googleapis.com/auth/compute.readonly不管怎样,这个限制显然和当前的问题无关。

答案3

你应该创造区域地址:

gcloud 计算地址创建 my-secure-sftp --region europe-west2

它为入口控制器分配全局 IP(状态 IN_USE),这正是您所需要的。

在您的情况下,全局静态和内部静态将不起作用。

答案4

你应该创建一个区域地址相同地区项目在 GCP 上

我遇到一个问题,因为我在配置 LoadBalancer 的另一个项目上创建了一个 IP。

相关内容