O IP estático com “kubectl expor” no Google Container Engine permanece em estado pendente para sempre

8

Estou tentando expor uma "implantação" de kubernetes por meio do comando kubectl expose , com um endereço IP estático, no Google Container Engine.

Com um IP efêmero, tudo funciona bem:

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

Eu uso kubectl get services e aguardo alguns minutos para ver o IP efêmero sendo atribuído. Eu entro no IP no meu navegador e vejo o aplicativo, ou seja, tudo funciona.

No entanto, quando faço o seguinte:

  1. Crie um endereço IP estático usando a interface da web do gcloud (Rede - > Endereços IP externos - > Reservar endereço IP estático)

  2. Recrie o serviço com o mesmo comando acima, mas com a opção --load-balancer-ip extra

    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
    

O comando é bem-sucedido, mas o aplicativo não pode ser acessado sob esse endereço IP e quando eu uso o seguinte comando:

$ 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

Vejo que o EXTERNAL-IP ainda é <pending> , embora eu tenha esperado 23 minutos até agora.

O que estou fazendo de errado?

    
por Adrian Smith 07.10.2016 / 12:32

1 resposta

5

O comando que você forneceu funcionou para mim. Em uma primeira tentativa de expor o serviço, usei um endereço IP estático definido em uma região diferente de onde o Load Balancer estava sendo criado. Como resultado, o Balanceador de Carga não foi criado e o serviço mantido em um estado "Pendente".

$ 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>

Então eu usei um IP definido em us-central onde meus nodos vivem.

kubectl expose deployment hello-node3 --type="LoadBalancer" --target-port=8080 --load-balancer-ip='A.B.C.D'

Então:

$ 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!

Sugiro que verifique se o IP existe na mesma região em que o cluster reside. Se isso falhar, para obter mais informações sobre o estado usando kubectl get events . Isso pode lançar alguma luz.

    
por 10.10.2016 / 17:06