In dieser Anleitung wird gezeigt, wie Sie Ihre Webanwendung mit Google Kubernetes Engine (GKE) über eine statische externe IP-Adresse im Internet freigeben und einen Domainnamen konfigurieren, der auf Ihre Anwendung verweist.
In dieser Anleitung wird vorausgesetzt, dass Sie der Inhaber eines registrierten Domainnamens sind (z. B. example.com
).
Ziele
Folgende Schritte werden in dieser Anleitung beschrieben:
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Vorbereitung
Führen Sie folgende Schritte aus, um die Kubernetes Engine API zu aktivieren:- Rufen Sie in der Google Cloud Console die Seite "Kubernetes Engine" auf.
- Erstellen Sie ein Projekt oder wählen Sie eines aus.
- Warten Sie, bis die API und die zugehörigen Dienste aktiviert worden sind. Dieser Vorgang kann einige Minuten dauern.
-
Make sure that billing is enabled for your Google Cloud project.
Installieren Sie die folgenden Befehlszeilentools, die in dieser Anleitung verwendet werden:
-
Mit
gcloud
werden Kubernetes Engine-Cluster erstellt und gelöscht.gcloud
ist in dergcloud
CLI enthalten. -
kubectl
wird zur Verwaltung von Kubernetes verwendet, dem Cluster-Orchestrierungssystem von Kubernetes Engine. Sie könnenkubectl
mitgcloud
installieren:gcloud components install kubectl
Klonen Sie den Beispielcode aus GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
cd kubernetes-engine-samples/quickstarts/hello-app/manifests
Standards für das gcloud
-Befehlszeilentool festlegen
Wenn Sie die Projekt-ID und die Optionen für die Compute Engine-Zone nicht immer wieder neu in das gcloud
-Befehlszeilentool eingeben möchten, können Sie die Standardwerte festlegen:
gcloud config set project project-id gcloud config set compute/zone compute-zone
Cluster erstellen
Erstellen Sie einen Cluster.
gcloud container clusters create-auto domain-test
Webanwendung bereitstellen
Das folgende Manifest beschreibt ein Deployment, das ein Container-Image einer Beispielwebanwendung ausführt:
Erstellen Sie das Deployment:
kubectl apply -f helloweb-deployment.yaml
Anwendung freigeben
Sie können Ihre Anwendung auf GKE mit einer der folgenden Methoden freigeben:
Service verwenden, der einen mit regionalen IP-Adressen funktionierenden externen Passthrough-Network-Load-Balancer erstellt.
Ingress verwenden, das einen Application Load Balancer erstellt und globale IP-Adressen unterstützt.
Weitere Informationen zu den Vor- und Nachteilen der einzelnen Methoden finden Sie unter Externen Application Load Balancer mit Ingress einrichten.
Dienst verwenden
Damit Ihre Anwendung über eine statische externe IP-Adresse verfügt, müssen Sie eine statische IP-Adresse reservieren.
Wenn Sie Ihre Anwendung über einen Service freigeben möchten, müssen Sie eine regionale IP-Adresse erstellen. Globale IP-Adressen funktionieren nur beim Ressourcentyp "Ingress", wie im nächsten Abschnitt erklärt.
Wenn Sie einen Dienst verwenden möchten, erstellen Sie eine statische IP-Adresse mit dem Namen helloweb-ip
in der Region us-central1
:
gcloud
gcloud compute addresses create helloweb-ip --region us-central1
Suchen Sie die statische IP-Adresse, die Sie erstellt haben:
gcloud compute addresses describe helloweb-ip --region us-central1
Die Ausgabe sieht in etwa so aus:
...
address: 203.0.113.32
...
Config Connector
Hinweis: Für diesen Schritt ist Config Connector erforderlich. Folgen Sie der Installationsanleitung, um Config Connector in Ihrem Cluster zu installieren.
Speichern Sie das Manifest als compute-address-regional.yaml
:
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f compute-address-regional.yaml
Suchen Sie die statische IP-Adresse, die Sie erstellt haben:
kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'
Das folgende Manifest beschreibt einen Service vom Typ „LoadBalancer“, der einen externen Passthrough-Network-Load-Balancer erstellt, um Pods mit einer externen IP-Adresse bereitzustellen.
Ersetzen Sie YOUR.IP.ADDRESS.HERE
durch die statische IP-Adresse:
Erstellen Sie den Service:
kubectl apply -f helloweb-service-static-ip.yaml
Rufen Sie die reservierte IP-Adresse auf, die dem Load Balancer zugeordnet ist:
kubectl get service
Die Ausgabe sieht in etwa so aus:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s
Ingress verwenden
Wenn Sie Ihre Anwendung über Ingress freigeben möchten, müssen Sie eine globale statische IP-Adresse reservieren.
Verwenden Sie die Annotation kubernetes.io/ingress.global-static-ip-name
, um eine globale IP-Adresse anzugeben.
Verwenden Sie zum Bereitstellen Ihrer Anwendung für Clients und Dienste in einer Region eine regionale statische interne IP-Adresse. Stellen Sie dabei eine interne Ingress-Ressource für GKE zusammen mit den erforderlichen Annotationen bereit.
Informationen zur Freigabe Ihrer Anwendung für das Internet mit Ingress finden Sie unter Externen Application Load Balancer mit Ingress einrichten.
So erstellen Sie eine globale statische IP-Adresse mit dem Namen helloweb-ip
:
gcloud
gcloud compute addresses create helloweb-ip --global
Suchen Sie die statische IP-Adresse, die Sie erstellt haben:
gcloud compute addresses describe helloweb-ip --global
Die Ausgabe sieht in etwa so aus:
...
address: 203.0.113.32
...
Config Connector
Hinweis: Für diesen Schritt ist Config Connector erforderlich. Folgen Sie der Installationsanleitung, um Config Connector in Ihrem Cluster zu installieren.
Speichern Sie das Manifest als compute-address-global.yaml
:
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f compute-address-global.yaml
Das folgende Manifest beschreibt ein Ingress, das eine Webanwendung in einer statischen IP mit zwei Ressourcen verfügbar macht:
- Eine
Service
-Ressource mittype:NodePort
- Eine
Ingress
-Ressource, die mit dem Dienstnamen und der statischen IP-Anmerkung konfiguriert wurde
Die Annotation kubernetes.io/ingress.global-static-ip-name
gibt den Namen der globalen IP-Adressressource an, die dem Load Balancer zugeordnet werden soll.
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f helloweb-ingress-static-ip.yaml
Rufen Sie die mit dem Load-Balancer verknüpfte IP-Adresse auf:
kubectl get ingress
Die Ausgabe sieht etwa so aus:
NAME HOSTS ADDRESS PORTS AGE
helloweb * 203.0.113.32 80 4m
Reservierte statische IP-Adresse aufrufen
Wenn Sie überprüfen möchten, ob der Load-Balancer richtig konfiguriert ist, können Sie entweder die IP-Adresse in einem Webbrowser aufrufen oder curl
verwenden:
curl http://203.0.113.32/
Die Ausgabe sieht in etwa so aus:
Hello, world!
Hostname: helloweb-3766687455-8lvqv
Einträge für Domainnamen konfigurieren
Damit Browser, die eine Anfrage an Ihren Domainnamen (z. B. example.com
) oder Subdomainnamen (z. B. blog.example.com
) richten, auf die statische IP-Adresse verweisen, die Sie reserviert haben, müssen Sie die DNS-Einträge (Domain Name Server) Ihres Domainnamens aktualisieren.
Sie müssen einen DNS-Eintrag vom Typ A (Adresse) für Ihren Domain- oder Subdomainnamen erstellen und dessen Wert mit der reservierten IP-Adresse konfigurieren.
DNS-Einträge Ihrer Domain werden von Ihrem Nameserver verwaltet. Ihr Nameserver kann der "Registrar", bei dem Sie Ihre Domain registriert haben, ein DNS-Dienst wie Cloud DNS oder ein anderer Drittanbieter sein.
Wenn Ihr Nameserver Cloud DNS ist: Folgen Sie der Cloud DNS-Kurzanleitung zum Konfigurieren eines DNS-A-Eintrags für Ihren Domainnamen mit der reservierten IP-Adresse Ihrer Anwendung.
Wenn Ihr Nameserver ein anderer Anbieter ist: Lesen Sie in der Dokumentation Ihres DNS-Anbieters nach, wie Sie DNS-A-Einträge zur Konfiguration Ihres Domainnamens festlegen. Wenn Sie stattdessen Google Cloud DNS verwenden, lesen Sie die Informationen unter Zu Cloud DNS migrieren.
Domainnamen aufrufen
Rufen Sie den Domainnamen auf, um zu überprüfen, ob die DNS-A-Datensätze Ihres Domainnamens zu der von Ihnen reservierten IP-Adresse aufgelöst werden.
Führen Sie den Befehl host
aus, um eine DNS-Abfrage für den A-Eintrag Ihres Domainnamens durchzuführen:
host example.com
Die Ausgabe sieht in etwa so aus:
example.com has address 203.0.113.32
Sie können jetzt Ihren Webbrowser auf Ihren Domainnamen verweisen und Ihre Website aufrufen.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Löschen Sie den Service und das Ingress:
kubectl delete ingress,service -l app=hello
Geben Sie die reservierte statische IP-Adresse frei. Nachdem der Load Balancer gelöscht wurde, wird die nicht verwendete, aber reservierte IP-Adresse gemäß den Preisen für ungenutzte IP-Adressen in Rechnung gestellt.
Wenn Sie einen Dienst verwendet haben:
gcloud compute addresses delete helloweb-ip --region us-central1
Wenn Sie ein Ingress-Objekt verwendet haben:
gcloud compute addresses delete helloweb-ip --global
Löschen Sie die Beispielanwendung:
kubectl delete -f helloweb-deployment.yaml
Löschen Sie den Cluster:
gcloud container clusters delete domain-test
Nächste Schritte
- Weitere Kubernetes-Anleitungen
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center