Ce guide explique comment installer la version 1.8.6-asm.8 d'Anthos Service Mesh sur Anthos clusters on AWS.
Avec Anthos Service Mesh, la passerelle d'entrée Istio est préinstallée. Toutefois, si vous préférez utiliser un contrôleur d'entrée, vous pouvez utiliser Anthos Service Mesh pour configurer une ressource d'entrée Kubernetes. Ce guide vous explique comment installer Anthos Service Mesh et éventuellement configurer une ressource Ingress Kubernetes.
Avant de commencer
Avant de commencer l'installation d'Anthos Service Mesh, assurez-vous d'avoir effectué les tâches suivantes :
- Installez un service de gestion.
- Créez un cluster d'utilisateur.
- Configurez la mise en réseau AWS.
- Passez en revue les conditions et restrictions suivantes avant de commencer la configuration.
Exigences
Assurez-vous que le cluster d'utilisateur sur lequel vous installez Anthos Service Mesh dispose d'au moins quatre processeurs virtuels, 15 Go de mémoire et quatre nœuds.
Consultez la section Attribuer des noms aux ports du service avant de déployer des charges de travail.
Assurez-vous que la version de votre cluster est répertoriée dans la section Plateformes compatibles.
Restrictions
Un projet Google Cloud ne peut être associé qu'à un seul réseau maillé.
Configurer votre environnement
Vous devez disposer des outils suivants sur la machine à partir de laquelle vous souhaitez installer Anthos Service Mesh. Notez que vous ne pouvez installer Anthos Service Mesh que sur un cluster d'utilisateur, et non sur un cluster d'administrateur.
- Outil de ligne de commande
curl
- SDK Cloud (outil de ligne de commande
gcloud
)
Après avoir installé le SDK Cloud :
Authentifiez-vous avec le SDK Cloud :
gcloud auth login
Mettez à jour les composants :
gcloud components update
Installez
kubectl
:gcloud components install kubectl
Installez la version requise de
kpt
:curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
Basculez le contexte vers votre cluster d'utilisateur :
kubectl config use-context CLUSTER_NAME
Accordez des autorisations d'administrateur de cluster à votre compte utilisateur (votre adresse e-mail de connexion Google Cloud). Vous avez besoin de ces autorisations pour créer les règles de contrôle d'accès basé sur les rôles (RBAC) nécessaires pour Anthos Service Mesh :
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=USER_ACCOUNT
Télécharger le fichier d'installation
Linux
Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-linux-amd64.tar.gz
Téléchargez le fichier de signature et utilisez
openssl
pour valider la signature :curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig istio-1.8.6-asm.8-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
Le résultat attendu est
Verified OK
.Extrayez le contenu du fichier vers n'importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :
tar xzf istio-1.8.6-asm.8-linux-amd64.tar.gz
Cette commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé
istio-1.8.6-asm.8
, qui contient les éléments suivants :- Des exemples d'applications dans le répertoire
samples
- L'outil de ligne de commande
istioctl
que vous utilisez pour installer Anthos Service Mesh et qui se trouve dans le répertoirebin
- Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire
manifests/profiles
- Des exemples d'applications dans le répertoire
Assurez-vous d'être dans le répertoire racine de l'installation Anthos Service Mesh.
cd istio-1.8.6-asm.8
macOS
Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz
Téléchargez le fichier de signature et utilisez
openssl
pour valider la signature :curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.8.6-asm.8-osx.tar.gz.1.sig istio-1.8.6-asm.8-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
Le résultat attendu est
Verified OK
.Extrayez le contenu du fichier vers n'importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :
tar xzf istio-1.8.6-asm.8-osx.tar.gz
Cette commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé
istio-1.8.6-asm.8
, qui contient les éléments suivants :- Des exemples d'applications dans le répertoire
samples
- L'outil de ligne de commande
istioctl
que vous utilisez pour installer Anthos Service Mesh et qui se trouve dans le répertoirebin
- Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire
manifests/profiles
- Des exemples d'applications dans le répertoire
Assurez-vous d'être dans le répertoire racine de l'installation Anthos Service Mesh.
cd istio-1.8.6-asm.8
Windows
Téléchargez le fichier d'installation d'Anthos Service Mesh dans votre répertoire de travail actuel :
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip
Téléchargez le fichier de signature et utilisez
openssl
pour valider la signature :curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.8.6-asm.8-win.zip.1.sig openssl dgst -verify - -signature istio-1.8.6-asm.8-win.zip.1.sig istio-1.8.6-asm.8-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
Le résultat attendu est
Verified OK
.Extrayez le contenu du fichier vers n'importe quel emplacement de votre système de fichiers. Par exemple, pour extraire le contenu vers le répertoire de travail actuel :
tar xzf istio-1.8.6-asm.8-win.zip
Cette commande crée un répertoire d'installation dans votre répertoire de travail actuel, nommé
istio-1.8.6-asm.8
, qui contient les éléments suivants :- Des exemples d'applications dans le répertoire
samples
- L'outil de ligne de commande
istioctl
que vous utilisez pour installer Anthos Service Mesh et qui se trouve dans le répertoirebin
- Les profils de configuration d'Anthos Service Mesh qui se trouvent dans le répertoire
manifests/profiles
- Des exemples d'applications dans le répertoire
Assurez-vous d'être dans le répertoire racine de l'installation Anthos Service Mesh.
cd istio-1.8.6-asm.8
Installer Anthos Service Mesh
Cette section explique comment installer Anthos Service Mesh sur votre cluster d'utilisateur, ce qui active les fonctionnalités par défaut compatibles répertoriées sur la page Fonctionnalités compatibles du profil asm-multicloud
. Vous pouvez choisir d'activer l'entrée pour le sous-réseau public ou pour le sous-réseau privé.
Public
Si nécessaire, basculez vers le répertoire
istio-1.8.6-asm.8
. Le clientistioctl
dépend de la version. Veillez à utiliser la version dans le répertoireistio-1.8.6-asm.8/bin
.Exécutez la commande suivante pour installer Anthos Service Mesh. Si vous souhaitez activer une fonctionnalité facultative compatible, incluez
-f
et le nom de fichier YAML dans la ligne de commande suivante. Pour en savoir plus, consultez la page Activer les fonctionnalités facultatives.Installez Anthos Service Mesh :
bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-186-8
L'argument
--set revision
ajoute un libellé de révision au formatistio.io/rev=asm-186-8
àistiod
. Le libellé de révision est utilisé par le webhook d'injecteur side-car automatique pour associer les side-cars injectés à une révisionistiod
particulière. Pour activer l'injection automatique side-car pour un espace de noms, vous devez lui attribuer un libellé de révision correspondant au libellé deistiod
.Configurez le webhook de sorte qu'il puisse localiser le service
istiod
avec le libellé de révision :kubectl apply -f istiod-service.yaml
Cette commande crée une entrée de service qui permet au webhook de validation de vérifier automatiquement les configurations avant leur application.
Privé
Ci-dessous, vous ajoutez l'annotation service.beta.kubernetes.io/aws-load-balancer-internal
à tous les services créés par Anthos Service Mesh. Lorsque cette annotation est présente, Anthos clusters on AWS crée des services d'entrée privés.
Si nécessaire, basculez vers le répertoire
istio-1.8.6-asm.8
. Le clientistioctl
dépend de la version. Veillez à utiliser la version dans le répertoireistio-1.8.6-asm.8/bin
.Enregistrez le fichier YAML suivant dans un fichier appelé
istio-operator-internal-lb.yaml
:apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgateway
Exécutez la commande suivante pour installer Anthos Service Mesh. Si vous souhaitez activer une fonctionnalité facultative compatible, incluez
-f
et le nom de fichier YAML dans la ligne de commande suivante. Pour en savoir plus, consultez la page Activer les fonctionnalités facultatives.bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-186-8 \ -f istio-operator-internal-lb.yaml
L'argument
--set revision
ajoute un libellé de révision au formatistio.io/rev=asm-186-8
àistiod
. Le libellé de révision est utilisé par le webhook d'injecteur side-car automatique pour associer les side-cars injectés à une révisionistiod
particulière. Pour activer l'injection automatique side-car pour un espace de noms, vous devez lui attribuer un libellé de révision correspondant au libellé deistiod
.Configurez le webhook de sorte qu'il puisse localiser le service
istiod
avec le libellé de révision :kubectl apply -f istiod-service.yaml
Cette commande crée une entrée de service qui permet au webhook de validation de vérifier automatiquement les configurations avant leur application.
Vérifier les composants du plan de contrôle
Vérifiez que les pods du plan de contrôle dans istio-system
sont opérationnels :
kubectl get pod -n istio-system
Le résultat attendu ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE istio-ingressgateway-74cc894bfd-786rg 1/1 Running 0 7m19s istiod-78cdbbbdb-d7tps 1/1 Running 0 7m36s promsd-576b8db4d6-lqf64 2/2 Running 1 7m19s
Vous avez installé le plan de contrôle Anthos Service Mesh avec la passerelle d'entrée préinstallée. Si vous avez uniquement besoin d'une fonctionnalité d'entrée mise en œuvre par un contrôleur d'entrée, vous êtes prêt à installer des applications sur votre cluster. Consultez la section Créer un exemple de déploiement, qui montre comment configurer une ressource d'entrée.
Si vous souhaitez bénéficier de toutes les fonctionnalités fournies par Anthos Service Mesh, passez à la phase suivante de l'installation pour injecter des proxys side-car et redémarrer vos charges de travail.
Injecter des proxys side-car
Anthos Service Mesh utilise des proxys side-car pour améliorer la sécurité, la fiabilité et l'observabilité du réseau. Avec Anthos Service Mesh, ces fonctions sont extraites du conteneur principal de l'application et mises en œuvre dans un proxy commun hors processus fourni par un conteneur séparé dans le même pod.
L'installation n'est terminée qu'une fois que vous avez activé l'injection automatique du proxy side-car (injection automatique) et que vous avez redémarré les pods de toutes les charges de travail exécutées sur votre cluster avant d'avoir installé Anthos Service Mesh.
Pour activer l'injection automatique, vous devez étiqueter vos espaces de noms avec le même libellé de révision que vous avez défini sur istiod
lors de l'installation d'Anthos Service Mesh. Le libellé de révision est utilisé par le webhook d'injecteur side-car pour associer les side-cars injectés à une révision istiod
particulière. Après avoir ajouté le libellé, tous les pods existants dans l'espace de noms doivent être redémarrés pour que les side-cars soient injectés.
Avant de déployer de nouvelles charges de travail dans un espace de noms que vous venez de créer, veillez à configurer l'injection automatique afin qu'Anthos Service Mesh puisse surveiller et sécuriser le trafic.
Pour activer l'injection automatique, procédez comme suit :
Exécutez la commande suivante pour localiser le libellé de révision sur
istiod
:kubectl -n istio-system get pods -l app=istiod --show-labels
La sortie ressemble à ceci :
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-186-8-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-186-8,istio=istiod,pod-template-hash=5788d57586 istiod-asm-186-8-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-186-8,istio=istiod,pod-template-hash=5788d57586
Dans le résultat, sous la colonne
LABELS
, notez la valeur du libellé de révisionistiod
, qui suit le préfixeistio.io/rev=
. Dans cet exemple, la valeur estasm-186-8
.Appliquez le libellé de révision et supprimez le libellé
istio-injection
s'il existe. Dans la commande suivante,NAMESPACE
est le nom de l'espace de noms dans lequel vous souhaitez activer l'injection automatique, etREVISION
est le libellé de révision noté à l'étape précédente.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Vous pouvez ignorer le message
"istio-injection not found"
dans le résultat. Cela signifie que l'espace de noms ne portait pas précédemment le libelléistio-injection
, auquel on s'attend dans de nouvelles installations d'Anthos Service Mesh ou de nouveaux déploiements. Étant donné que l'injection automatique échoue si un espace de noms possède à la fois leistio-injection
et le libellé de révision, toutes les commandeskubectl label
de la documentation Anthos Service Mesh incluent la suppression du libelléistio-injection
.Si les charges de travail étaient en cours d'exécution sur votre cluster avant d'installer Anthos Service Mesh, redémarrez les pods pour déclencher une réinjection.
La méthode de redémarrage des pods dépend de votre application et de l'environnement dans lequel se trouve le cluster. Par exemple, dans votre environnement de préproduction, vous pouvez simplement supprimer tous les pods, ce qui entraîne leur redémarrage. Toutefois, dans votre environnement de production, vous pouvez peut-être mettre en œuvre un déploiement bleu-vert afin de pouvoir redémarrer des pods en toute sécurité pour éviter l'interruption du trafic.
Vous pouvez exécuter
kubectl
pour effectuer un redémarrage progressif :kubectl rollout restart deployment -n NAMESPACE
Vérifiez que vos pods sont configurés pour pointer vers la nouvelle version de
istiod
.kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
Accéder à la passerelle d'entrée
Anthos Service Mesh fournit une passerelle d'entrée préconfigurée (istio-ingressgateway
) qui vous permet de gérer le trafic entrant vers les applications exécutées sur votre maillage de services. Pour rendre des applications accessibles depuis l'extérieur de votre cluster (par exemple, à partir d'un navigateur) :
Vous devez obtenir l'adresse IP externe ou le nom d'hôte et le port de l'équilibreur de charge externe que
istio-ingressgateway
est configuré pour utiliser.Votre application doit définir une passerelle et une ressource VirtualService, semblable à la méthode
frontend-gateway.yaml
de l'exemple d'application Boutique en ligne.
Pour obtenir l'adresse externe de istio-ingressgateway
, procédez comme suit :
Créez la variable d'environnement
INGRESS_HOST
:export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Créez la variable d'environnement
INGRESS_PORT
:export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
À des fins de test, déployez un exemple d'application, tel que Boutique en ligne.
Pour accéder à l'application sur votre navigateur, utilisez la valeur
$INGRESS_HOST:$INGRESS_PORT
dans l'URL.
Dépannage
Dans Anthos clusters on AWS, les sous-réseaux qui contiennent des points de terminaison d'équilibreur de charge doivent disposer d'un tag. Le service ajoute automatiquement un tag à tous les sous-réseaux spécifiés dans le champ spec.Networking.ServiceLoadBalancerSubnetIDs
de la ressource AWSCluster
.
Si vous souhaitez ajouter des sous-réseaux supplémentaires à votre cluster d'utilisateur ou que vous devez réappliquer des tags à des sous-réseaux existants, procédez comme suit :
À partir de votre répertoire
anthos-aws
, utilisezanthos-gke
pour basculer vers le contexte de votre service de gestion.cd anthos-aws anthos-gke aws management get-credentials
Obtenez l'ID du VPC AWS de votre cluster avec
kubectl
et stockez-le en tant que variable.export VPC_ID=$(\ env HTTP_PROXY=http://localhost:8118 \ kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
Vérifiez le contenu des variables avec
echo
. La sortie ressemble à ceci :vpc-12345678abcdef0
.echo $VPC_ID
Enregistrez votre ID de cluster dans une variable d'environnement.
export CLUSTER_ID=$(\ env HTTP_PROXY=http://localhost:8118 \ kubectl get awscluster cluster-0 -o jsonpath='{.status.clusterID}')
Vous pouvez vérifier la variable avec
echo
:echo $CLUSTER_ID
La réponse inclut l'ID de votre cluster.
gke-12345678
Si vous avez installé des clusters Anthos sur AWS dans un VPC dédié, vous pouvez utiliser l'outil de ligne de commande
aws
pour récupérer l'ID de sous-réseau.Sélectionnez l'une des options suivantes :
- "Public", si vous souhaitez exposer des services sur votre sous-réseau public
- "Privé", si vous souhaitez exposer des services sur votre sous-réseau privé
"Plusieurs sous-réseaux", si vous souhaitez exposer des services sur plusieurs sous-réseaux
Public
export SUBNET_ID=$(aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \ --query "Subnets[*].SubnetId" \ --output text)
Le résultat est un objet qui contient l'ID de votre sous-réseau. Il ressemble à
subnet-1234abcdefg
. Vous pouvez vérifier la variable avececho
:echo $SUBNET_ID
La réponse inclut votre ID de sous-réseau.
subnet-012345678abcdef
Privé
export SUBNET_ID=$(aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text)
Le résultat est un objet qui contient l'ID de votre sous-réseau. Il ressemble à
subnet-1234abcdefg
. Vous pouvez vérifier la variable avececho
:echo $SUBNET_ID
La réponse inclut votre ID de sous-réseau.
subnet-012345678abcdef
Plusieurs sous-réseaux
Si vous utilisez plusieurs sous-réseaux pour vos ressources AWSNodePool (par exemple, si vous utilisez plusieurs zones de disponibilité), vous devez ajouter individuellement des tags à vos ID de sous-réseau.
Récupérez la liste de vos ID de sous-réseau à l'aide de
aws ec2 describe-subnets
.Pour obtenir la liste de tous les sous-réseaux publics, exécutez la commande suivante :
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \ --query "Subnets[*].SubnetId" \ --output text
Pour obtenir la liste de tous les sous-réseaux privés, exécutez la commande suivante :
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text
La réponse inclut les ID de vos sous-réseaux.
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
Ajoutez à votre sous-réseau un tag correspondant à votre ID de cluster. Si vous avez plusieurs sous-réseaux, sélectionnez "Plusieurs sous-réseaux".
Sous-réseau unique
aws ec2 create-tags \ --resources $SUBNET_ID \ --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
Plusieurs sous-réseaux
Pour chacun de vos sous-réseaux, exécutez la commande suivante :
aws ec2 create-tags \ --resources subnet-ids \ --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
Remplacez subnet-ids par la liste de vos ID de sous-réseau, séparés par des espaces. Exemple :
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
.
Étape suivante
Créez un exemple de déploiement sur des clusters Anthos sur AWS.