Назад | Перейти на главную страницу

Static IP with “kubectl expose” on Google Container Engine stays in <pending> состояние навсегда</pending>

Я пытаюсь раскрыть "развертывание" кубернетов через kubectl expose команда со статическим IP-адресом в Google Container Engine.

С эфемерным IP все работает нормально:

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

я использую kubectl get services и подождите несколько минут, чтобы увидеть назначенный эфемерный IP-адрес. Я ввожу IP в браузере и вижу приложение, т.е. все работает.

Однако когда я делаю следующее:

  1. Создайте статический IP-адрес с помощью веб-интерфейса gcloud (Сеть -> Внешние 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

Я вижу что 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. Это могло бы пролить свет.