Auf dieser Seite wird erläutert, wie Ingress für externe Application Load Balancer 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 externe Application Load Balancer.
Das Google Kubernetes Engine-Netzwerk (GKE) basiert auf Cloud Load Balancing. Mit Cloud Load Balancing kann über eine einzelne Anycast-IP-Adresse das Routing ermittelt werden, um den günstigsten Pfad zum nächstgelegenen Google Cloud-Load-Balancer zu ermitteln.
Unterstützung für Google Cloud-Features
Mit einer BackendConfig können Sie einen externen Application 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-Konfiguration.
Unterstützung von WebSocket
Bei externen Application Load Balancern 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 Application Load Balancer von Google Cloud wird das Zeitlimit für den Backend-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 Backend-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 Backend-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. Wenn Sie eine vorhandene Ingress-Ressource so ändern, dass eine statische IP-Adresse anstelle einer sitzungsspezifischen IP-Adresse verwendet wird, ändert GKE möglicherweise die IP-Adresse des Load-Balancers, wenn GKE die Weiterleitungsregel des Load-Balancers neu erstellt.
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 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
Dieses Manifest enthält die folgenden Werte:
SECRET_NAME
: der Name des von Ihnen erstellten Secrets.SERVICE_NAME
: der Name Ihres Backend-Dienstes.
Ä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-Load-Balancing mit Ingress verwenden.
Informationen zum Schutz von HTTPS-verschlüsseltem Ingress für Ihre GKE-Cluster finden Sie unter Secure Ingress.
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
...
Dieses Manifest enthält den SECRET_NAME
, also den Namen des von Ihnen erstellten Secrets.
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.
Dieses Dienstmanifest muss type: NodePort
enthalten, sofern Sie nicht containernatives Load-Balancing verwenden.
Für containernatives Load-Balancing verwenden Sie type: ClusterIP
.
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.
Das Dienstmanifest muss in der Portannotation einen name
-Wert enthalten. Den Dienstport können Sie nur bearbeiten, wenn Sie auf den zugewiesenen name
verweisen und nicht auf seinen targetPort
-Wert.
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
Konfigurieren Sie einen externen Application Load Balancer, indem Sie ein Deployment, einen Dienst und einen Ingress erstellen.