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:
- Achten Sie darauf, dass die Cloud Service Mesh-Weiterleitungsregel die virtuelle IP-Adresse
0.0.0.0
(VIP) verwendet. - 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:
- Beschränken Sie den Zugriff auf den Service Directory-Dienst. Sie können beispielsweise Firewallregeln verwenden.
- Löschen Sie den Service Directory-Dienst.
- 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.
Die Bereitstellung eines Service Directory-Dienstes für Cloud Service Mesh besteht aus den folgenden Schritten:
- Erstellen Sie einen neuen Backend-Dienst in Cloud Service Mesh. Erstellen Sie keine Backends für den Backend-Dienst.
- Erstellen Sie eine globale Dienstbindung für den Service Directory-Dienst.
Binden Sie den Service Directory-Dienst an diesen Backend-Dienst. Legen Sie optional zusätzliche Felder und Richtlinien für den Backend-Dienst fest.
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.
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
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
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.
Erstellen Sie die Spezifikation
HTTPRoute
und speichern Sie sie in einer Datei mit dem Namenhttproute.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"
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.
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
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.
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
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 \
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 \
Binden Sie die Dienste
us-east1
undus-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.
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.
Erstellen Sie einen Backend-Dienst für die Anfragespiegelungsrichtlinie.
gcloud compute backend-services create payments-test-bes \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
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 \
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
Bearbeiten Sie die URL-Zuordnung, um Anfragen an den Testdienst zu spiegeln.
gcloud compute url-maps edit my-url-map \ --region=global
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
- Informationen zur Beobachtbarkeit mit dieser Integration finden Sie unter Beobachtbarkeit und Fehlerbehebung mit Service Directory.