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é auprès de l'Annuaire des services, vous pouvez créer une liaison de service à l'aide des ressources d'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 liées aux règles de transfert et aux règles d'hôte Cloud Service Mesh avec les API d'équilibrage de charge
Lorsque vous configurez Cloud Service Mesh pour une utilisation avec l'Annuaire des services et si vous utilisez les anciennes API d'équilibrage de charge, suivez ces consignes:
- Assurez-vous que la règle de transfert Cloud Service Mesh utilise l'adresse IP virtuelle (VIP)
0.0.0.0
. - 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 respectez pas ces consignes, les requêtes sortantes émises par 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
Les 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 :
- Limitez l'accès au service de l'Annuaire des services. Par exemple, vous pouvez utiliser des règles de pare-feu.
- Supprimez le service de l'Annuaire des services.
- Mettez à jour votre configuration Cloud Service Mesh, par exemple en supprimant le à partir 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.
La mise à disposition d'un service de l'Annuaire des services pour Cloud Service Mesh comprend les étapes suivantes.
- Créez un service de backend dans Cloud Service Mesh et ne créez pas de backends pour le service de backend.
- Créez une liaison de service globale pour le service de l'Annuaire des services.
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.
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
Suivez les instructions ci-dessous pour créer un service de backend dans votre déploiement de Cloud Service Mesh.
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
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
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 créez une ressource HTTPRoute
avec les noms d'hôte définis sur
myservice.example.com
et la destination définies sur le service de backend
td-sd-demo-service
que vous avez créé dans la section précédente.
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"
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
.
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
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
un service de backend personnalisé. Par exemple, vous pouvez avoir
deux services Annuaire des services,
tous identiques, mais avec des points de terminaison dans des régions ou zones Google Cloud différentes.
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
.
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
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 \
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 \
Liez les services
us-east1
etus-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 avec un service de l'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 en dehors du réseau maillé Cloud Service Mesh. Le service de test est un backend
un équilibreur de charge d'application interne. Vous voulez répéter une partie du trafic de production
provenant du maillage Cloud Service Mesh
vers ce service externe.
Cloud Service Mesh peut le faire à l'aide de RequestMirrorPolicy
, qui peut envoyer du trafic à 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 activer les clients Envoy pour bloquer le trafic vers un service de test en ajoutant ou en supprimant manuellement le point de terminaison du service de test au réseau maillé Cloud Service Mesh. Cependant, le processus est plus simple lorsque vous utilisez l'intégration de l'Annuaire des services.
Dans cet exemple, vous allez commencer par faire pointer un service de backend vers Enregistrement dans l'Annuaire des services pour le service de test des paiements Ajoutez ensuite une règle de mise en miroir des requêtes au service dans Cloud Service Mesh.
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
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 \
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
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
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 Google Cloud CLI. Ce ne sont pas des constructions au niveau de l'API.
Étape suivante
- Pour en savoir plus sur l'observabilité avec cette intégration, consultez la page Observabilité et débogage avec l'Annuaire des services.