Ce guide explique comment configurer Cloud Service Mesh géré sur un cluster Google Kubernetes Engine (GKE) Autopilot. Cloud Service Mesh est un maillage de services entièrement géré basé sur Istio.
Ce tutoriel explique comment configurer un maillage de services prêt pour la production et exécuté sur un seul cluster GKE Autopilot avec les paramètres par défaut. Nous vous recommandons également de consulter le guide de provisionnement complet de Cloud Service Mesh lorsque vous concevez votre environnement.
Avantages de l'exécution de Cloud Service Mesh géré avec GKE Autopilot
Lorsque vous utilisez GKE en mode Autopilot, Google gère automatiquement la configuration et la gestion de votre cluster. Le mode Autopilot simplifie l'expérience d'exploitation d'un cluster et vous permet de vous concentrer sur vos applications. De la même manière, Cloud Service Mesh géré est un maillage de services entièrement géré que vous pouvez provisionner en suivant quelques étapes.
- Vous provisionnez Cloud Service Mesh géré à l'aide de l'API Fleet, sans avoir besoin d'outils côté client tels que
istioctl
. - Cloud Service Mesh injecte automatiquement des proxys side-car dans les charges de travail sans qu'il soit nécessaire d'accorder des privilèges élevés à vos conteneurs.
- Vous pouvez afficher des tableaux de bord enrichis pour votre réseau maillé et vos services sans aucune configuration supplémentaire, puis utiliser ces métriques pour configurer des objectifs de niveau de service (SLO) et des alertes pour surveiller l'état de vos applications.
- Le plan de contrôle géré Cloud Service Mesh est mis à niveau automatiquement pour vous assurer que vous disposez des derniers correctifs et fonctionnalités de sécurité.
- Le plan de données géré de Cloud Service Mesh met automatiquement à niveau les proxys side-car dans vos charges de travail. Vous n'avez ainsi pas besoin de redémarrer les services vous-même lorsque des mises à niveau de proxy et des correctifs de sécurité sont disponibles.
- Cloud Service Mesh est un produit compatible et peut être configuré à l'aide des API Istio Open Source standards. Consultez la section Fonctionnalités compatibles.
Objectifs
- Créer un cluster GKE Autopilot
- Provisionner Cloud Service Mesh géré à l'aide de l'API Fleet
- Déployer des passerelles d'entrée de réseau maillé dans un espace de noms dédié
- Déployer un exemple d'application
- Configurer Cloud Service Mesh pour appliquer l'authentification TLS mutuelle stricte (mTLS) pour la communication de service à service
- Afficher les tableaux de bord Cloud Service Mesh et vérifier que les services se connectent avec mTLS
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
Les logiciels dont vous avez besoin pour ce tutoriel sont préinstallés sur Cloud Shell, y compris kubectl
, la gcloud CLI, Helm et Terraform. Si vous n'utilisez pas Cloud Shell, vous devez installer la gcloud CLI.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.containerAdmin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Configurer votre environnement
Vous pouvez configurer votre environnement à l'aide de gcloud CLI ou de Terraform.
gcloud
Définissez les variables d'environnement :
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
Activez l'API Mesh :
gcloud services enable mesh.googleapis.com
L'activation de mesh.googleapis.com active les API suivantes :
API Objectif Peut-être désactivé meshconfig.googleapis.com
Cloud Service Mesh utilise l'API Mesh Configuration pour relayer les données de configuration de votre réseau maillé vers Google Cloud. En outre, l'activation de l'API Mesh Configuration vous permet d'accéder aux pages Cloud Service Mesh dans la console Google Cloud et d'utiliser l'autorité de certification Cloud Service Mesh (Mesh CA). Non meshca.googleapis.com
Lié à l'autorité de certification Cloud Service Mesh utilisée par Cloud Service Mesh géré. Non container.googleapis.com
Obligatoire pour créer des clusters Google Kubernetes Engine (GKE). Non gkehub.googleapis.com
Obligatoire pour gérer le réseau maillé en tant que parc. Non monitoring.googleapis.com
Obligatoire pour capturer la télémétrie pour les charges de travail du réseau maillé. Non stackdriver.googleapis.com
Obligatoire pour utiliser l'interface utilisateur des services. Non opsconfigmonitoring.googleapis.com
Obligatoire pour utiliser l'interface utilisateur des services pour les clusters hors Google Cloud. Non connectgateway.googleapis.com
Obligatoire pour que le plan de contrôle Cloud Service Mesh géré puisse accéder aux charges de travail du réseau maillé. Oui* trafficdirector.googleapis.com
Active un plan de contrôle géré hautement disponible et évolutif. Oui* networkservices.googleapis.com
Active un plan de contrôle géré hautement disponible et évolutif. Oui* networksecurity.googleapis.com
Active un plan de contrôle géré hautement disponible et évolutif. Oui*
Terraform
gcloud config set project PROJECT_ID
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
export GOOGLE_CLOUD_PROJECT
Créer un cluster GKE
Créer un cluster GKE en mode Autopilot
gcloud
Créez un cluster enregistré en tant que membre d'un parc :
gcloud container clusters create-auto asm-cluster \ --location="us-central1" \ --enable-fleet
Vérifiez que le cluster est enregistré auprès du parc :
gcloud container fleet memberships list
Le résultat ressemble à ce qui suit :
NAME: asm-cluster EXTERNAL_ID: LOCATION: us-central1
Notez le nom d'appartenance, car vous en aurez besoin pour configurer Cloud Service Mesh.
Terraform
Pour créer un cluster GKE, vous pouvez utiliser la ressource google_container_cluster
. Vous définissez le bloc fleet
afin que le cluster soit ajouté à un parc lors de sa création.
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Provisionner Cloud Service Mesh géré
Vous provisionnez Cloud Service Mesh géré à l'aide de la fonctionnalité servicemesh
sur l'appartenance à un parc pour votre cluster.
gcloud
Activez la fonctionnalité de parc Cloud Service Mesh sur le projet :
gcloud container fleet mesh enable
Activez la gestion automatique du réseau maillé :
gcloud container fleet mesh update \ --management=automatic \ --memberships=MEMBERSHIP_NAME \ --location=us-central1
Remplacez
MEMBERSHIP_NAME
par le nom d'appartenance répertorié après avoir vérifié que votre cluster est enregistré dans le parc.
Terraform
Pour activer l'API de réseau maillé, vous pouvez utiliser la ressource google_project_service
.
Vous utilisez les ressources google_gke_hub_feature
et google_gke_hub_feature_membership
pour configurer Cloud Service Mesh géré sur votre cluster.
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Vérifier que le plan de contrôle est actif
Attendez que la valeur de controlPlaneManagement.state
soit ACTIVE
. Cela peut prendre jusqu'à 15 minutes.
watch -n 30 gcloud container fleet mesh describe
Le résultat est semblable à :
membershipSpecs:
projects/746296320118/locations/us-central1/memberships/asm-cluster:
mesh:
management: MANAGEMENT_AUTOMATIC
membershipStates:
projects/746296320118/locations/us-central1/memberships/asm-cluster:
servicemesh:
controlPlaneManagement:
details:
- code: REVISION_READY
details: 'Ready: asm-managed'
state: ACTIVE
dataPlaneManagement:
details:
- code: PROVISIONING
details: Service is provisioning.
state: PROVISIONING
state:
code: OK
description: 'Revision(s) ready for use: asm-managed.'
La section dataPlaneManagement
reste à l'état PROVISIONING
jusqu'à ce que vous déployiez la passerelle d'entrée, car les clusters Autopilot ne provisionnent aucun nœud tant que vous n'avez pas déployé une charge de travail.
Déployer une passerelle d'entrée de réseau maillé
Dans cette section, vous allez déployer une passerelle d'entrée de réseau maillé pour gérer le trafic entrant pour l'exemple d'application. Une passerelle d'entrée est un équilibreur de charge qui fonctionne à la périphérie du réseau maillé et reçoit des connexions HTTP/TCP entrantes ou sortantes.
Vous déployez la passerelle dans un espace de noms dédié et attribuez un libellé au déploiement pour vous assurer que votre passerelle peut être gérée de manière sécurisée et automatiquement mise à niveau par le plan de contrôle de Cloud Service Mesh.
Téléchargez les identifiants afin de pouvoir accéder au cluster :
gcloud container clusters get-credentials asm-cluster --location=us-central1
Créez un espace de noms pour la passerelle :
kubectl create namespace bank-gateways
Ajoutez un libellé à l'espace de noms afin que le plan de contrôle de Cloud Service Mesh injecte automatiquement la configuration de passerelle dans le déploiement.
kubectl label namespace bank-gateways istio-injection=enabled
Déployez la passerelle d'entrée dans l'espace de noms :
Helm
helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update helm install --wait --namespace bank-gateways \ --set resources.requests.cpu=250m \ --set resources.requests.memory=512Mi \ --set resources.requests.ephemeral-storage=1Gi \ --set resources.limits.cpu=250m \ --set resources.limits.memory=512Mi \ --set resources.limits.ephemeral-storage=1Gi \ istio-ingressgateway istio/gateway
kubectl
kubectl apply -n bank-gateways \ -k https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages/tree/main/samples/gateways/istio-ingressgateway kubectl -n bank-gateway wait "deployment/istio-ingressgateway" \ --for=condition=available --timeout=240s
Veillez à définir des demandes de ressources adéquates lorsque vous effectuez un déploiement dans un environnement de production. GKE Autopilot ne prend en compte que les valeurs de ressources définies dans
requests
et non danslimits
. Le projet Istio publie des informations sur les performances et l'évolutivité.
Déployer l'exemple d'application
Créez un espace de noms Kubernetes pour le déploiement :
kubectl create namespace bank-sample
Ajoutez un libellé à l'espace de noms afin que Cloud Service Mesh injecte automatiquement des proxys side-car dans les exemples de pods :
kubectl label namespace bank-sample istio-injection=enabled
Déployez l'exemple d'application :
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git kubectl apply -n bank-sample -f bank-of-anthos/extras/jwt/jwt-secret.yaml kubectl apply -n bank-sample -f bank-of-anthos/kubernetes-manifests/
Attendez que l'application soit prête. L'opération prend quelques minutes.
watch kubectl -n bank-sample get pods
Une fois l'application prête, le résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE accounts-db-0 2/2 Running 0 2m16s balancereader-5c695f78f5-x4wlz 2/2 Running 0 3m8s contacts-557fc79c5-5d7fg 2/2 Running 0 3m7s frontend-7dd589c5d7-b4cgq 2/2 Running 0 3m7s ledger-db-0 2/2 Running 0 3m6s ledgerwriter-6497f5cf9b-25c6x 2/2 Running 0 3m5s loadgenerator-57f6896fd6-lx5df 2/2 Running 0 3m5s transactionhistory-6c498965f-tl2sk 2/2 Running 0 3m4s userservice-95f44b65b-mlk2p 2/2 Running 0 3m4s
Créez les ressources Istio
Gateway
etVirtualService
pour exposer l'application derrière la passerelle d'entrée :kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
Obtenez un lien vers l'exemple d'application :
INGRESS_HOST=$(kubectl -n bank-gateways get service istio-ingressgateway \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "http://$INGRESS_HOST"
Dans un navigateur, suivez le lien pour ouvrir l'exemple d'application. Connectez-vous avec le nom d'utilisateur et le mot de passe par défaut pour afficher l'application.
Appliquer le protocole TLS mutuel
Assurez-vous que le mode TLS mutuel (mTLS) STRICT est activé. Appliquez une règle PeerAuthentication
par défaut pour le réseau maillé dans l'espace de noms istio-system.
Enregistrez le manifeste suivant sous le nom
mesh-peer-authn.yaml
:apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" namespace: "istio-system" spec: mtls: mode: STRICT
Appliquez le fichier manifeste au cluster :
kubectl apply -f mesh-peer-authn.yaml
Vous pouvez remplacer cette configuration en créant des ressources PeerAuthentication
dans des espaces de noms spécifiques.
Explorer les tableaux de bord Cloud Service Mesh
Dans la console Google Cloud, accédez à Cloud Service Mesh pour afficher les tableaux de bord de votre réseau maillé :
Sélectionnez le projet dans la liste déroulante de la barre de menu.
Vous voyez un tableau récapitulatif contenant tous les microservices de votre réseau maillé ainsi qu'une visualisation graphique des connexions entre les microservices. Pour chaque microservice, le tableau présente trois des signaux clés d'ingénierie SRE :
- Trafic - requêtes par seconde
- Taux d'erreur - un pourcentage
- Latence - millisecondes
Elles sont basées sur le trafic réel traité par les microservices. Le trafic de test constant est automatiquement envoyé au service
frontend
par un clientloadgenerator
déployé dans le cadre de l'exemple d'application. Cloud Service Mesh envoie automatiquement des métriques, des journaux et (éventuellement) des traces à Google Cloud Observability.Cliquez sur le service
frontend
dans le tableau pour afficher un tableau de bord de présentation du service. Des métriques supplémentaires s'affichent pour le service, ainsi qu'une visualisation des connexions entrantes et sortantes. Vous pouvez également créer un objet de niveau de service (SLO) pour la surveillance et les alertes sur le service.
Vérifier que mTLS est activé
Cliquez sur le lien de sécurité dans le panneau pour afficher une présentation de la sécurité du service frontend
.
Le tableau et la visualisation affichent une icône en forme de cadenas vert pour chacune des connexions entrantes et sortantes entre les microservices. Cette icône indique que la connexion utilise mTLS pour l'authentification et le chiffrement.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud, procédez comme suit :
Supprimer le projet
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Supprimer les ressources individuelles
Si vous avez utilisé un projet existant et que vous ne souhaitez pas le supprimer, supprimez les ressources individuelles.
gcloud
Supprimez l'exemple d'application et les passerelles :
kubectl delete namespace bank-sample kubectl delete namespace bank-gateways
Suivez les instructions pour désinstaller Cloud Service Mesh.
Supprimez le cluster GKE :
gcloud container clusters delete --region us-central1 asm-cluster --quiet
Terraform
Supprimez les ressources que vous avez créées avec Terraform :
terraform destroy
Étape suivante
- En savoir plus sur Cloud Service Mesh
- Explorer les tableaux de bord d'observabilité de Cloud Service Mesh
- Définir des objectifs de niveau de service (SLO) et envoyer des alertes en fonction des objectifs de niveau de service (SLO)
- Configurer les règles d'autorisation
- Découvrir les bonnes pratiques de sécurité pour les maillages de services.