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,然后看到应用程序,即一切正常。
但是,当我执行以下操作时:
使用 gcloud Web 界面创建静态 IP 地址(网络 -> 外部 IP 地址 -> 保留静态 IP 地址)
使用与上述相同的命令重新创建服务,但使用额外的
--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
。这可能会提供一些线索。