我正在尝试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 并看到应用程序,即一切正常。
但是,当我执行以下操作时:
使用 gcloud 网络界面创建静态 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
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>。
我究竟做错了什么?
你提供的命令对我有用。在第一次尝试公开该服务时,我使用了在创建负载均衡器的不同区域中定义的静态 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。这可能会有所启发。
| 归档时间: |
|
| 查看次数: |
4445 次 |
| 最近记录: |