Я пытаюсь раскрыть "развертывание" кубернетов через kubectl expose
команда со статическим IP-адресом в Google Container Engine.
С эфемерным IP все работает нормально:
kubectl expose deployment my-application \
--type="LoadBalancer" --port=80 --target-port=8080
я использую kubectl get services
и подождите несколько минут, чтобы увидеть назначенный эфемерный IP-адрес. Я ввожу IP в браузере и вижу приложение, т.е. все работает.
Однако когда я делаю следующее:
Создайте статический IP-адрес с помощью веб-интерфейса gcloud (Сеть -> Внешние 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
Я вижу что EXTERNAL-IP
все еще <pending>
хотя я ждал пока 23 минуты.
Что я делаю не так?
Предоставленная вами команда сработала для меня. В первой попытке предоставить службу я использовал статический 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>
Затем я использовал 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
. Это могло бы пролить свет.