Ingress für externes HTTP(S)-Load-Balancing

Auf dieser Seite wird erläutert, wie Ingress für externes HTTP(S)-Load-Balancing in Google Kubernetes Engine (GKE) funktioniert. Außerdem erfahren Sie, wie Sie Ingress für externes Load-Balancing einrichten und verwenden.

Allgemeine Informationen zur Verwendung des Load-Balancing in GKE finden Sie unter Ingress für HTTP(S)-Load-Balancing.

Überblick

Der externe HTTP(S)-Load-Balancer von Google Cloud ist ein global verteilter Load-Balancer, mit dem Anwendungen öffentlich im Internet zugänglich gemacht werden. Er wird überall in Google Points of Presence (PoPs) bereitgestellt und ermöglicht Nutzern HTTP(S)-Verbindungen mit niedriger Latenz. Anycast-Routing wird für die Load-Balancer-IPs verwendet, sodass Internet-Routing den günstigsten Pfad zum nächstgelegenen Google-Load-Balancer ermitteln kann.

GKE Ingress stellt den externen HTTP(S)-Load-Balancer bereit, um ein natives globales Load-Balancing für Pods als Back-Ends zu ermöglichen.

Unterstützung für Google Cloud-Features

Mit einer BackendConfig können Sie einen externen HTTP(S)-Load-Balancer konfigurieren, um Features wie diese zu verwenden:

BackendConfig ist eine benutzerdefinierte Ressource mit Konfigurationsinformationen für Google Cloud-Features. Weitere Informationen zu unterstützten Features finden Sie unter Ingress-Features.

Unterstützung von WebSocket

Beim externen HTTP(S)-Load-Balancing funktioniert das WebSocket-Protokoll ohne Konfiguration.

Wenn Sie das WebSocket-Protokoll verwenden, können Sie für das Zeitlimit einen Wert festlegen, der größer als der Standardwert von 30 Sekunden ist. Beim Senden von WebSocket-Traffic an einen externen HTTP(S)-Load-Balancer von Google Cloud wird das Zeitlimit für den Back-End-Dienst als die maximale Zeit verstanden, die eine WebSocket-Verbindung geöffnet sein kann – im Leerlauf oder aktiv.

Um den Zeitlimitwert für einen über Ingress konfigurierten Back-End-Dienst festzulegen, erstellen Sie ein BackendConfig-Objekt und verwenden Sie die Anmerkung beta.cloud.google.com/backend-config in Ihrem Dienstmanifest.

Informationen zur Konfiguration finden Sie unter Zeitlimit für Back-End-Antwort.

Statische IP-Adressen für HTTP(S)-Load-Balancer

Wenn Sie ein Ingress-Objekt erstellen, erhalten Sie eine stabile externe IP-Adresse, über die Clients auf Ihre Dienste und Ihre laufenden Container zugreifen können. Die IP-Adresse ist in dem Sinne stabil, als sie für die Lebensdauer des Ingress-Objekts gilt. Wenn Sie Ihr Ingress löschen und ein neues Ingress aus derselben Manifestdatei erstellen, wird nicht garantiert, dass Sie dieselbe externe IP-Adresse erhalten.

Wenn Sie beim Löschen Ihrer Ingress-Adresse und beim Erstellen einer neuen Adresse eine dauerhafte IP-Adresse beibehalten möchten, müssen Sie eine globale statische externe IP-Adresse reservieren. Fügen Sie dann in Ihrem Ingress-Manifest eine Anmerkung hinzu, die den Namen Ihrer reservierten statischen IP-Adresse angibt.

Angenommen, Sie haben eine globale statische externe IP-Adresse mit dem Namen my-static-address reserviert. Fügen Sie in Ihrem Ingress-Manifest eine Anmerkung kubernetes.io/ingress.global-static-ip-name ein, wie hier gezeigt:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: my-static-address

HTTPS (TLS) zwischen Client und Load-Balancer einrichten

Ein HTTP(S)-Load-Balancer fungiert als Proxy zwischen Ihren Clients und Ihrer Anwendung. Wenn Sie HTTPS-Anfragen von Ihren Clients annehmen möchten, benötigt der Load-Balancer ein Zertifikat, damit er Ihren Clients seine Identität nachweisen kann. Der Load-Balancer benötigt außerdem einen privaten Schlüssel, um den HTTPS-Handshake abzuschließen.

Wenn der Load-Balancer eine HTTPS-Anfrage von einem Client akzeptiert, wird der Traffic zwischen dem Client und dem Load-Balancer mit TLS verschlüsselt. Der Load-Balancer beendet jedoch die TLS-Verschlüsselung und leitet die Anfrage ohne Verschlüsselung an die Anwendung weiter. Informationen zum Verschlüsseln des Traffics zwischen dem Load-Balancer und Ihrer Anwendung finden Sie unter HTTPS zwischen Load-Balancer und Ihrer Anwendung.

Sie können von Google verwaltete SSL-Zertifikate oder Zertifikate verwenden, die Sie selbst verwalten. Weitere Informationen zum Erstellen eines Ingress, der von Google verwaltete Zertifikate verwendet, finden Sie unter Von Google verwaltete SSL-Zertifikate verwenden.

Wenn Sie einen HTTP(S)-Load-Balancer mit einem selbst erstellten Zertifikat und Schlüssel bereitstellen möchten, müssen Sie ein Kubernetes-Secret-Objekt erstellen. Das Secret enthält das Zertifikat und den Schlüssel. Fügen Sie das Secret dem Feld tls der Ingress-Manifestdatei hinzu, wie im folgenden Beispiel gezeigt:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-2
spec:
  tls:
  - secretName: secret-name
  rules:
  - http:
      paths:
      - path: /*
        pathType: ImplementationSpecific
        backend:
          service:
            name: service-name
            port:
              number: 60000

Änderungen an Secrets werden regelmäßig abgerufen. Wenn Sie also die Daten im Secret ändern, dauert es maximal 10 Minuten, bis diese Änderungen auf den Load-Balancer angewendet werden.

Weitere Informationen finden Sie unter Mehrere SSL-Zertifikate beim HTTP(S)-Load-Balancing mit Ingress verwenden.

HTTP deaktivieren

Wenn der gesamte Traffic zwischen dem Client und dem HTTP-Load-Balancer HTTPS verwenden soll, können Sie HTTP deaktivieren. Dazu nehmen Sie die Anmerkung kubernetes.io/ingress.allow-http in Ihr Ingress-Manifest auf. Legen Sie den Wert der Anmerkung auf "false" fest.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-2
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: secret-name
  ...

Vorinstallierte Zertifikate für Load-Balancer

Als Alternative zur Verwendung von Kubernetes Secrets zum Bereitstellen von Zertifikaten an den Load-Balancer für die HTTP(S)-Beendigung können Sie Zertifikate verwenden, die zuvor in Ihr Google Cloud-Projekt hochgeladen wurden. Weitere Informationen finden Sie in der Beschreibung zur Verwendung vorinstallierter Zertifikate sowie unter Mehrere SSL-Zertifikate in HTTPS-Load-Balancing mit Ingress verwenden.

HTTPS (TLS) zwischen Load-Balancer und Ihrer Anwendung

Ein HTTP(S)-Load-Balancer fungiert als Proxy zwischen Ihren Clients und Ihrer Anwendung. Clients können HTTP oder HTTPS verwenden, um mit dem Load-Balancer-Proxy zu kommunizieren. Die Verbindung vom Load-Balancer-Proxy zu Ihrer Anwendung verwendet standardmäßig HTTP. Wenn Ihre in einem GKE-Pod ausgeführte Anwendung jedoch HTTPS-Anfragen empfangen kann, können Sie den Load-Balancer so konfigurieren, dass bei der Weiterleitung von Anfragen an die Anwendung HTTPS verwendet wird.

Verwenden Sie zum Konfigurieren des Protokolls, das zwischen dem Load-Balancer und Ihrer Anwendung verwendet wird, die Anmerkung cloud.google.com/app-protocols in Ihrem Dienstmanifest.

Das folgende Dienstmanifest legt zwei Ports fest. Die Anmerkung besagt, dass ein HTTP(S)-Load-Balancer, der auf Port 80 des Dienstes gerichtet ist, HTTP verwenden soll. Wenn der Load-Balancer hingegen auf Port 443 des Dienstes gerichtet ist, sollte er HTTPS verwenden.

apiVersion: v1
kind: Service
metadata:
  name: my-service-3
  annotations:
    cloud.google.com/app-protocols: '{"my-https-port":"HTTPS","my-http-port":"HTTP"}'
spec:
  type: NodePort
  selector:
    app: metrics
    department: sales
  ports:
  - name: my-https-port
    port: 443
    targetPort: 8443
  - name: my-http-port
    port: 80
    targetPort: 50001

Nächste Schritte