Google 容器引擎上使用“kubectl reveal”的静态 IP 保持不变永远的状态

Google 容器引擎上使用“kubectl reveal”的静态 IP 保持不变永远的状态

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

使用临时 IP,一切正常:

kubectl expose deployment my-application \
    --type="LoadBalancer" --port=80 --target-port=8080

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

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

  1. 使用 gcloud Web 界面创建静态 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
    

该命令成功,但在该 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

我看到尽管我已经等了 23 分钟,但EXTERNAL-IP仍然如此。<pending>

我究竟做错了什么?

答案1

您提供的命令对我有用。在第一次尝试公开服务时,我使用了在与创建负载均衡器的区域不同的区域中定义的静态 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>

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

kubectl expose deployment hello-node3 --type="LoadBalancer" --target-port=8080 --load-balancer-ip='A.B.C.D'

然后:

$ 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!

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

相关内容