Configurer l'intégration avec l'Annuaire des services

Dans ce guide, nous partons du principe que vous disposez d'un déploiement Cloud Service Mesh en cours d'exécution et que vous avez enregistré au moins un service auprès de l'Annuaire des services. Les instructions de configuration s'appliquent que vous utilisiez Envoy ou gRPC sans proxy.

Pour utiliser l'annuaire des services et Cloud Service Mesh, la première étape consiste à publier votre service dans l'annuaire des services. Consultez les informations sur la publication d'un service dans l'Annuaire des services ou la documentation de l'Annuaire des services pour obtenir des informations générales.

Une fois le service enregistré dans l'Annuaire des services, vous créez une liaison de service à l'aide des ressources de l'API de Cloud Service Mesh. Vous créez un service de backend dédié à l'intégration à l'Annuaire des services, car un service de backend faisant référence à des liaisons de service ne peut pas comporter de backends ni de vérification d'état associée.

Exigences concernant les règles de transfert et d'hôte Cloud Service Mesh avec les API d'équilibrage de charge

Lorsque vous configurez Cloud Service Mesh pour l'utiliser avec l'Annuaire des services et que vous utilisez les anciennes API d'équilibrage de charge, suivez ces consignes:

  1. Assurez-vous que la règle de transfert Cloud Service Mesh utilise l'adresse IP virtuelle 0.0.0.0.
  2. Si vous disposez d'une zone privée, assurez-vous que la règle d'hôte dans le mappage d'URL correspond au nom DNS que l'Annuaire des services configure dans votre zone privée Cloud DNS.

Si vous ne suivez pas ces consignes, les requêtes sortantes de vos applications risquent d'échouer.

Définir le point de terminaison de l'API network-services

Avant de créer et d'utiliser un service de backend, assurez-vous que le point de terminaison de l'API network-services est défini de sorte que les ressources de liaison de service sous les ressources network-services soient correctement référencées. Définissez le point de terminaison de l'API network-services à l'aide de la commande suivante.

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

Exigences liées aux rôles et aux autorisations

Assurez-vous de disposer des autorisations et des rôles suivants avant de créer votre déploiement Cloud Service Mesh.

Autorisations et rôles de liaison de service

Cette section ne traite pas des autorisations Propriétaire, Éditeur et Lecteur au niveau du projet. Elle décrit les autorisations et les rôles requis pour créer, lire, mettre à jour et supprimer des ressources.

Action Autorisation Rôles
Créer une liaison de service networkservices.serviceBindings.create Administrateur réseau
Obtenir une liaison de service networkservices.serviceBindings.get Administrateur réseau, Lecteur de réseau
Répertorier les liaisons de service dans un projet Google Cloud networkservices.serviceBindings.list Administrateur réseau, Lecteur de réseau
Mettre à jour les liaisons de service networkservices.serviceBindings.update Administrateur réseau
Supprimer des liaisons de service networkservices.serviceBindings.delete Administrateur réseau

Autorisations de service de l'Annuaire des services

L'administrateur de l'Annuaire des services doit accorder l'autorisation servicedirectory.services.bind au compte de service qui tente d'associer la liaison de service au service. Cela permet au compte de service d'utiliser un service de l'Annuaire des services, ce qui signifie qu'il peut référencer un service de l'Annuaire des services dans une liaison de service.

Application des autorisations

Des vérifications d'autorisation IAM sont effectuées lorsque vous configurez Cloud Service Mesh. Vous devez disposer des autorisations requises pour créer des liaisons de service et pour associer des liaisons de services à des services de l'Annuaire des services particuliers. Si les autorisations appropriées sont en place, vous pouvez configurer vos clients de réseau maillé pour apprendre et envoyer le trafic à un service de l'Annuaire des services.

Comme ces vérifications ont lieu au moment de la configuration, la suppression de l'autorisation de liaison sur un service de l'Annuaire des services existant n'interrompt pas les flux de trafic. Une fois la liaison de service établie, la suppression d'une autorisation n'a aucune incidence sur la capacité d'un client de maillage à apprendre et à envoyer le trafic vers un service de l'Annuaire des services.

Pour empêcher un client du réseau maillé de communiquer avec un service de l'Annuaire des services, vous pouvez utiliser d'autres mécanismes :

  1. Limitez l'accès au service de l'Annuaire des services. Par exemple, vous pouvez utiliser des règles de pare-feu.
  2. Supprimez le service de l'Annuaire des services.
  3. Mettez à jour votre configuration Cloud Service Mesh, par exemple en supprimant la liaison de service du service de backend.

Bonnes pratiques

  • Bien que l'Annuaire des services permette d'enregistrer des points de terminaison à l'aide de l'API de l'Annuaire des services, nous vous recommandons d'utiliser des intégrations qui s'enregistrent automatiquement dans l'Annuaire des services lorsqu'elles sont disponibles. Pour en savoir plus sur ces intégrations, consultez les pages Présentation de l'annuaire des services pour GKE et Présentation de l'annuaire des services et de Cloud Load Balancing.
  • Nous vous recommandons d'utiliser le même espace de noms et le même service pour un service logique particulier, même lorsque ce service est déployé dans différentes régions.

Utiliser l'Annuaire des services pour la détection de services

Le schéma suivant présente l'état final de cette procédure d'installation, y compris la configuration, la manière dont les différents systèmes interagissent et la résolution des requêtes adressées aux points de terminaison d'un service. Dans cet exemple, nous partons du principe que vous disposez déjà d'un service enregistré auprès de l'Annuaire des services.

Détails de configuration pour l'utilisation de l'Annuaire des services pour la détection de services
Informations de configuration pour l'utilisation de l'Annuaire des services pour la détection de services (cliquez pour agrandir)

Pour rendre un service de l'Annuaire des services disponible sur Cloud Service Mesh, procédez comme suit :

  1. Créez un service de backend dans Cloud Service Mesh, mais ne créez pas de backends pour le service de backend.
  2. Créez une liaison de service globale pour le service de l'Annuaire des services.
  3. Liez le service de l'Annuaire des services à ce service de backend. (Facultatif) Définissez des champs et des règles supplémentaires sur le service de backend.

  4. Créez une configuration de routage ou mettez à jour une configuration existante afin que les requêtes des clients puissent être acheminées vers le nouveau service de backend.

Vous ne pouvez pas définir une vérification d'état sur un service de backend qui référence une liaison de service. Le service de backend ne peut pas non plus comporter de backends.

Créer l'intégration

Suivez les instructions ci-dessous pour intégrer Cloud Service Mesh à l'Annuaire des services.

Créer un service de backend

Utilisez les instructions suivantes pour créer un service de backend dans votre déploiement Cloud Service Mesh.

  1. Créez un service de backend à utiliser avec les services de l'Annuaire des services.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Créez une liaison de service faisant référence à un service de l'Annuaire des services.

    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. Liez le service au service de backend.

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

Une fois que vous avez créé le service de backend et lié un ou plusieurs services de l'annuaire des services, Cloud Service Mesh commence à suivre les points de terminaison associés au service de l'annuaire des services. Les points de terminaison sont des paires IP/port distinctes. Pour rendre ce service routable, vous devez configurer le routage.

Configurer le routage

Suivez les instructions ci-dessous pour mettre à jour votre configuration de routage.

API de routage de services

L'exemple suivant suppose que vous disposez d'une ressource Mesh appelée sidecar- mesh. Vous allez créer une ressource HTTPRoute avec des noms d'hôte définis sur myservice.example.com et une destination définie sur le service de backend td-sd-demo-service que vous avez créé à la section précédente.

  1. Créez la spécification HTTPRoute et enregistrez-la dans un fichier nommé 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. Importez la spécification HTTPRoute.

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

API d'équilibrage de charge

L'exemple suivant suppose que vous disposez déjà d'une configuration de routage de base, y compris un mappage d'URL appelé my-url-map.

  • Tout d'abord, vous créez un outil de mise en correspondance des chemins d'accès pour ce mappage d'URL. L'outil de mise en correspondance des chemins d'accès est simple. Lorsqu'il est utilisé, il renvoie td-sd-demo-service, que vous avez créé à l'étape précédente.
  • Vous allez ensuite ajouter une règle d'hôte au mappage d'URL. Cette règle d'hôte entraîne l'utilisation de l'outil de mise en correspondance des chemins d'accès si une requête spécifie le nom d'hôte myservice.example.com.
  1. Créez un outil de mise en correspondance des chemins d'accès simple qui pointe vers votre service de backend.

    gcloud compute url-maps add-path-matcher my-url-map \
     --global \
     --default-service td-sd-demo-service \
     --path-matcher-name my-path-matcher
    
  2. Mappez le service de backend avec une nouvelle règle d'hôte dans le mappage d'URL existant.

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

Associer le même service à partir de plusieurs régions

Cloud Service Mesh vous permet de lier plusieurs services de l'Annuaire des services au même service de backend. Par exemple, vous pouvez disposer de deux services de l'Annuaire des services, chacun identiques, mais avec des points de terminaison dans différentes régions ou zones Google Cloud. En d'autres termes, un service de backend global unique peut avoir deux liaisons de service globales, l'une pointant vers un service dans us-east1 et l'autre pointant vers un service dans us-west1.

  1. Créez un service de backend pour votre service de l'Annuaire des services importé.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Créez une liaison de service vers le service de l'Annuaire des services dans 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. Créez une liaison de service vers le service de l'Annuaire des services dans 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. Liez les services us-east1 et us-west1 au service de backend.

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

Appliquer des règles de gestion avancée du trafic

Dans la section précédente, vous avez utilisé Cloud Service Mesh pour configurer des règles de routage pour un service d'Annuaire des services existant. Vous pouvez appliquer ce modèle à des scénarios de gestion du trafic plus avancés.

Étudions le scénario suivant Vous disposez d'un service de test existant qui se trouve en dehors du maillage de services Cloud Service. Le service de test est le backend d'un équilibreur de charge d'application interne. Vous souhaitez relire une partie du trafic de production provenant du maillage de services Cloud Service Mesh vers ce service externe. Cloud Service Mesh peut le faire à l'aide de RequestMirrorPolicy, qui peut envoyer du trafic vers un autre service de backend lorsque la requête est traitée. Ce processus, également appelé ombrage d'une requête, permet d'examiner le trafic sans affecter vos services de production.

Vous pouvez autoriser les clients Envoy à bloquer le trafic vers un service de test en ajoutant ou en supprimant manuellement le point de terminaison du service de test dans le maillage de services Cloud Service Mesh. Cependant, le processus est plus simple lorsque vous utilisez l'intégration de l'Annuaire des services.

Utiliser l'Annuaire des services pour la détection de services avec mise en miroir
Utiliser l'Annuaire des services pour la détection de services avec mise en miroir(cliquez pour agrandir)

Dans cet exemple, vous commencez par pointer un service de backend vers l'enregistrement de l'Annuaire des services pour le service de test des paiements. Vous ajoutez ensuite une règle de mise en miroir des requêtes au service dans Cloud Service Mesh.

  1. Créez un service de backend pour la règle de mise en miroir des requêtes.

    gcloud compute backend-services create payments-test-bes \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Créez une liaison de service faisant référence à un service de l'Annuaire des services.

    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. Liez le service de l'Annuaire des services au service de backend de test.

    gcloud beta compute backend-services update payments-test-bes \
     --global \
     --service-bindings my-sd-binding
    
  4. Modifiez le mappage d'URL pour mettre en miroir les requêtes adressées au service de test.

    gcloud compute url-maps edit my-url-map \
      --region=global
    
  5. Une fois la configuration de mappage d'URL chargée dans un éditeur, ajoutez la règle de mise en miroir des requêtes pour mettre en miroir les requêtes adressées au service de l'Annuaire des services existant.

    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
    

Supprimer une liaison de service d'un service de backend

Pour supprimer une liaison de service du service de backend, transmettez une nouvelle liste de liaisons de service à la commande gcloud compute backend-services update. La nouvelle liste ne doit pas inclure la liaison de service que vous souhaitez supprimer :

  • Pour supprimer toutes les liaisons de service, définissez l'option --no-service-bindings.
  • Pour supprimer une ou plusieurs liaisons de service, transmettez une nouvelle liste de liaisons de service qui omet les liaisons de service que vous souhaitez supprimer à l'option --service-bindings.

Ajouter ou supprimer des liaisons de service

La commande bind-service ajoute une liaison de service à l'ensemble des liaisons de service existantes sur le service de backend.

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

La commande unbind-service supprime une liaison de service de l'ensemble de liaisons de service existantes sur le service de backend.

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

Les commandes bind-service et unbind-service sont des constructions de la Google Cloud CLI. Ce ne sont pas des constructions au niveau de l'API.

Étapes suivantes