Integration in Service Directory einrichten

In dieser Anleitung wird davon ausgegangen, dass Sie eine laufende Cloud Service Mesh-Bereitstellung haben und mindestens einen Dienst bei Service Directory registriert haben. Die Einrichtungsanleitung gilt unabhängig davon, ob Sie Envoy oder proxylose gRPC-Dienste verwenden.

Damit Sie Service Directory und Cloud Service Mesh verwenden können, muss als Erstes der Dienst in Service Directory veröffentlicht werden. Allgemeine Informationen finden Sie unter Dienste in Service Directory veröffentlichen oder in der Service Directory-Dokumentation.

Nachdem der Dienst bei Service Directory registriert wurde, erstellen Sie mithilfe der API-Ressourcen von Cloud Service Mesh eine Dienstbindung. Sie erstellen einen Backend-Dienst, der für die Integration in Service Directory vorgesehen ist, da ein Backend-Dienst, der auf Dienstbindungen verweist, keine Backends oder eine zugehörige Systemdiagnose haben kann.

Anforderungen an Cloud Service Mesh-Weiterleitungsregeln und Hostregeln mit den Load Balancing APIs

Wenn Sie Cloud Service Mesh für die Verwendung mit Service Directory konfigurieren und die älteren Load Balancing APIs verwenden, beachten Sie die folgenden Richtlinien:

  1. Achten Sie darauf, dass die Cloud Service Mesh-Weiterleitungsregel die virtuelle IP-Adresse 0.0.0.0 (VIP) verwendet.
  2. Wenn Sie eine private Zone haben, achten Sie darauf, dass die Hostregel in der URL-Zuordnung mit dem DNS-Namen übereinstimmt, den Service Directory in Ihrer privaten Cloud DNS-Zone konfiguriert.

Wenn Sie diese Richtlinien nicht befolgen, schlagen ausgehende Anfragen von Ihren Anwendungen wahrscheinlich fehl.

API-Endpunkt network-services festlegen

Prüfen Sie, ob der API-Endpunkt network-services festgelegt ist, damit auf Dienstbindungen unter network-services-Ressourcen ordnungsgemäß verwiesen wird, bevor Sie einen Backend-Dienst erstellen und verwenden. Legen Sie den API-Endpunkt network-services mit dem folgenden Befehl fest.

export CLOUDSDK_API_ENDPOINT_OVERRIDES_NETWORKSERVICES="https://networkservices.googleapis.com/"

Rollen- und Berechtigungsanforderungen

Prüfen Sie, ob Sie die folgenden Berechtigungen und Rollen haben, bevor Sie die Cloud Service Mesh-Bereitstellung erstellen.

Berechtigungen und Rollen für Dienstbindung

In diesem Abschnitt werden keine Berechtigungen für Inhaber, Bearbeiter und Betrachter auf Projektebene behandelt. Es beschreibt die Berechtigungen und Rollen, die zum Erstellen, Lesen, Aktualisieren und Löschen von Ressourcen erforderlich sind.

Aktion Berechtigung Rollen
Erstellen Sie eine Dienstbindung. networkservices.serviceBindings.create Netzwerkadministrator
Rufen Sie eine Dienstbindung ab. networkservices.serviceBindings.get Netzwerkadministrator, Netzwerkbetrachter
Listen Sie Dienstbindungen in einem Google Cloud-Projekt auf. networkservices.serviceBindings.list Netzwerkadministrator, Netzwerkbetrachter
Aktualisieren Sie Dienstbindungen. networkservices.serviceBindings.update Netzwerkadministrator
Löschen Sie Dienstbindungen. networkservices.serviceBindings.delete Netzwerkadministrator

Berechtigungen für Service Directory-Dienste

Der Service Directory-Administrator muss dem Dienstkonto, das versucht, die Dienstbindung an den Service Directory-Dienst anzuhängen, die Berechtigung servicedirectory.services.bind erteilen. Dadurch kann das Dienstkonto einen Service Directory-Dienst verwenden, was bedeutet, dass das Konto auf einen Service Directory-Dienst in einer Dienstbindung verweisen kann.

Berechtigungen erzwingen

IAM-Berechtigungsprüfungen werden bei der Konfiguration von Cloud Service Mesh ausgeführt. Sie müssen die erforderlichen Berechtigungen haben, um Dienstbindungen zu erstellen und Dienstbindungen mit bestimmten Service Directory-Diensten zu verknüpfen. Wenn die richtigen Berechtigungen vorhanden sind, können Sie Ihre Mesh-Clients so konfigurieren, dass sie Traffic über einen Service Directory-Dienst ermitteln und an diesen senden.

Da diese Prüfungen bei der Konfiguration erfolgen, werden durch das Entfernen der Bindungsberechtigung für einen vorhandenen Service Directory-Dienst die Trafficflüsse nicht unterbrochen. Nachdem eine Dienstbindung eingerichtet wurde, hat das Entfernen einer Berechtigung keinen Einfluss darauf, ob ein Mesh-Client Traffic erfahren und an einen Service Directory-Dienst senden kann.

Wenn Sie die Kommunikation eines Mesh-Clients mit einem Service Directory-Dienst beenden möchten, können Sie andere Mechanismen verwenden:

  1. Beschränken Sie den Zugriff auf den Service Directory-Dienst. Sie können beispielsweise Firewallregeln verwenden.
  2. Löschen Sie den Service Directory-Dienst.
  3. Aktualisieren Sie Ihre Cloud Service Mesh-Konfiguration, indem Sie beispielsweise die Dienstbindung aus dem Backend-Dienst entfernen.

Best Practices

  • Obwohl Service Directory die Registrierung von Endpunkten mithilfe der Service Directory API ermöglicht, empfehlen wir die Verwendung von Integrationen, die sich automatisch bei Service Directory registrieren, wenn sie verfügbar sind. Weitere Informationen zu diesen Integrationen finden Sie unter Service Directory für GKE und Service Directory und Cloud Loadbalancing.
  • Wir empfehlen, denselben Namespace und denselben Dienst für einen bestimmten logischen Dienst zu verwenden, auch wenn dieser Dienst in verschiedenen Regionen bereitgestellt wird.

Service Directory für die Diensterkennung verwenden

Das folgende Diagramm bietet einen Überblick über den Endzustand dieses Einrichtungsverfahrens, einschließlich der Konfiguration, der Interaktion verschiedener Systeme und der Auflösung einer Anfrage an die Endpunkte eines Dienstes. In diesem Beispiel wird davon ausgegangen, dass Sie bereits einen Dienst bei Service Directory registriert haben.

Konfigurationsdetails für die Verwendung von Service Directory für die Diensterkennung.
Konfigurationsdetails für die Verwendung von Service Directory für die Diensterkennung (zum Vergrößern klicken)

Die Bereitstellung eines Service Directory-Dienstes für Cloud Service Mesh besteht aus den folgenden Schritten:

  1. Erstellen Sie einen neuen Backend-Dienst in Cloud Service Mesh. Erstellen Sie keine Backends für den Backend-Dienst.
  2. Erstellen Sie eine globale Dienstbindung für den Service Directory-Dienst.
  3. Binden Sie den Service Directory-Dienst an diesen Backend-Dienst. Legen Sie optional zusätzliche Felder und Richtlinien für den Backend-Dienst fest.

  4. Erstellen Sie eine neue Routingkonfiguration oder aktualisieren Sie eine vorhandene Konfiguration, damit Clientanfragen an den neuen Backend-Dienst weitergeleitet werden können.

Sie können keine Systemdiagnose für einen Backend-Dienst festlegen, der auf eine Dienstbindung verweist. Der Backend-Dienst darf keine Backends haben.

Integration erstellen

Folgen Sie der folgenden Anleitung, um Cloud Service Mesh in Service Directory zu integrieren.

Backend-Dienst erstellen

Folgen Sie der folgenden Anleitung, um einen Backend-Dienst in Ihrer Cloud Service Mesh-Bereitstellung zu erstellen.

  1. Erstellen Sie einen Backend-Dienst für die Verwendung mit Service Directory-Diensten.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Erstellen Sie eine Dienstbindung, die auf einen Service Directory-Dienst verweist.

    gcloud beta network-services service-bindings create my-sd-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service
    
  3. Binden Sie den Dienst an den Backend-Dienst.

    gcloud beta compute backend-services update td-sd-demo-service \
     --global \
     --service-bindings my-sd-binding
    

Nachdem Sie den Backend-Dienst erstellt und einen oder mehrere Service Directory-Dienste gebunden haben, beginnt Cloud Service Mesh, die Endpunkte zu erfassen, die dem Service Directory-Dienst zugeordnet sind. Die Endpunkte sind unterschiedliche IP-Port-Paare. Damit dieser Dienst routingfähig ist, müssen Sie das Routing konfigurieren.

Routing konfigurieren

Folgen Sie der Anleitung unten, um die Routingkonfiguration zu aktualisieren.

Service Routing APIs

Im folgenden Beispiel wird davon ausgegangen, dass Sie eine Mesh-Ressource namens sidecar- mesh haben. Sie erstellen eine HTTPRoute-Ressource mit den Hostnamen myservice.example.com und dem Ziel des Back-End-Dienstes td-sd-demo-service, den Sie im vorherigen Abschnitt erstellt haben.

  1. Erstellen Sie die Spezifikation HTTPRoute und speichern Sie sie in einer Datei mit dem Namen httproute.yaml.

    name: td-sd-demo-route
    hostnames:
    ‐ myservice.example.com
    meshes:
    ‐ projects/PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    ‐ action:
      destinations:
      ‐ serviceName: "projects/PROJECT_NUMBER/locations/global/backendServices/td-sd-demo-service"
    
  2. Importieren Sie die HTTPRoute-Spezifikation.

    gcloud network-services httproutes import td-sd-demo-route \
      --source=httproute.yaml \
      --location=global
    

Load Balancing APIs

Im folgenden Beispiel wird davon ausgegangen, dass Sie bereits eine einfache Routingkonfiguration haben, einschließlich einer URL-Zuordnung mit dem Namen my-url-map.

  • Zuerst erstellen Sie einen Pfad-Matcher für diese URL-Zuordnung. Der Pfad-Matcher ist unkompliziert. Wenn sie verwendet wird, wird sie in td-sd-demo-service aufgelöst, die Sie im vorherigen Schritt erstellt haben.
  • Als Nächstes fügen Sie eine Hostregel zur URL-Zuordnung hinzu. Diese Hostregel bewirkt, dass der Pfad-Matcher verwendet wird, wenn eine Anfrage den Hostnamen myservice.example.com angibt.
  1. Erstellen Sie einen einfachen Pfad-Matcher, der auf Ihren Backend-Dienst verweist.

    gcloud compute url-maps add-path-matcher my-url-map \
     --global \
     --default-service td-sd-demo-service \
     --path-matcher-name my-path-matcher
    
  2. Ordnen Sie den Backend-Dienst einer neuen Hostregel in der vorhandenen URL-Zuordnung zu.

    gcloud compute url-maps add-host-rule my-url-map \
     --global \
     --path-matcher-name=my-path-matcher \
     --hosts=myservice.example.com
    

Gleichen Dienst aus mehreren Regionen anhängen

Mit Cloud Service Mesh können Sie mehrere Service Directory-Dienste an denselben Backend-Dienst binden. Beispiel: Sie haben zwei Service Directory-Dienste, die jeweils identisch sind, aber Endpunkte in verschiedenen Google Cloud-Regionen oder -Zonen. Mit anderen Worten: Ein globaler Backend-Dienst könnte zwei globale Dienstbindungen haben, wobei eine auf einen Dienst in us-east1 und die andere auf einen Dienst in us-west1 verweist.

  1. Erstellen Sie einen Backend-Dienst für den importierten Service Directory-Dienst.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Erstellen Sie eine Dienstbindung an den Service Directory-Dienst in us-east1.

    gcloud beta network-services service-bindings create us-east1-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  3. Erstellen Sie eine Dienstbindung an den Service Directory-Dienst in us-west1.

    gcloud beta network-services service-bindings create us-west1-binding \
     --location global
     --service-directory-region us-west1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  4. Binden Sie die Dienste us-east1 und us-west1 an den Backend-Dienst.

    gcloud compute backend-services update td-sd-demo-service \
      --global \
      --service-bindings us-east1-binding,us-west1-binding
    

Erweiterte Richtlinien zur Trafficverwaltung anwenden

Im vorherigen Abschnitt haben Sie Cloud Service Mesh verwendet, um Routingrichtlinien für einen vorhandenen Service Directory-Dienst einzurichten. Sie können dieses Muster auf komplexere Szenarien der Trafficverwaltung anwenden.

Stellen Sie sich Folgendes vor: Sie haben einen vorhandenen Testdienst außerhalb des Cloud Service Mesh-Meshs. Der Testdienst ist ein Backend für einen internen Application Load Balancer. Sie möchten einen Teil des Produktionstraffics wiedergeben, der vom Cloud Service Mesh an diesen externen Dienst stammt. Cloud Service Mesh kann dies mit RequestMirrorPolicy tun, das Traffic an einen anderen Backend-Dienst senden kann, wenn die Anfrage verarbeitet wird. Dieser Vorgang wird auch als verdeckende Anfrage bezeichnet. Sie können damit Traffic untersuchen, ohne die Produktionsdienste zu beeinträchtigen.

Sie können Envoy-Clients aktivieren, um Traffic an einen Testdienst zu verdecken, indem Sie den Testdienstendpunkt manuell dem Cloud Service Mesh-Mesh hinzufügen oder daraus entfernen. Der Vorgang ist jedoch einfacher, wenn Sie die Service Directory-Einbindung verwenden.

Service Directory für die Diensterkennung mit Spiegelung verwenden
Service Directory für die Diensterkennung mit Spiegelung verwenden (zum Vergrößern klicken)

In diesem Beispiel beginnen Sie mit dem Verweis eines Backend-Dienstes auf die Service Directory-Registrierung für den Testdienst für Zahlungen. Anschließend fügen Sie dem Dienst in Cloud Service Mesh eine Anfragespiegelungsrichtlinie hinzu.

  1. Erstellen Sie einen Backend-Dienst für die Anfragespiegelungsrichtlinie.

    gcloud compute backend-services create payments-test-bes \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Erstellen Sie eine Dienstbindung, die auf einen Service Directory-Dienst verweist.

    gcloud beta network-services service-bindings create my-sd-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  3. Binden Sie den Service Directory-Dienst an den Test-Backend-Dienst.

    gcloud beta compute backend-services update payments-test-bes \
     --global \
     --service-bindings my-sd-binding
    
  4. Bearbeiten Sie die URL-Zuordnung, um Anfragen an den Testdienst zu spiegeln.

    gcloud compute url-maps edit my-url-map \
      --region=global
    
  5. Nachdem die Konfiguration der URL-Zuordnung in einen Editor geladen wurde, fügen Sie die Anfragespiegelungsrichtlinie hinzu, um Anfragen an den vorhandenen Service Directory-Dienst zu spiegeln.

    defaultService: my-project/global/default-service
       hostRules:
        - hosts:
          - '*'
          pathMatcher: path-matcher-one
       pathMatchers:
        - defaultService: my-project/global/default-service
         name: path-matcher-one
         pathRules:
          - paths:
            - /payments/
            service: my-project/global/default-service
            requestMirrorPolicy:
              backendService: myproject/global/payments-test-bes
    

Dienstbindung aus einem Backend-Dienst entfernen

Übergeben Sie eine neue Liste mit Dienstbindungen an den Befehl gcloud compute backend-services update, um eine Dienstbindung aus dem Backend-Dienst zu entfernen. Die neue Liste darf nicht die Dienstbindung enthalten, die Sie löschen möchten:

  • Geben Sie das Flag --no-service-bindings an, um alle Dienstbindungen zu entfernen.
  • So entfernen Sie eine oder mehrere Dienstbindungen: Übergeben Sie eine neue Liste der Dienstbindungen, in der die Dienstbindungen weggelassen werden, die Sie entfernen möchten, an das Flag --service-bindings.

Dienstbindungen hinzufügen oder entfernen

Der Befehl bind-service fügt eine Reihe von Dienstbindungen zu den vorhandenen Dienstbindungen für den Backend-Dienst hinzu.

gcloud compute backend-services bind-service BACKEND_SERVICE_NAME \
  --service-binding-name SERVICE_BINDING_URL \
  --global

Der Befehl unbind-service entfernt eine Dienstbindung aus der Gruppe der vorhandenen Dienstbindungen für den Backend-Dienst.

gcloud compute backend-services unbind-service BACKEND_SERVICE_NAME \
  --service-binding-name SERVICE_BINDING_URL \
  --global

Die Befehle bind-service und unbind-service sind Google Cloud CLI-Konstrukte. Es handelt sich nicht um Konstrukte auf API-Ebene.

Nächste Schritte