In diesem Dokument wird anhand eines praktischen Beispiels gezeigt, wie Sie ein externes Multi-Cluster-Gateway bereitstellen, um Internet-Traffic an eine Anwendung weiterzuleiten, die in zwei verschiedenen GKE-Clustern ausgeführt wird.
Multi-Cluster-Gateways bieten eine leistungsstarke Möglichkeit, Traffic für Dienste zu verwalten, die in mehreren GKE-Clustern bereitgestellt werden. Mit der globalen Load-Balancing-Infrastruktur von Google können Sie einen einzigen Einstiegspunkt für Ihre Anwendungen erstellen, was die Verwaltung vereinfacht und die Zuverlässigkeit verbessert.In dieser Anleitung verwenden Sie eine store-Beispielanwendung, um ein reales Szenario zu simulieren, in dem ein Online-Shopping-Dienst von separaten Teams betrieben und über eine Flotte freigegebener GKE-Cluster bereitgestellt wird.
Hinweise
Multi-Cluster-Gateways erfordern eine gewisse Umgebungsvorbereitung, bevor sie bereitgestellt werden können. Bevor Sie fortfahren, führen Sie die Schritte unter Umgebung für Multi-Cluster-Gateways vorbereiten aus:
GKE-Cluster bereitstellen.
Registrieren Sie Ihre Cluster für eine Flotte, falls noch nicht geschehen.
Aktivieren Sie den Multi-Cluster-Service und die Multi-Cluster-Gateway-Controller.
Prüfen Sie dann vor der Verwendung in der Umgebung die Einschränkungen und bekannten Probleme des GKE Gateway-Controllers.
Externes Multi-Cluster-/Multi-Region-Gateway
In dieser Anleitung erstellen Sie ein externes Multi-Cluster-Gateway, das externen Traffic für eine Anwendung bereitstellt, die in zwei GKE-Clustern ausgeführt wird.
In den nächsten Schritten führen Sie die folgenden Aufgaben aus:
- Stellen Sie die
store-Beispielanwendung in den Clusterngke-west-1undgke-east-1bereit. - Konfigurieren Sie Services auf jedem Cluster, die in Ihre Flotte exportiert werden sollen (Multi-Cluster-Services).
- Stellen Sie ein externes Multi-Cluster-Gateway und eine HTTPRoute in Ihrem Konfigurationscluster (
gke-west-1) bereit.
Nachdem die Anwendungs- und Gateway-Ressourcen bereitgestellt wurden, können Sie den Traffic zwischen den beiden GKE-Clustern über pfadbasierte Routings steuern:
- Anfragen an
/westwerden anstore-Pods imgke-west-1-Cluster weitergeleitet. - Anfragen an
/eastwerden anstore-Pods imgke-east-1-Cluster weitergeleitet. - Anfragen an jeden anderen Pfad werden abhängig von ihrem Zustand, ihrer Kapazität und der Nähe zum anfragenden Client an einen der Cluster weitergeleitet.
Demoanwendung bereitstellen
Erstellen Sie das
store-Deployment und den Namespace in allen drei Clustern, die unter Umgebung für Multi-Cluster-Gateways vorbereiten bereitgestellt wurden:kubectl apply --context gke-west-1 -f https://raw.githubusercontent.com/GoogleCloudPlatform/gke-networking-recipes/main/gateway/gke-gateway-controller/multi-cluster-gateway/store.yaml kubectl apply --context gke-west-2 -f https://raw.githubusercontent.com/GoogleCloudPlatform/gke-networking-recipes/main/gateway/gke-gateway-controller/multi-cluster-gateway/store.yaml kubectl apply --context gke-east-1 -f https://raw.githubusercontent.com/GoogleCloudPlatform/gke-networking-recipes/main/gateway/gke-gateway-controller/multi-cluster-gateway/store.yamlIn jedem Cluster werden folgende Ressourcen bereitgestellt:
namespace/store created deployment.apps/store createdFür alle Beispiele auf dieser Seite wird die in diesem Schritt bereitgestellte Anwendung verwendet. Prüfen Sie, ob die Anwendung in allen drei Clustern bereitgestellt wird, bevor Sie einen der verbleibenden Schritte ausführen. In diesem Beispiel werden nur die Cluster
gke-west-1undgke-east-1verwendet. In einem anderen Beispiel wirdgke-west-2verwendet.
Multi-Cluster-Dienste
Services werden wie Pods für Clients verfügbar gemacht. Da der GKE-Gateway-Controller containernatives Load Balancing verwendet, wird nicht das ClusterIP- oder Kubernetes-Load-Balancing verwendet, um Pods zu erreichen. Der Traffic wird direkt vom Load Balancer an die Pod-IP-Adressen gesendet. Services spielen jedoch weiterhin eine wichtige Rolle als logische Kennzeichnung für die Pod-Gruppierung.
Multi-Cluster-Service (MCS) ist ein API-Standard für Services, die Cluster umfassen. Der zugehörige GKE-Controller stellt Service Discovery in GKE-Clustern bereit. Der Multi-Cluster-Gateway-Controller verwendet MCS-API-Ressourcen, um Pods in einem Service zu gruppieren, der über mehrere Cluster adressierbar ist oder sich über mehrere Cluster erstreckt.
Die Multi-Cluster Services API definiert folgende benutzerdefinierte Ressourcen:
- ServiceExports werden einem Kubernetes-Dienst zugeordnet und exportieren die Endpunkte dieses Dienstes auf alle Cluster, die für die Flotte registriert sind. Wenn ein Service einen entsprechenden ServiceExport hat, kann er von einem Multi-Cluster-Gateway adressiert werden.
- ServiceImports werden vom Multi-Cluster-Service-Controller automatisch generiert. ServiceExport und ServiceImport sind paarweise verfügbar. Wenn ein ServiceExport in der Flotte vorhanden ist, wird ein entsprechender ServiceImport erstellt, damit der Service, der dem ServiceExport zugeordnet ist, über alle Cluster zugänglich ist.
Der Export von Services funktioniert auf folgende Weise. In gke-west-1 befindet sich ein Speicher-Service, der eine Gruppe von Pods in diesem Cluster auswählt. Im Cluster wird ein ServiceExport erstellt, durch den die Pods in gke-west-1 von den anderen Clustern in der Flotte zugänglich sind. Der ServiceExport wird Services zugeordnet, die denselben Namen und Namespace wie die ServiceExport-Ressource haben, und macht sie verfügbar.
apiVersion: v1
kind: Service
metadata:
name: store
namespace: store
spec:
selector:
app: store
ports:
- port: 8080
targetPort: 8080
---
kind: ServiceExport
apiVersion: net.gke.io/v1
metadata:
name: store
namespace: store
Das folgende Diagramm zeigt, was nach der Bereitstellung eines ServiceExport geschieht. Wenn ein ServiceExport/Service-Paar vorhanden ist, stellt der Multi-Cluster-Service-Controller einen entsprechenden ServiceImport in jedem GKE-Cluster in der Flotte bereit. Der ServiceImport ist die lokale Darstellung des store-Service in jedem Cluster. Dadurch kann der client-Pod in gke-east-1 ClusterIP- oder monitorlose Services verwenden, um die store-Pods in gke-west-1 zu erreichen. Bei dieser Verwendungsart bieten Multi-Cluster-Services ein Ost-West-Load-Balancing zwischen Clustern, ohne einen internen LoadBalancer-Service zu erfordern.
Informationen zum Verwenden von Multi-Cluster-Services für Cluster-zu-Cluster-Load-Balancing finden Sie unter Multi-Cluster-Services konfigurieren.
Multi-Cluster-Gateways verwenden auch ServiceImports, jedoch nicht für das Cluster-zu-Cluster-Load-Balancing. Stattdessen verwenden Gateways ServiceImports als logische Kennzeichnungen für einen Service, der in einem anderen Cluster vorhanden ist oder sich über mehrere Cluster erstreckt. Die folgende HTTPRoute verweist auf eine ServiceImport-Ressource statt auf eine Service-Ressource. Durch Verweisen auf einen ServiceImport wird angegeben, dass der Traffic an eine Gruppe von Backend-Pods weitergeleitet wird, die in einem oder mehreren Clustern ausgeführt werden.
kind: HTTPRoute
apiVersion: gateway.networking.k8s.io/v1
metadata:
name: store-route
namespace: store
labels:
gateway: multi-cluster-gateway
spec:
parentRefs:
- kind: Gateway
namespace: store
name: external-http
hostnames:
- "store.example.com"
rules:
- backendRefs:
- group: net.gke.io
kind: ServiceImport
name: store
port: 8080
Das folgende Diagramm zeigt, wie die HTTPRoute store.example.com-Traffic zu store-Pods in gke-west-1 und gke-east-1 weiterleitet. Der Load-Balancer behandelt sie als einen einzigen Pool von Back-Ends. Wenn die Pods aus einem der Cluster fehlerhaft werden, nicht mehr erreichbar sind oder keine Traffic-Kapazität haben, wird die Traffic-Last auf die verbleibenden Pods im anderen Cluster verteilt. Neue Cluster können mit dem store-Service und -ServiceExport hinzugefügt oder entfernt werden. Dadurch werden Backend-Pods transparent ohne explizite Routingkonfigurationsänderungen hinzugefügt oder entfernt.
Services exportieren
An diesem Punkt wird die Anwendung in beiden Clustern ausgeführt. Als Nächstes machen Sie die Anwendungen verfügbar und exportieren sie, wozu Sie Services und ServiceExports in jedem Cluster bereitstellen.
Wenden Sie das folgende Manifest auf den Cluster
gke-west-1an, um die Services und ServiceExportsstoreundstore-west-1zu erstellen.cat << EOF | kubectl apply --context gke-west-1 -f - apiVersion: v1 kind: Service metadata: name: store namespace: store spec: selector: app: store ports: - port: 8080 targetPort: 8080 --- kind: ServiceExport apiVersion: net.gke.io/v1 metadata: name: store namespace: store --- apiVersion: v1 kind: Service metadata: name: store-west-1 namespace: store spec: selector: app: store ports: - port: 8080 targetPort: 8080 --- kind: ServiceExport apiVersion: net.gke.io/v1 metadata: name: store-west-1 namespace: store EOFWenden Sie das folgende Manifest auf den Cluster
gke-east-1an, um die Services und ServiceExportsstoreundstore-east-1zu erstellen.cat << EOF | kubectl apply --context gke-east-1 -f - apiVersion: v1 kind: Service metadata: name: store namespace: store spec: selector: app: store ports: - port: 8080 targetPort: 8080 --- kind: ServiceExport apiVersion: net.gke.io/v1 metadata: name: store namespace: store --- apiVersion: v1 kind: Service metadata: name: store-east-1 namespace: store spec: selector: app: store ports: - port: 8080 targetPort: 8080 --- kind: ServiceExport apiVersion: net.gke.io/v1 metadata: name: store-east-1 namespace: store EOFPrüfen Sie, ob im Cluster die richtigen ServiceExports erstellt wurden.
kubectl get serviceexports --context CLUSTER_NAME --namespace storeErsetzen Sie CLUSTER_NAME durch
gke-west-1undgke-east-1. Die Ausgabe sollte so aussehen:# gke-west-1 NAME AGE store 2m40s store-west-1 2m40s # gke-east-1 NAME AGE store 2m25s store-east-1 2m25sDie Ausgabe zeigt, dass der
store-Service in beiden Clusternstore-Pods enthält, während diestore-west-1- undstore-east-1-Services in den jeweiligen Clustern nurstore-Pods enthalten. Diese sich überschneidenden Services werden verwendet, um die Pods auf mehrere Cluster oder eine Teilmenge von Pods in einem einzelnen Cluster auszurichten.Prüfen Sie nach einigen Minuten, ob die zugehörigen
ServiceImportsvom Multi-Cluster-Services-Controller automatisch in allen Clustern der Flotte erstellt wurden.kubectl get serviceimports --context CLUSTER_NAME --namespace storeErsetzen Sie CLUSTER_NAME durch
gke-west-1undgke-east-1. Die Ausgabe sollte in etwa so aussehen:# gke-west-1 NAME TYPE IP AGE store ClusterSetIP ["10.112.31.15"] 6m54s store-east-1 ClusterSetIP ["10.112.26.235"] 5m49s store-west-1 ClusterSetIP ["10.112.16.112"] 6m54s # gke-east-1 NAME TYPE IP AGE store ClusterSetIP ["10.72.28.226"] 5d10h store-east-1 ClusterSetIP ["10.72.19.177"] 5d10h store-west-1 ClusterSetIP ["10.72.28.68"] 4h32mDies zeigt, dass auf alle drei Services von beiden Clustern in der Flotte aus zugegriffen werden kann. Da es jedoch nur einen aktiven Konfigurationscluster pro Flotte gibt, können Sie nur Gateways und HTTPRoutes bereitstellen, die in
gke-west-1auf diese ServiceImports verweisen. Wenn eine HTTPRoute im Konfigurationscluster auf diese ServiceImports als Back-Ends verweist, kann das Gateway Traffic an diese Services weiterleiten, unabhängig davon, aus welchem Cluster sie exportiert wurden.
Gateway und HTTPRoute bereitstellen
Wenn die Anwendungen bereitgestellt wurden, können Sie ein Gateway mithilfe der GatewayClass gke-l7-global-external-managed-mc konfigurieren. Dieses Gateway erstellt einen externen Application Load Balancer, der so konfiguriert ist, dass der Traffic auf Ihre Zielcluster verteilt wird.
Wenden Sie das folgende
Gateway-Manifest auf den Konfigurationsclustergke-west-1in diesem Beispiel an:cat << EOF | kubectl apply --context gke-west-1 -f - kind: Gateway apiVersion: gateway.networking.k8s.io/v1 metadata: name: external-http namespace: store spec: gatewayClassName: gke-l7-global-external-managed-mc listeners: - name: http protocol: HTTP port: 80 allowedRoutes: kinds: - kind: HTTPRoute EOFDiese Gateway-Konfiguration stellt externe Application-Load-Balancer-Ressourcen mit der folgenden Namenskonvention bereit:
gkemcg1-NAMESPACE-GATEWAY_NAME-HASH.Die bei dieser Konfiguration erstellten Standardressourcen:
- 1 Load Balancer:
gkemcg1-store-external-http-HASH - 1 öffentliche IP-Adresse:
gkemcg1-store-external-http-HASH - 1 Weiterleitungsregel:
gkemcg1-store-external-http-HASH - 2 backend services:
- Standard-Backend-Dienst 404:
gkemcg1-store-gw-serve404-HASH - Standard-Backend-Dienst 500:
gkemcg1-store-gw-serve500-HASH
- Standard-Backend-Dienst 404:
- 1 Systemdiagnose:
- Standard-Systemdiagnose 404:
gkemcg1-store-gw-serve404-HASH
- Standard-Systemdiagnose 404:
- 0 Weiterleitungsregeln (URL-Map ist leer)
In dieser Phase führt jede Anfrage an GATEWAY_IP:80 zu einer Standardseite mit der folgenden Meldung:
fault filter abort.- 1 Load Balancer:
Wenden Sie das folgende
HTTPRoute-Manifest auf den Konfigurationsclustergke-west-1in diesem Beispiel an:cat << EOF | kubectl apply --context gke-west-1 -f - kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1 metadata: name: public-store-route namespace: store labels: gateway: external-http spec: hostnames: - "store.example.com" parentRefs: - name: external-http rules: - matches: - path: type: PathPrefix value: /west backendRefs: - group: net.gke.io kind: ServiceImport name: store-west-1 port: 8080 - matches: - path: type: PathPrefix value: /east backendRefs: - group: net.gke.io kind: ServiceImport name: store-east-1 port: 8080 - backendRefs: - group: net.gke.io kind: ServiceImport name: store port: 8080 EOFIn dieser Phase führt jede Anfrage an GATEWAY_IP:80 zu einer Standardseite mit der folgenden Meldung:
fault filter abort.Nach der Bereitstellung konfiguriert diese HTTPRoute folgendes Routingverhalten:
- Anfragen an
/westwerden anstore-Pods imgke-west-1-Cluster weitergeleitet, da Pods, die vom ServiceExportstore-west-1ausgewählt wurden, nur imgke-west-1-Cluster vorhanden sind. - Anfragen an
/eastwerden anstore-Pods imgke-east-1-Cluster weitergeleitet, da Pods, die vom ServiceExportstore-east-1ausgewählt wurden, nur imgke-east-1-Cluster vorhanden sind. - Anfragen an jeden anderen Pfad werden abhängig von ihrem Zustand, ihrer Kapazität und der Nähe zum anfragenden Client an
store-Pods in einem der Cluster weitergeleitet. - Anfragen an GATEWAY_IP:80 führen zu einer Standardseite mit der folgenden Meldung:
fault filter abort.
Wenn alle Pods in einem bestimmten Cluster fehlerhaft oder nicht vorhanden sind, wird der Traffic zum
store-Service nur an Cluster gesendet, die tatsächlichstore-Pods haben. Wenn ein ServiceExport und Service in einem bestimmten Cluster vorhanden sind, wird dadurch nicht garantiert, dass Traffic an diesen Cluster gesendet wird. Pods müssen vorhanden sein und positiv auf die Systemdiagnose des Load-Balancers reagieren. Andernfalls sendet der Load-Balancer Traffic an fehlerfreiestore-Pods in anderen Clustern.Mit dieser Konfiguration werden neue Ressourcen erstellt:
- 3 backend services:
- Der
store-Backend-Dienst:gkemcg1-store-store-8080-HASH - Der
store-east-1-Backend-Dienst:gkemcg1-store-store-east-1-8080-HASH - Der
store-west-1-Backend-Dienst:gkemcg1-store-store-west-1-8080-HASH
- Der
- 3 Systemdiagnosen:
- Die
store-Systemdiagnose:gkemcg1-store-store-8080-HASH - Die
store-east-1-Systemdiagnose:gkemcg1-store-store-east-1-8080-HASH - Die
store-west-1-Systemdiagnose:gkemcg1-store-store-west-1-8080-HASH
- Die
- 1 Routingregel in der URL-Zuordnung:
- Die
store.example.com-Routingregel: - 1 Host:
store.example.com - Mehrere
matchRuleszur Weiterleitung an die neuen Backend-Dienste
- Die
- Anfragen an
Das folgende Diagramm zeigt die Ressourcen, die Sie in beiden Clustern bereitgestellt haben.
Da gke-west-1 der Gateway-Konfigurationscluster ist, ist er der Cluster, in dem unser Gateway, die HTTPRoutes und die ServiceImports vom Gateway-Controller überwacht werden. Jeder Cluster hat einen store-ServiceImport und einen weiteren ServiceImport, der für diesen Cluster spezifisch ist. Beide verweisen auf dieselben Pods. Damit kann mit der HTTPRoute genau angegeben werden, wohin der Traffic geht – zu den store-Pods in einem bestimmten Cluster oder zu den store-Pods in allen Clustern.
Beachten Sie, dass dies ein logisches Ressourcenmodell und keine Darstellung des Trafficflusses ist. Der Trafficpfad führt direkt vom Load Balancer zu den Backend-Pods und hat keine direkte Beziehung zu dem Cluster, der der Konfigurationscluster ist.
Bereitstellung prüfen
Sie können nun Anfragen an unser Multi-Cluster-Gateway senden und den Traffic auf beide GKE-Cluster verteilen.
Rufen Sie den Gateway-Status und die Ereignisse auf, um zu prüfen, ob das Gateway und die HTTPRoute erfolgreich bereitgestellt wurden.
kubectl describe gateways.gateway.networking.k8s.io external-http --context gke-west-1 --namespace storeDie Ausgabe sollte in etwa so aussehen:
Name: external-http Namespace: store Labels: <none> Annotations: networking.gke.io/addresses: /projects/PROJECT_NUMBER/global/addresses/gkemcg1-store-external-http-laup24msshu4 networking.gke.io/backend-services: /projects/PROJECT_NUMBER/global/backendServices/gkemcg1-store-gw-serve404-80-n65xmts4xvw2, /projects/PROJECT_NUMBER/global/backendServices/gke... networking.gke.io/firewalls: /projects/PROJECT_NUMBER/global/firewalls/gkemcg1-l7-default-global networking.gke.io/forwarding-rules: /projects/PROJECT_NUMBER/global/forwardingRules/gkemcg1-store-external-http-a5et3e3itxsv networking.gke.io/health-checks: /projects/PROJECT_NUMBER/global/healthChecks/gkemcg1-store-gw-serve404-80-n65xmts4xvw2, /projects/PROJECT_NUMBER/global/healthChecks/gkemcg1-s... networking.gke.io/last-reconcile-time: 2023-10-12T17:54:24Z networking.gke.io/ssl-certificates: networking.gke.io/target-http-proxies: /projects/PROJECT_NUMBER/global/targetHttpProxies/gkemcg1-store-external-http-94oqhkftu5yz networking.gke.io/target-https-proxies: networking.gke.io/url-maps: /projects/PROJECT_NUMBER/global/urlMaps/gkemcg1-store-external-http-94oqhkftu5yz API Version: gateway.networking.k8s.io/v1 Kind: Gateway Metadata: Creation Timestamp: 2023-10-12T06:59:32Z Finalizers: gateway.finalizer.networking.gke.io Generation: 1 Resource Version: 467057 UID: 1dcb188e-2917-404f-9945-5f3c2e907b4c Spec: Gateway Class Name: gke-l7-global-external-managed-mc Listeners: Allowed Routes: Kinds: Group: gateway.networking.k8s.io Kind: HTTPRoute Namespaces: From: Same Name: http Port: 80 Protocol: HTTP Status: Addresses: Type: IPAddress Value: 34.36.127.249 Conditions: Last Transition Time: 2023-10-12T07:00:41Z Message: The OSS Gateway API has deprecated this condition, do not depend on it. Observed Generation: 1 Reason: Scheduled Status: True Type: Scheduled Last Transition Time: 2023-10-12T07:00:41Z Message: Observed Generation: 1 Reason: Accepted Status: True Type: Accepted Last Transition Time: 2023-10-12T07:00:41Z Message: Observed Generation: 1 Reason: Programmed Status: True Type: Programmed Last Transition Time: 2023-10-12T07:00:41Z Message: The OSS Gateway API has altered the "Ready" condition semantics and reservedit for future use. GKE Gateway will stop emitting it in a future update, use "Programmed" instead. Observed Generation: 1 Reason: Ready Status: True Type: Ready Listeners: Attached Routes: 1 Conditions: Last Transition Time: 2023-10-12T07:00:41Z Message: Observed Generation: 1 Reason: Programmed Status: True Type: Programmed Last Transition Time: 2023-10-12T07:00:41Z Message: The OSS Gateway API has altered the "Ready" condition semantics and reservedit for future use. GKE Gateway will stop emitting it in a future update, use "Programmed" instead. Observed Generation: 1 Reason: Ready Status: True Type: Ready Name: http Supported Kinds: Group: gateway.networking.k8s.io Kind: HTTPRoute Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal UPDATE 35m (x4 over 10h) mc-gateway-controller store/external-http Normal SYNC 4m22s (x216 over 10h) mc-gateway-controller SYNC on store/external-http was a successSobald das Gateway bereitgestellt wurde, rufen Sie die externe IP-Adresse vom
external-http-Gateway ab.kubectl get gateways.gateway.networking.k8s.io external-http -o=jsonpath="{.status.addresses[0].value}" --context gke-west-1 --namespace storeErsetzen Sie
VIPin den folgenden Schritten durch die IP-Adresse, die Sie als Ausgabe erhalten.Senden Sie Traffic an den Stammpfad der Domain. Dadurch wird der Traffic auf den
store-ServiceImport verteilt, der sich in den Clusterngke-west-1undgke-east-1befindet. Der Load-Balancer sendet den Traffic an die nächstgelegene Region und Sie sehen möglicherweise keine Antworten aus der anderen Region.curl -H "host: store.example.com" http://VIPDie Ausgabe bestätigt, dass die Anfrage vom Pod aus dem Cluster
gke-east-1bereitgestellt wurde:{ "cluster_name": "gke-east-1", "zone": "us-east1-b", "host_header": "store.example.com", "node_name": "gke-gke-east-1-default-pool-7aa30992-t2lp.c.agmsb-k8s.internal", "pod_name": "store-5f5b954888-dg22z", "pod_name_emoji": "⏭", "project_id": "agmsb-k8s", "timestamp": "2021-06-01T17:32:51" }Als Nächstes senden Sie Traffic an den Pfad
/west. Dadurch wird der Traffic an den ServiceImportstore-west-1weitergeleitet, der nur Pods im Clustergke-west-1ausführt. Ein clusterspezifischer ServiceImport wiestore-west-1ermöglicht einem Anwendungsinhaber, Traffic explizit an einen bestimmten Cluster zu senden, statt die Entscheidung dem Load Balancer zu überlassen.curl -H "host: store.example.com" http://VIP/westDie Ausgabe bestätigt, dass die Anfrage vom Pod aus dem Cluster
gke-west-1bereitgestellt wurde:{ "cluster_name": "gke-west-1", "zone": "us-west1-a", "host_header": "store.example.com", "node_name": "gke-gke-west-1-default-pool-65059399-2f41.c.agmsb-k8s.internal", "pod_name": "store-5f5b954888-d25m5", "pod_name_emoji": "🍾", "project_id": "agmsb-k8s", "timestamp": "2021-06-01T17:39:15", }Senden Sie nun Traffic an den Pfad
/east.curl -H "host: store.example.com" http://VIP/eastDie Ausgabe bestätigt, dass die Anfrage vom Pod aus dem Cluster
gke-east-1bereitgestellt wurde:{ "cluster_name": "gke-east-1", "zone": "us-east1-b", "host_header": "store.example.com", "node_name": "gke-gke-east-1-default-pool-7aa30992-7j7z.c.agmsb-k8s.internal", "pod_name": "store-5f5b954888-hz6mw", "pod_name_emoji": "🧜🏾", "project_id": "agmsb-k8s", "timestamp": "2021-06-01T17:40:48" }
Bereinigen
Wenn Sie mit den Übungen in diesem Dokument fertig sind, entfernen Sie mit den folgenden Schritten die Ressourcen, damit Sie unerwünschte Kosten für Ihr Konto vermeiden:
Heben Sie die Registrierung der Cluster für die Flotte auf, wenn sie nicht für einen anderen Zweck registriert werden müssen.
Deaktivieren Sie die Funktion
multiclusterservicediscovery.gcloud container fleet multi-cluster-services disableDeaktivieren sie Multi-Cluster-Ingress:
gcloud container fleet ingress disableDeaktivieren Sie die APIs:
gcloud services disable \ multiclusterservicediscovery.googleapis.com \ multiclusteringress.googleapis.com \ trafficdirector.googleapis.com \ --project=PROJECT_ID
Fehlerbehebung
Kein gesunder Upstream
Symptom:
Das folgende Problem kann auftreten, wenn Sie ein Gateway erstellen, aber nicht auf die Backend-Dienste zugreifen können (Antwortcode 503):
no healthy upstream
Grund:
Diese Fehlermeldung gibt an, dass der Prüfer für die Systemdiagnose keine fehlerfreien Backend-Dienste finden kann. Möglicherweise sind Ihre Back-End-Dienste in Ordnung, aber Sie müssen die Systemdiagnosen möglicherweise anpassen.
Workaround:
Um dieses Problem zu beheben, passen Sie Ihre Systemdiagnose anhand der Anforderungen Ihrer Anwendung (z. B. /health) mithilfe einer HealthCheckPolicy an.