Domainnamen mit statischen IP-Adressen konfigurieren


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 davon ausgegangen, dass Sie Inhaber eines registrierten Domainnamens wie example.com sind.

Ziele

Folgende Schritte werden in dieser Anleitung beschrieben:

  • Reservieren einer statischen externen IP-Adresse für eine Anwendung
  • Konfigurieren von Service- oder Ingress-Ressourcen mit der statischen IP-Adresse
  • Aktualisieren von DNS-Einträgen des Domainnamens, sodass sie auf die Anwendung verweisen

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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

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.

Hinweis

Führen Sie folgende Schritte aus, um die Kubernetes Engine API zu aktivieren:
  1. Rufen Sie in der Google Cloud Console die Seite "Kubernetes Engine" auf.
  2. Erstellen Sie ein Projekt oder wählen Sie eines aus.
  3. Warten Sie, bis die API und die zugehörigen Dienste aktiviert worden sind. Dieser Vorgang kann einige Minuten dauern.
  4. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

Installieren Sie die folgenden Befehlszeilentools, die in dieser Anleitung verwendet werden:

  • Mit gcloud werden Kubernetes Engine-Cluster erstellt und gelöscht. gcloud ist in der gcloud CLI enthalten.
  • kubectl wird zur Verwaltung von Kubernetes verwendet, dem Cluster-Orchestrierungssystem von Kubernetes Engine. Sie können kubectl mit gcloud 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:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
      tier: web
  template:
    metadata:
      labels:
        app: hello
        tier: web
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 200m

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:

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.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: us-central1

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:

apiVersion: v1
kind: Service
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    app: hello
    tier: web
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer
  loadBalancerIP: "YOUR.IP.ADDRESS.HERE"

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.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: global

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 mit type:NodePort
  • Eine Ingress-Ressource, die mit dem Dienstnamen und der statischen IP-Anmerkung konfiguriert wurde
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: helloweb
  annotations:
    kubernetes.io/ingress.global-static-ip-name: helloweb-ip
  labels:
    app: hello
spec:
  defaultBackend:
    service:
      name: helloweb-backend
      port:
        number: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: helloweb-backend
  labels:
    app: hello
spec:
  type: NodePort
  selector:
    app: hello
    tier: web
  ports:
  - port: 8080
    targetPort: 8080

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.

  1. Löschen Sie den Service und das Ingress:

    kubectl delete ingress,service -l app=hello
    
  2. 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
      
  3. Löschen Sie die Beispielanwendung:

    kubectl delete -f helloweb-deployment.yaml
    
  4. Löschen Sie den Cluster:

    gcloud container clusters delete domain-test
    

Nächste Schritte