Ich habe schließlich herausgefunden. Um dies zu tun, bitten Sie GKE, einen externen Load Balancer für Sie einzurichten. Dann ersetzen Sie Teile des Stapels selektiv. Die gute Nachricht ist, dass Sie auf dem Weg auch HTTP-Health-Check einrichten können, was GKE standardmäßig nicht tut.
Stellen Sie sicher, dass Sie über die Google Cloud Platform eine statische IP-Adresse zur Verfügung haben. Sie können in der Konsole anfordern.
Holen Sie da und läuft mit so etwas wie:
kubectl expose rc api-server --name=api-server --port=8080,8081 --create-external-load-balancer=true
(Ich verwende den Port 8080 für HTTP Gesundheitsprüfung und 8081 zu gRPC Anfragen zu dienen).
--create-external-load-balancer=true
aktualisiert die Kubernetes-Dienste mit einer Ingress-Regel, richtet einen Zielpool ein, richtet einen Netzwerklastenausgleich ein und fügt eine Firewallregel hinzu. Wir müssen # 1 und # 3 beheben.
Finde heraus, wo alles schon läuft.
export TARGET_POOL_NAME=$(gcloud compute target-pools list | head -n 2 | tail -n 1 | cut -d " " -f 1)
export EXTERNAL_IP=$(gcloud compute addresses list | head -n 2 | tail -n 1 | cut -d " " -f 3)
Bringen Sie die Gesundheits-Check auf den Zielpool
gcloud compute http-health-checks create api-server-http-basic-check --port 8080 --request-path "/_health"
gcloud compute target-pools add-health-checks ${TARGET_POOL_NAME} --http-health-check api-server-http-basic-check
eine neue Weiterleitungsregel Erstellen Sie die eine, die von GKE
gcloud compute forwarding-rules create api-server \
--region us-central1 --port-range 8080-8081 \
--address ${EXTERNAL_IP} --target-pool ${TARGET_POOL_NAME}
Löschen Sie die ursprüngliche GKE-Weiterleitungsregel
zu ersetzen
gcloud compute forwarding-rules delete $(gcloud compute forwarding-rules list | head -n 2 | tail -n 1 | cut -d " " -f 1)
Aktualisieren Sie den Kubernetes Dienst Eindringen von dem neuen IP zu ermöglichen:
kubectl patch services api-server -p "{\"status\":{\"loadBalancer\":{\"ingress\": [{\"ip\": \"${EXTERNAL_IP}\"} ]}}}"
Das sollte es tun!
für mich, meine Köpfe und Schwänze Arbeit Seien Sie vorsichtig mit Kopie einfügen, weil ich nur eine App läuft, aber Sie könnten Dinge in einer anderen Reihenfolge sehen.
Zach - Ich bin froh, dass du das herausgefunden hast. Wenn Sie einen Dienst in GKE erstellen, sollten Sie in der Lage sein, die Zuweisung einer bestimmten IP-Adresse anzufordern. Wenn Sie also eine statische IP-Adresse erstellen, sollten Sie diese Ihrem Dienst zuweisen können. –
Danke für die Antwort @RobertBailey! Ich sehe das als Command Line Flag zu kubctl expose. Wo stelle ich die public-ip in meine * _controller.json, wenn ich 'kubectl create' verwende? Ich denke, ich muss noch erreichen, um den http-Health-Check anzuhängen, also zu erkunden, wie es eingerichtet wurde, war wirklich informativ. –
Ich denke, dass deprecatedPublicIPs das Feld ist, das Sie wollen (https://github.com/kubernetes/kubernetes/blob/master/pkg/api/v1/types.go#L1534-L1539), aber es könnte das neue Feld externalIPs oben sein es. Und das geht in Ihrer * _service.json Datei, nicht die Replikations-Controller-Konfiguration. –