Vous consultez la documentation d'Anthos Service Mesh 1.7. Accédez à la documentation la plus récente ou sélectionnez une autre version disponible :

Installer sur Anthos clusters on AWS

Ce guide explique comment effectuer une installation nettoyée de la version d'Anthos Service Mesh 1.7.6-asm.1 sur les clusters Anthos sur VMware.

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 :

Exigences

  • Assurez-vous que le cluster d'utilisateur sur lequel vous installez Anthos Service Mesh dispose d'au moins quatre processeurs virtuels, de 15 Go de mémoire et de quatre instances dupliquées.

  • 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 Environnements 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 :

  1. Authentifiez-vous avec le SDK Cloud :

    gcloud auth login
    
  2. Mettez à jour les composants :

    gcloud components update
    
  3. Installez kubectl :

    gcloud components install kubectl
    
  4. Si vous souhaitez déployer et tester votre installation avec l'exemple d'application Boutique en ligne, installez kpt :

    gcloud components install kpt
    
  5. Basculez le contexte vers votre cluster d'utilisateur :

    kubectl config use-context CLUSTER_NAME
  6. 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

  1. 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.7.6-asm.1-linux-amd64.tar.gz
  2. 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.7.6-asm.1-linux-amd64.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.7.6-asm.1-linux-amd64.tar.gz.1.sig istio-1.7.6-asm.1-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    La sortie attendue est Verified OK.

  3. 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.7.6-asm.1-linux-amd64.tar.gz

    La commande crée un répertoire d'installation dans votre répertoire de travail actuel nommé istio-1.7.6-asm.1. Le répertoire istio-1.7.6-asm.1/bin contient l'outil de ligne de commande istioctl que vous utilisez pour installer Anthos Service Mesh.

  4. Assurez-vous d'être dans le répertoire racine de l'installation Anthos Service Mesh.

    cd istio-1.7.6-asm.1
  5. Pour plus de commodité, ajoutez le répertoire /bin à votre PATH :

    export PATH=$PWD/bin:$PATH

Créer l'espace de noms istio-system

Créez un espace de noms appelé istio-system pour les composants du plan de contrôle :

kubectl create namespace istio-system

Configurer le webhook de validation

Lorsque vous installez Anthos Service Mesh, vous définissez un libellé de révision sur istiod. Vous devez définir la même révision sur le webhook de validation.

Enregistrez le fichier YAML suivant dans un fichier appelé istiod-service.yaml :

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-176-1
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-176-1

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

  1. Installez Anthos Service Mesh :

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-176-1
    

    L'argument --set revision ajoute un libellé de révision au format istio.io/rev=asm-176-1 à 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évision istiod 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é de istiod.

  2. 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.

  1. 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"
    
  2. Installez Anthos Service Mesh :

    istioctl install \
     --set profile=asm-multicloud \
     --set revision=asm-176-1 \
     -f istio-operator-internal-lb.yaml
    

    L'argument --set revision ajoute un libellé de révision au format istio.io/rev=asm-176-1 à 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évision istiod 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é de istiod.

  3. 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.

Effectuer l'installation sans Prometheus et Kiali

Par défaut dans Anthos Service Mesh 1.7 et versions antérieures, Anthos Service Mesh installe Prometheus et Kiali à partir de leurs dépôts de packages d'origine sur docker.io et quay.io. Si vous ne souhaitez pas installer ces outils ou autoriser les connexions à ces dépôts, transmettez -set addonComponents.prometheus.enabled=false et --set addonComponents.kiali.enabled=false à istioctl install. Par exemple, utilisez la commande suivante pour exclure Prometheus et Kiali de l'installation de sous-réseau public.

  istioctl install \
    --set profile=asm-multicloud \
    --set addonComponents.prometheus.enabled=false \
    --set addonComponents.kiali.enabled=false \
    --revision=asm-176-1

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

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. Pour injecter vos pods avec le proxy side-car, configurez l'injection automatique du proxy side-car (injection automatique) en étiquetant 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.

  • Vous devez activer l'injection automatique sur tous les espaces de noms avec des charges de travail qui étaient exécutées sur votre cluster avant l'installation d'Anthos Service Mesh.

  • Avant de déployer des charges de travail, assurez-vous de 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 :

  1. 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-176-1-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-176-1,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-176-1-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-176-1,istio=istiod,pod-template-hash=5788d57586

    Dans le résultat, sous la colonne LABELS, notez la valeur du libellé de révision istiod, qui suit le préfixe istio.io/rev=. Dans cet exemple, la valeur est asm-176-1.

  2. 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, et REVISION 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 le istio-injection et le libellé de révision, toutes les commandes kubectl label de la documentation Anthos Service Mesh incluent la suppression du libellé istio-injection.

  3. 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
    
  4. 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 :

  1. 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}')
    
  2. 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}')
    
  3. À des fins de test, déployez un exemple d'application, tel que Boutique en ligne.

  4. 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 :

  1. À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre service de gestion.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. 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}')
    
  3. Vérifiez le contenu des variables avec echo. La sortie ressemble à ceci : vpc-12345678abcdef0.

    echo $VPC_ID
    
  4. 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
    
  5. Par défaut, Anthos clusters on AWS configure un VPC avec des sous-réseaux privés et publics. Pour récupérer l'ID de sous-réseau, utilisez l'outil de ligne de commande aws.

    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 avec echo :

    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 avec echo :

    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
    
  6. 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.