Configurer des pods Google Kubernetes Engine avec injection Envoy automatique
Présentation
Dans un maillage de services, le code de votre application n'a pas besoin de connaître la configuration de votre réseau. Pour communiquer, vos applications utilisent à la place un plan de données configuré par un plan de contrôle, lequel gère la mise en réseau du service. Dans ce guide, Cloud Service Mesh est votre plan de contrôle, et les proxys side-car Envoy sont votre plan de données.
L'injecteur de side-car Envoy facilite l'ajout de proxys side-car Envoy à vos pods Google Kubernetes Engine. Lorsque l'injecteur de side-car Envoy ajoute un proxy, il configure également ce proxy pour gérer le trafic des applications et se connecter à Cloud Service Mesh pour la configuration.
Ce guide vous explique comment configurer facilement Cloud Service Mesh avec Google Kubernetes Engine. Ces étapes constituent la base que vous pouvez étendre à des cas d'utilisation avancés, tels qu'un maillage de services couvrant plusieurs clusters Google Kubernetes Engine et, éventuellement, des VM Compute Engine. Vous pouvez également suivre ces instructions si vous configurez Cloud Service Mesh avec un VPC partagé.
Le processus de configuration implique les étapes suivantes :
- Créer un cluster GKE pour vos charges de travail
- Installer l'injecteur side-car Envoy et activer l'injection
- Déployer un exemple de client et valider l'injection
- Déployer un service Kubernetes à des fins de test
- Configurer Cloud Service Mesh avec des composants Cloud Load Balancing pour acheminer le trafic vers le service de test
- Valider la configuration en envoyant une requête de l'exemple de client au service de test
Prérequis
Avant de suivre les instructions de ce guide, assurez-vous de remplir les conditions préalables les tâches décrites dans Préparez-vous à la configuration sur des API de routage de services avec Envoy et des charges de travail sans proxy.
Pour en savoir plus sur la version d'Envoy compatible, consultez les Notes de version de Cloud Service Mesh
.Autres prérequis pour le VPC partagé
Si vous configurez Cloud Service Mesh dans un environnement VPC partagé, vérifiez les points suivants.
- Vous disposez des autorisations et des rôles appropriés pour le VPC partagé.
- Vous avez configuré les projets et la facturation appropriés.
- Vous avez activé la facturation dans les projets.
- Vous avez activé les API Cloud Service Mesh et GKE dans chaque projet, y compris le projet hôte.
- Vous avez configuré les comptes de service appropriés pour chaque projet.
- Vous avez créé un réseau et des sous-réseaux VPC.
- Vous avez activé le VPC partagé.
Pour en savoir plus, consultez la section VPC partagé.
Configurer les rôles IAM
Cet exemple de configuration des rôles IAM suppose que l'hôte d'un VPC partagé contient deux sous-réseaux, et deux sous-réseaux dans le VPC partagé.
Dans Cloud Shell, créez un dossier de travail (
WORKDIR)
dans lequel vous allez créer les fichiers associés à la présente section :mkdir -p ~/td-shared-vpc cd ~/td-shared-vpc export WORKDIR=$(pwd)
Configurez les autorisations IAM dans le projet hôte afin que les projets de service puissent utiliser les ressources du VPC partagé.
Dans cette étape, vous allez configurer les autorisations IAM de sorte que
subnet-1
soit accessible par le projet de service 1 etsubnet-2
par le projet de service 2. Vous attribuez le paramètre Rôle IAM d'utilisateur de réseau Compute (roles/compute.networkUser
) aux instances de VM Compute Engine compte de service par défaut et le compte de service de l'API Google Cloud projet de service pour chaque sous-réseau.Pour le projet de service 1, configurez les autorisations IAM de
subnet-1
:export SUBNET_1_ETAG=$(gcloud beta compute networks subnets get-iam-policy subnet-1 --project ${HOST_PROJECT} --region ${REGION_1} --format=json | jq -r '.etag') cat > subnet-1-policy.yaml <<EOF bindings: - members: - serviceAccount:${SVC_PROJECT_1_API_SA} - serviceAccount:${SVC_PROJECT_1_GKE_SA} role: roles/compute.networkUser etag: ${SUBNET_1_ETAG} EOF gcloud beta compute networks subnets set-iam-policy subnet-1 \ subnet-1-policy.yaml \ --project ${HOST_PROJECT} \ --region ${REGION_1}
Pour le projet de service 2, configurez les autorisations IAM de
subnet-2
:export SUBNET_2_ETAG=$(gcloud beta compute networks subnets get-iam-policy subnet-2 --project ${HOST_PROJECT} --region ${REGION_2} --format=json | jq -r '.etag') cat > subnet-2-policy.yaml <<EOF bindings: - members: - serviceAccount:${SVC_PROJECT_2_API_SA} - serviceAccount:${SVC_PROJECT_2_GKE_SA} role: roles/compute.networkUser etag: ${SUBNET_2_ETAG} EOF gcloud beta compute networks subnets set-iam-policy subnet-2 \ subnet-2-policy.yaml \ --project ${HOST_PROJECT} \ --region ${REGION_2}
Pour chaque projet de service, vous devez accorder Rôle IAM d'utilisateur de l'agent de service hôte Kubernetes Engine (
roles/container.hostServiceAgentUser
) vers le cluster GKE compte de service dans le projet hôte:gcloud projects add-iam-policy-binding ${HOST_PROJECT} \ --member serviceAccount:${SVC_PROJECT_1_GKE_SA} \ --role roles/container.hostServiceAgentUser gcloud projects add-iam-policy-binding ${HOST_PROJECT} \ --member serviceAccount:${SVC_PROJECT_2_GKE_SA} \ --role roles/container.hostServiceAgentUser
Ce rôle permet au compte de service GKE du projet de service d'utiliser le compte de service GKE du projet hôte pour configurer des ressources réseau partagées.
Pour chaque projet de service, attribuez le service Compute Engine par défaut compte le Rôle IAM "Lecteur de réseau Compute" (
roles/compute.networkViewer
) dans le projet hôte.gcloud projects add-iam-policy-binding ${SVC_PROJECT_1} \ --member serviceAccount:${SVC_PROJECT_1_COMPUTE_SA} \ --role roles/compute.networkViewer gcloud projects add-iam-policy-binding ${SVC_PROJECT_2} \ --member serviceAccount:${SVC_PROJECT_2_COMPUTE_SA} \ --role roles/compute.networkViewer
Lorsque le proxy side-car Envoy se connecte au xDS (API Traffic Director), le proxy utilise le compte de service ou l'hôte de machine virtuelle (VM) Compute Engine Instance de nœud GKE. Le compte de service doit disposer de l'autorisation IAM
compute.globalForwardingRules.get
au niveau du projet. Le rôle "Lecteur de réseau Compute" est suffisant pour cette étape.
Créer un cluster GKE pour vos charges de travail
Les clusters GKE doivent répondre aux exigences suivantes Cloud Service Mesh:
- La compatibilité avec les groupes de points de terminaison du réseau doit être activée. Pour en savoir plus et obtenir des exemples, reportez-vous à la section Groupes de points de terminaison du réseau autonomes.
- Le compte de service de vos nœuds/pods GKE doit avoir l'autorisation d'accéder à l'API Traffic Director. Pour en savoir plus sur les autorisations requises, consultez la section Autoriser le compte de service à accéder à l'API Traffic Director.
Créer le cluster GKE
Créez un cluster GKE appelé traffic-director-cluster
dans la zone de votre choix, par exemple us-central1-a
.
gcloud container clusters create traffic-director-cluster \ --zone ZONE \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --enable-ip-alias
Faire pointer kubectl vers le cluster que vous venez de créer
Remplacez le contexte actuel de kubectl
par le nouveau cluster en exécutant la commande suivante :
gcloud container clusters get-credentials traffic-director-cluster \ --zone ZONE
Installer l'injecteur de side-car Envoy
Les sections suivantes fournissent des instructions concernant l'installation de l'injecteur side-car Envoy. Lorsque l'injecteur de side-car est activé, il déploie automatiquement les proxys side-car pour les charges de travail nouvelles et existantes de Google Kubernetes Engine. Étant donné que l'injecteur de side-car Envoy s'exécute dans votre cluster GKE, vous devez l'installer une fois sur chaque cluster si vous utilisez Cloud Service Mesh pour prendre en charge un maillage de services multiclusters.
Télécharger l'injecteur de side-car
Téléchargez et extrayez l'injecteur de side-car Envoy.
wget https://storage.googleapis.com/traffic-director/td-sidecar-injector-xdsv3.tgz tar -xzvf td-sidecar-injector-xdsv3.tgz cd td-sidecar-injector-xdsv3
Configurer l'injecteur de side-car
Si vous utilisez les anciennes API, configurez l'injecteur side-car en modifiant le fichier specs/01-configmap.yaml
de la manière suivante :
- Dans
TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
, remplacezYOUR_PROJECT_NUMBER_HERE
par le numéro de votre projet. Le numéro de projet est un identifiant numérique de votre projet. Pour en savoir plus sur l'obtention de la liste de tous vos projets, consultez la section Identifier des projets. - Renseignez
TRAFFICDIRECTOR_NETWORK_NAME
en remplaçantYOUR_NETWORK_NAME_HERE
par le nom du réseau cloud privé virtuel Google Cloud que vous souhaitez utiliser avec Cloud Service Mesh. Notez ce nom de réseau VPC, car vous en aurez besoin plus tard lorsque vous configurerez Cloud Service Mesh.
Si vous utilisez les nouvelles API de routage de service, actuellement en version bêta :
- Dans
TRAFFICDIRECTOR_MESH_NAME
, remplacez "" par le nom du maillage de services pour obtenir la configuration d'un maillage de services.- Notez que si vous configurez un
Gateway
, vous n'utilisez pas l'injecteur side-car. Vous déployez un proxy Envoy en tant que pod.
- Notez que si vous configurez un
Ce fichier pourrait par exemple ressembler à ceci :
$ cat specs/01-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: istio namespace: istio-system data: mesh: |- defaultConfig: discoveryAddress: trafficdirector.googleapis.com:443 # Envoy proxy port to listen on for the admin interface. proxyAdminPort: 15000 proxyMetadata: # Google Cloud Project number where Cloud Service Mesh resources are configured. # This is a numeric identifier of your project (e.g. "111222333444"). # You can get a list of all your projects with their corresponding numbers by # using "gcloud projects list" command or looking it up under "Project info" # section of your Google Cloud console. # If left empty, configuration will be attempted to be fetched for the Google Cloud # project associated with service credentials. # Leaving empty is not recommended as it is not guaranteed to work in future # releases. TRAFFICDIRECTOR_GCP_PROJECT_NUMBER: "YOUR_PROJECT_NUMBER_HERE" # Google Cloud VPC network name for which the configuration is requested (This is the VPC # network name referenced in the forwarding rule in Google Cloud API). If left empty, # configuration will be attempted to be fetched for the VPC network over which # the request to Cloud Service Mesh (trafficdirector.googleapis.com) is sent out. # Leaving empty is not recommended as it is not guaranteed to work in future # releases. TRAFFICDIRECTOR_NETWORK_NAME: "default"
Vous pouvez également activer la journalisation et le traçage pour chaque proxy injecté automatiquement. Pour en savoir plus sur ces configurations, consultez la section Configurer des attributs supplémentaires pour les proxys side-car.
Lorsque vous utilisez l'injecteur side-car, la valeur de TRAFFICDIRECTOR_ACCESS_LOG_PATH
ne peut être définie que sur un fichier du répertoire /etc/envoy/
. Par exemple, le répertoire /etc/envoy/access.log
est un emplacement valide.
Notez que TRAFFICDIRECTOR_INTERCEPTION_PORT
ne doit pas être configuré dans ce fichier ConfigMap
, car il est déjà configuré par l'injecteur de side-car.
Installer l'injecteur de side-car sur votre cluster GKE
Déployez l'injecteur de side-car.
kubectl apply -f specs/
Vérifiez que l'injecteur de side-car est en cours d'exécution.
kubectl get pods -A | grep istiod
Cette commande renvoie un résultat semblable à celui-ci :
istio-system istiod-6b475bfdf9-79965 1/1 Running 0 11s
Ouvrir le port requis sur un cluster privé
Si vous suivez les instructions fournies dans Configurer la sécurité du service Cloud Service Mesh avec Envoy, vous pouvez ignorer cette section et passer à la suivante, Activer l'injection side-car
Si vous installez l'injecteur de side-car Envoy sur un cluster privé, vous devez ouvrir le port TCP 9443 dans la règle de pare-feu vers le ou les nœuds maîtres pour que le webhook fonctionne correctement.
Les étapes suivantes décrivent comment mettre à jour la règle de pare-feu requise. Notez que la commande update
remplace la règle de pare-feu existante. Vous devez donc vous assurer d'inclure les ports par défaut 443 (HTTPS
) et 10250 (kubelet
), ainsi que le nouveau port que vous souhaitez ouvrir.
Recherchez la plage source (
master-ipv4-cidr
) du cluster. Dans la commande suivante, remplacezCLUSTER_NAME
par le nom de votre cluster, par exempletraffic-director-cluster
:FIREWALL_RULE_NAME=$(gcloud compute firewall-rules list \ --filter="name~gke-CLUSTER_NAME-[0-9a-z]*-master" \ --format="value(name)")
Mettez à jour la règle de pare-feu pour ouvrir le port TCP 9443 afin d'activer l'injection automatique :
gcloud compute firewall-rules update ${FIREWALL_RULE_NAME} \ --allow tcp:10250,tcp:443,tcp:9443
Activer l'injection de side-car
La commande suivante active l'injection pour l'espace de noms default
. L'injecteur de side-car injecte des conteneurs side-car dans les pods créés sous cet espace de noms :
kubectl label namespace default istio-injection=enabled
Vous pouvez vérifier que l'espace de noms default
est correctement activé en exécutant la commande suivante :
kubectl get namespace -L istio-injection
Cette opération devrait renvoyer les valeurs ci-dessous :
NAME STATUS AGE ISTIO-INJECTION default Active 7d16h enabled istio-system Active 7d15h
Si vous configurez la sécurité du service pour Cloud Service Mesh avec Envoy, revenez à la section Configurer un service de test du guide de configuration.
Déployer un exemple de client et valider l'injection
Cette section explique comment déployer un exemple de pod exécutant Busybox, qui fournit une interface simple permettant d'accéder à un service de test. Dans un déploiement réel, vous déploieriez votre propre application cliente.
kubectl create -f demo/client_sample.yaml
Le pod Busybox se compose de deux conteneurs. Le premier conteneur est le client basé sur l'image Busybox et le second est le proxy Envoy injecté par l'injecteur de side-car. Exécutez la commande suivante pour obtenir plus d'informations sur le pod :
kubectl describe pods -l run=client
Cette opération devrait renvoyer les valeurs ci-dessous :
… Init Containers: # Istio-init sets up traffic interception for the pod. Istio-init: … Containers: # busybox is the client container that runs application code. busybox: … # Envoy is the container that runs the injected Envoy proxy. envoy: …
Déployer un service Kubernetes à des fins de test
Les sections suivantes fournissent des instructions permettant de configurer un service de test que vous utiliserez ultérieurement dans ce guide pour valider votre configuration de bout en bout.
Configurer des services GKE avec des NEG
Les services GKE doivent être exposés via des groupes de points de terminaison du réseau (NEG) afin que vous puissiez les configurer en tant que backends d'un service de backend Cloud Service Mesh. Ajoutez l'annotation NEG à votre spécification de service Kubernetes et choisissez un nom (en remplaçant NEG-NAME
dans l'exemple ci-dessous) afin de pouvoir la retrouver facilement par la suite. Vous avez besoin du nom lorsque vous associez le NEG à votre service de backend Cloud Service Mesh. Pour en savoir plus sur l'annotation de NEG, consultez la section Nommer les NEG.
... metadata: annotations: cloud.google.com/neg: '{"exposed_ports": {"80":{"name": "service-test-neg"}}}' spec: ports: - port: 80 name: service-test protocol: TCP targetPort: 8000
Cette annotation crée un NEG autonome contenant des points de terminaison correspondant aux adresses IP et aux ports des pods du service. Pour en savoir plus et obtenir des exemples, reportez-vous à la section Groupes de points de terminaison du réseau autonomes.
L'exemple de service suivant inclut l'annotation NEG. Le service diffuse le nom d'hôte via HTTP sur le port 80
. Exécutez la commande suivante pour obtenir le service et le déployer sur votre cluster GKE.
wget -q -O - \ https://storage.googleapis.com/traffic-director/demo/trafficdirector_service_sample.yaml \ | kubectl apply -f -
Vérifiez que le nouveau service est créé et que le pod de l'application est en cours d'exécution :
kubectl get svc
La sortie devrait ressembler à ce qui suit :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service-test ClusterIP 10.71.9.71 none 80/TCP 41m [..skip..]
Vérifiez que le pod de l'application associé à ce service est en cours d'exécution :
kubectl get pods
NAME READY STATUS RESTARTS AGE app1-6db459dcb9-zvfg2 2/2 Running 0 6m busybox-5dcf86f4c7-jvvdd 2/2 Running 0 10m [..skip..]
Enregistrer le nom du NEG
Recherchez le NEG créé à partir de l'exemple ci-dessus et notez son nom pour l'utiliser dans la configuration de Cloud Service Mesh dans la section suivante.
gcloud compute network-endpoint-groups list
Cela renvoie le résultat suivant :
NAME LOCATION ENDPOINT_TYPE SIZE service-test-neg ZONE GCE_VM_IP_PORT 1
Enregistrez le nom du NEG dans la variable NEG_NAME :
NEG_NAME=$(gcloud compute network-endpoint-groups list \ | grep service-test | awk '{print $1}')
Configurer Cloud Service Mesh avec les composants Cloud Load Balancing
Cette section configure Cloud Service Mesh à l'aide des ressources d'équilibrage de charge de Compute Engine. Cela permet au proxy side-car de l'exemple de client de recevoir à partir de Cloud Service Mesh. Les requêtes sortantes de l'exemple de client sont gérées par le proxy side-car et acheminées vers le service de test.
Vous devez configurer les composants suivants :
- Une vérification de l'état Pour en savoir plus sur les vérifications d'état, consultez les pages Concepts de la vérification d'état et Créer des vérifications d'état.
- Un service de backend Pour en savoir plus sur les services de backend, consultez la page Services de backend.
- Une carte des règles de routage. Cela inclut la création d'une règle de transfert, d'un proxy HTTP cible et d'un mappage d'URL. Pour en savoir plus, consultez les pages Utiliser des règles de transfert pour Cloud Service Mesh, Utiliser des proxys cibles pour Cloud Service Mesh et Utiliser des mappages d'URL.
Créer la vérification d'état et la règle de pare-feu
Suivez les instructions ci-dessous pour créer une vérification de l'état et la règle de pare-feu requis pour les vérifications de l'état. Pour en savoir plus, consultez la section Règles de pare-feu pour les vérifications d'état.
Console
- Accédez à la page "Vérifications d'état" dans Google Cloud Console.
Accéder à la page "Vérifications d'état" - Cliquez sur Créer une vérification d'état.
- Dans le champ du nom, saisissez
td-gke-health-check
. - Comme protocole, sélectionnez HTTP.
Cliquez sur Créer.
Accédez à la page Stratégies de pare-feu de la console Google Cloud.
Accéder à la page "Stratégies de pare-feu"Cliquez sur Créer des règles de pare-feu.
Sur la page Créer une règle de pare-feu, fournissez les informations suivantes :
- Nom : attribuez un nom à la règle. Pour cet exemple, utilisez
fw-allow-health-checks
. - Réseau : choisissez un réseau VPC.
- Priorité : saisissez un numéro pour la priorité. Plus la valeur est faible, plus la priorité est élevée. Assurez-vous que la règle de pare-feu a une priorité plus élevée que les autres règles susceptibles de refuser le trafic entrant.
- Sens du trafic : choisissez Entrée.
- Action en cas de correspondance: sélectionnez Autoriser.
- Cibles : sélectionnez Toutes les instances du réseau.
- Filtre source: sélectionnez le type de plage d'adresses IP approprié.
- Plages d'adresses IP sources :
35.191.0.0/16,130.211.0.0/22
- Filtre de destination : sélectionnez le type d'adresse IP.
- Protocoles et ports : cliquez sur Ports et protocoles spécifiés, puis cochez
tcp
. TCP est le protocole sous-jacent de tous les protocoles de vérification d'état. - Cliquez sur Create (Créer).
- Nom : attribuez un nom à la règle. Pour cet exemple, utilisez
gcloud
Créez la vérification de l'état.
gcloud compute health-checks create http td-gke-health-check \ --use-serving-port
Créez la règle de pare-feu pour autoriser les plages d'adresses IP du vérificateur d'état.
gcloud compute firewall-rules create fw-allow-health-checks \ --action ALLOW \ --direction INGRESS \ --source-ranges 35.191.0.0/16,130.211.0.0/22 \ --rules tcp
Créer un service de backend
Créez un service de backend global avec un schéma d'équilibrage de charge INTERNAL_SELF_MANAGED
. Dans la console Google Cloud, le schéma d'équilibrage de charge est défini implicitement. Ajoutez la vérification d'état au service de backend.
Console
Accédez à la page Cloud Service Mesh de la console Google Cloud.
Dans l'onglet Services, cliquez sur Créer un service.
Cliquez sur Continuer.
Pour le nom du service, saisissez
td-gke-service
.Sélectionnez Network (Réseau), que vous avez configuré dans le ConfigMap Cloud Service Mesh.
Sous Type de backend, sélectionnez Groupes de points de terminaison du réseau.
Sélectionnez le groupe de points de terminaison du réseau que vous avez créé.
Définissez le Nombre maximal de RPS sur
5
.Définissez le mode d'équilibrage sur Fréquence.
Cliquez sur OK.
Sous Vérification d'état, sélectionnez
td-gke-health-check
, qui est la vérification d'état que vous avez créée.Cliquez sur Continuer.
gcloud
Créez le service de backend et associez la vérification d'état au service de backend.
gcloud compute backend-services create td-gke-service \ --global \ --health-checks td-gke-health-check \ --load-balancing-scheme INTERNAL_SELF_MANAGED
Ajoutez le NEG créé précédemment en tant que backend au service de backend. Si vous configurez Cloud Service Mesh avec un proxy TCP cible, doit utiliser le mode d'équilibrage
UTILIZATION
. Si vous utilisez un proxy cible HTTP ou HTTPS, vous pouvez utiliser le modeRATE
.gcloud compute backend-services add-backend td-gke-service \ --global \ --network-endpoint-group ${NEG_NAME} \ --network-endpoint-group-zone ZONE \ --balancing-mode [RATE | UTILIZATION] \ --max-rate-per-endpoint 5
Créer la carte des règles de routage
La carte des règles de routage définit la manière dont Cloud Service Mesh achemine le trafic dans votre maillage. Dans le cadre de la carte des règles de routage, vous configurez une adresse IP virtuelle et un ensemble de règles de gestion du trafic associées, comme par exemple le routage basé sur l'hôte. Lorsqu'une application envoie une requête à l'adresse IP virtuelle, le proxy side-car Envoy associé effectue les opérations suivantes :
- intercepte la requête ;
- l'évalue en fonction des règles de gestion du trafic dans le mappage d'URL ;
- sélectionne un service de backend en fonction du nom d'hôte spécifié dans la requête ;
- choisit un backend ou un point de terminaison associé au service de backend sélectionné ;
- envoie le trafic vers ce backend ou point de terminaison.
Console
Dans la console, le proxy cible est associé à la règle de transfert. Lorsque vous créez la règle de transfert, Google Cloud crée automatiquement un proxy HTTP cible et l'associe au mappage d'URL.
La règle de routage comprend la règle de transfert ainsi que les règles d'hôte et de chemin d'accès (également appelées mappage d'URL).
Accédez à la page Cloud Service Mesh de la console Google Cloud.
Cliquez sur Cartes des règles de routage.
Cliquez sur Créer une règle de routage.
Saisissez
td-gke-url-map
dans le champ Nom du mappage d'URL.Cliquez sur Ajouter une règle de transfert.
Pour le nom de la règle de transfert, saisissez
td-gke-forwarding-rule
.Sélectionnez votre réseau.
Sélectionnez votre adresse IP interne.
Cliquez sur Enregistrer.
Vous pouvez également ajouter des règles personnalisées d'hôte et de chemin d'accès ou conserver les règles de chemin d'accès par défaut.
Définissez l'hôte sur
service-test
.Cliquez sur Enregistrer.
gcloud
Créez un mappage d'URL qui utilise
td-gke-service
comme service de backend par défaut.gcloud compute url-maps create td-gke-url-map \ --default-service td-gke-service
Créez un outil de mise en correspondance des chemins d'accès de mappage d'URL ainsi qu'une règle d'hôte pour acheminer le trafic de votre service en fonction du nom d'hôte et du chemin d'accès. Cet exemple utilise
service-test
comme nom de service avec un outil de mise en correspondance des chemins d'accès par défaut qui correspond à toutes les requêtes de chemin pour cet hôte (/*
).gcloud compute url-maps add-path-matcher td-gke-url-map \ --default-service td-gke-service \ --path-matcher-name td-gke-path-matcher gcloud compute url-maps add-host-rule td-gke-url-map \ --hosts service-test \ --path-matcher-name td-gke-path-matcher
Créez le proxy HTTP cible.
gcloud compute target-http-proxies create td-gke-proxy \ --url-map td-gke-url-map
Créez la règle de transfert.
gcloud compute forwarding-rules create td-gke-forwarding-rule \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --address=0.0.0.0 \ --target-http-proxy=td-gke-proxy \ --ports 80 --network default
À ce stade, Cloud Service Mesh configure
vos proxys side-car pour router
les requêtes spécifiant le nom d'hôte service-test
aux backends de
td-gke-service
Dans ce cas, ces backends sont des points de terminaison dans le groupe de points de terminaison du réseau associé au service de test Kubernetes que vous avez déployé précédemment.
Vérifier la configuration
Cette section explique comment vérifier que le trafic envoyé depuis l'exemple de client Busybox est acheminé vers votre service Kubernetes service-test
. Pour envoyer une requête de test, vous pouvez accéder à une interface système sur l'un des conteneurs et exécuter la commande de vérification suivante. Un pod service-test
doit renvoyer le nom d'hôte du pod de diffusion.
# Get the name of the pod running Busybox. BUSYBOX_POD=$(kubectl get po -l run=client -o=jsonpath='{.items[0].metadata.name}') # Command to execute that tests connectivity to the service service-test at # the VIP 10.0.0.1. Because 0.0.0.0 is configured in the forwarding rule, this # can be any VIP. TEST_CMD="wget -q -O - 10.0.0.1; echo" # Execute the test command on the pod. kubectl exec -it $BUSYBOX_POD -c busybox -- /bin/sh -c "$TEST_CMD"
Voici comment la configuration est vérifiée :
- L'exemple de client a envoyé une requête spécifiant le nom d'hôte
service-test
. - L'exemple de client dispose d'un proxy side-car Envoy injecté par l'injecteur side-car Envoy.
- Le proxy side-car a intercepté la requête.
- À l'aide du mappage d'URL, Envoy a mis en correspondance le nom d'hôte
service-test
et le service Cloud Service Meshtd-gke-service
. - Envoy a choisi un point de terminaison dans le groupe de points de terminaison du réseau associé à
td-gke-service
. - Envoy a envoyé la requête à un pod associé au service Kubernetes
service-test
.
Étape suivante
- En savoir plus sur la gestion avancée du trafic.
- Découvrez la sécurité du service Cloud Service Mesh.
- Découvrez comment configurer l'observabilité avec Envoy.
- Découvrez comment résoudre les problèmes de déploiement de Cloud Service Mesh.
- Découvrez les options de configuration de pod Google Kubernetes Engine avec injection Envoy automatique.