Die statische IP mit "kubectl expose" in der Google Container Engine bleibt für immer im Status <pending>

7

Ich versuche, eine "Bereitstellung" von kubernetes über den kubectl exposeBefehl mit einer statischen IP-Adresse in Google Container Engine verfügbar zu machen .

Mit einer kurzlebigen IP funktioniert alles einwandfrei:

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

Ich benutze kubectl get servicesund warte einige Minuten, um zu sehen, dass die kurzlebige IP zugewiesen wurde. Ich gebe die IP in meinen Browser ein und sehe die Anwendung, dh alles funktioniert.

Wenn ich jedoch Folgendes mache:

  1. Erstellen Sie eine statische IP-Adresse über die gcloud-Weboberfläche (Netzwerk -> Externe IP-Adressen -> Statische IP-Adresse reservieren).

  2. Erstellen Sie den Dienst mit demselben Befehl wie oben neu, jedoch mit der zusätzlichen --load-balancer-ipOption

    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
    

Der Befehl ist erfolgreich, aber die Anwendung ist unter dieser IP-Adresse nicht erreichbar, und wenn ich den folgenden Befehl verwende:

$ 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

Ich sehe, dass das EXTERNAL-IPnoch ist, <pending>obwohl ich bisher 23 Minuten gewartet habe.

Was mache ich falsch?

Adrian Smith
quelle

Antworten:

5

Der Befehl, den Sie gegeben haben, hat für mich funktioniert. Bei einem ersten Versuch, den Dienst verfügbar zu machen, habe ich eine statische IP-Adresse verwendet, die in einer anderen Region definiert ist, in der der Load Balancer erstellt wurde. Infolgedessen wurde der Load Balancer nicht erstellt und der Dienst in einem "ausstehenden" Zustand gehalten.

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

Dann habe ich eine IP verwendet, die in us-central definiert ist, wo meine Knoten leben.

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

Dann:

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

Ich würde vorschlagen, sicherzustellen, dass die IP in derselben Region existiert, in der der Cluster lebt. Wenn dies fehlschlägt, erhalten Sie mithilfe von weitere Informationen zum Status kubectl get events. Das könnte etwas Licht ins Dunkel bringen.

Carlos
quelle