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

Dru*_*rux 9 google-compute-engine kubernetes google-kubernetes-engine

我有一种情况,Kubernetes 显然无法再为kubectl create -f Deployment.yaml. kubectl 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>
Run Code Online (Sandbox Code Playgroud)

gcloud compute addresses list表示my-address是静态IP地址:

NAME          REGION        ADDRESS       STATUS
<my-address>  europe-west1  <ip-address>  RESERVED
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

特别奇怪的是:(几乎)相同的部署之前已经工作过。我已经尝试重新创建我的集群,但这也没有帮助。还有什么可能是错误的,我怎样才能克服错误,使我的服务再次可以从外部访问?

UPDATE我准备了一个新的静态(此时还全局)的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,同样的错误再次出现。

小智 16

我有一个类似的问题。事实证明,如果 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

@see https://github.com/kubernetes/kubernetes/issues/22721了解更多详情


Dru*_*rux 4

问题在于我用符号名称而不是数字 IP 地址(以及分别显示的)Deployment.yaml来引用地址。如果我使用数字 IP 地址,负载均衡器就会出现,我的服务可以通过该地址从外部访问(通过负载均衡器)。(之前的答案让我走上了正确的道路。我可能有一种错误的印象,认为使用符号名称以前是有效的。)loadBalancerIpNAMEADDRESSgcloud compute addresses list

背景由于我切换到自己的 VM 实例(而不是 Google Cloud shell)来开发容器映像,因此我收到了"Insufficient Permission"来自该 VM 实例的错误gcloud compute addressess list。我知道我可以通过重新创建具有scope的VM实例 https://www.googleapis.com/auth/compute.readonly来改进这一点。无论如何,这个限制显然与当前的问题无关。