Google Container Engine 上带有“kubectl Exposure”的静态 IP 永远处于 <pending> 状态

Adr*_*ith 8 kubernetes gcloud

我正在尝试kubectl expose在 Google Container Engine 上通过带有静态 IP 地址的命令公开 kubernetes“部署” 。

使用临时 IP,一切正常:

kubectl expose deployment my-application \
    --type="LoadBalancer" --port=80 --target-port=8080
Run Code Online (Sandbox Code Playgroud)

我使用kubectl get services并等待几分钟以查看已分配的临时 IP。我在浏览器中输入 IP 并看到应用程序,即一切正常。

但是,当我执行以下操作时:

  1. 使用 gcloud 网络界面创建静态 IP 地址(网络 -> 外部 IP 地址 -> 保留静态 IP 地址)

  2. 使用与上述相同的命令重新创建服务,但使用额外的--load-balancer-ip选项

    kubectl expose deployment my-application \
        --type="LoadBalancer" --port=80 --target-port=8080 \
        --load-balancer-ip='1.2.3.4'   # IP as assigned by web interface above
    
    Run Code Online (Sandbox Code Playgroud)

命令成功,但在该 IP 地址下无法访问应用程序,当我使用以下命令时:

$ kubectl get services
NAME         CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
endpoints    10.119.247.39   <pending>     80/TCP    23m
kubernetes   10.119.240.1    <none>        443/TCP   1d
Run Code Online (Sandbox Code Playgroud)

尽管到目前为止我已经等了 23 分钟,但我看到它EXTERNAL-IP仍然存在<pending>

我究竟做错了什么?

Car*_*los 6

你提供的命令对我有用。在第一次尝试公开该服务时,我使用了在创建负载均衡器的不同区域中定义的静态 IP 地址。因此,未创建负载均衡器并且服务保持在“待处理”状态。

$ kubectl get services | grep node3
hello-node3   10.3.242.65    <pending>      80/TCP     1m
$kubectl get events  
48s        2m          5         hello-node3   Service               Normal    CreatingLoadBalancer         {service-controller }   Creating load balancer
47s        2m          5         hello-node3   Service               Warning   CreatingLoadBalancerFailed   {service-controller }   Error creating load balancer (will retry): Failed to create load balancer for service default/hello-node3: requested ip W.X.Y.Z is neither static nor assigned to LB a059cdb738ef911e6a83642010af001b(default/hello-node3): <nil>
Run Code Online (Sandbox Code Playgroud)

然后我使用了在我的节点所在的 us-central 中定义的 IP。

kubectl expose deployment hello-node3 --type="LoadBalancer" --target-port=8080 --load-balancer-ip='A.B.C.D'
Run Code Online (Sandbox Code Playgroud)

然后:

$ kubectl get services | grep node3
hello-node3   10.3.241.0     A.B.C.D   80/TCP     20m
$ curl A.B.C.D
Hello World!
Run Code Online (Sandbox Code Playgroud)

我建议确保 IP 存在于集群所在的同一区域。如果失败,请使用 获取有关状态的更多信息kubectl get events。这可能会有所启发。