我试图通过在Google Container Engine上使用静态IP地址的kubectl expose命令公开kubernetes“deployment”。
随着短暂的IP,一切工作正常:
kubectl expose deployment my-application \ --type="LoadBalancer" --port=80 --target-port=8080
我使用kubectl get services然后等待几分钟以查看已分配的临时IP。 我在浏览器中inputIP,然后看到应用程序,即一切正常。
但是,当我做到以下几点:
使用gcloud Web界面创build静态IP地址(networking – >外部IP地址 – >保留静态IP地址)
使用与上面相同的命令重新创build服务,但使用额外的--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> 。
我究竟做错了什么?
你提供的命令为我工作。 在第一次尝试公开服务时,我使用了一个静态IP地址,这个IP地址是在创buildLoad Balancer的不同区域定义的。 结果,负载均衡器没有被创build,服务处于“挂起”状态。
$ 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 WXYZ is neither static nor assigned to LB a059cdb738ef911e6a83642010af001b(default/hello-node3): <nil>
然后,我使用了一个在我们的节点所在的中心定义的IP。
kubectl expose deployment hello-node3 --type="LoadBalancer--target-port=8080 --load-balancer-ip='ABCD'
然后:
$ kubectl get services | grep node3 hello-node3 10.3.241.0 ABCD 80/TCP 20m $ curl ABCD Hello World!
我build议确保IP存在于群集所在的同一区域。 如果通过使用kubectl get events获取更多有关状态的信息。 这可能会有一些亮点。