Initiation à Istio

Familiarisez-vous avec le module complémentaire géré Istio dans IBM Cloud® Kubernetes Service. Dans cet ensemble d'étapes, vous déployez le modèle d'application BookInfo pour expérimenter l'utilisation de plusieurs fonctionnalités du maillage de services d'Istio.

Avant de commencer, consultez le journal des modifications du module complémentaire Istio pour obtenir des informations sur la version.

Etape 1 : Activation du module complémentaire Istio

Configurez le module complémentaire géré Istio dans votre cluster.

Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  1. Activez l'additif istio.

    ibmcloud ks cluster addon enable istio --cluster CLUSTER_NAME_OR_ID
    
  2. Vérifiez que le statut du module complémentaire géré Istio est Addon Ready. Notez qu'il peut se passer plusieurs minutes avant que le module complémentaire ne soit prêt.

    ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID
    

    Exemple de sortie

    Name            Version     Health State   Health Status
    istio           1.29       normal         Addon Ready
    
  3. Vous pouvez également examiner les composants individuels du module complémentaire pour vérifier que les pods Istio sont déployés.

    kubectl get pods -n istio-system
    
    kubectl get svc -n istio-system
    

Pour plus d'informations sur Istio dans IBM Cloud Kubernetes Service, voir A propos du module complémentaire Istio géré.

Etape 2 : Configuration du modèle d'application BookInfo

Le modèle d'application BookInfo comprend une configuration IStio de base pour vous permettre d'expérimenter les fonctionnalités d'Istio immédiatement.

Les quatre microservices de l'application BookInfo comprennent :

  • productpage appelle les microservices details et reviews pour alimenter la page.
  • details contient les informations sur l'ouvrage.
  • ratings contient les informations de classement du livre qui accompagnent une critique de livre.
  • reviews contient les critiques du livre et appelle le microservice ratings. Le microservice reviews comporte plusieurs versions :
    • v1 n'appelle pas le microservice ratings.
    • v2 appelle le microservice ratings et affiche le classement sous forme d'étoiles noires de 1 à 5.
    • v3 appelle le microservice ratings et affiche le classement sous forme d'étoiles rouges de 1 à 5.

L'application BookInfo est déjà exposée sur une adresse IP publique par une passerelle Istio. Pour découvrir l'architecture d' BookInfo, consultez la documentation relative à l' Istio.

  1. Installez BookInfo dans votre cluster.

    1. Téléchargez le package Istio le plus récent, qui comprend les fichiers de configuration pour l'application BookInfo.
        curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.29.5 sh -
        ```
    2. Accédez au répertoire du package Istio.
    ```sh {: pre}
        cd istio-1.29.5
        ```
    3. Utilisateurs Linux et macOS : ajoutez le client `istioctl` à votre variable système `PATH`.
    ```sh {: pre}
        export PATH=$PWD/bin:$PATH
        ```
    4. Etiquetez l'espace de noms `default` pour l'injection automatique de composant sidecar. Tous les nouveaux pods qui sont déployés sur `default` sont maintenant créés automatiquement avec des conteneurs de proxy sidecar Envoy.
    ```sh {: pre}
        kubectl label namespace default istio-injection=enabled
        ```
    5. Déployez l'application, la passerelle et les règles de destination BookInfo.
    ```sh {: pre}
        kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
        kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
        kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
        ```
    6. Vérifiez que le statut des pods des microservices de l'application BookInfo est `Running`.
    ```sh {: pre}
        kubectl get pods
        ```
        ```sh {: screen}
        NAME                                     READY     STATUS      RESTARTS   AGE
        details-v1-6865b9b99d-7v9h8              2/2       Running     0          2m
        productpage-v1-f8c8fb8-tbsz9             2/2       Running     0          2m
        ratings-v1-77f657f55d-png6j              2/2       Running     0          2m
        reviews-v1-6b7f6db5c5-fdmbq              2/2       Running     0          2m
        reviews-v2-7ff5966b99-zflkv              2/2       Running     0          2m
        reviews-v3-5df889bcff-nlmjp              2/2       Running     0          2m
        ```
    
  2. Procurez-vous l'adresse publique de l'équilibreur de charge istio-ingressgateway qui expose l'application BookInfo.

    • Clusters classiques
      1. Définissez l'adresse IP Ingress Istio en tant que variable d'environnement.
        export INGRESS_IP=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
        
      2. Définissez le port Ingress Istio en tant que variable d'environnement.
        export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
        
      3. Créez une variable d'environnement GATEWAY_URL qui utilise l'hôte et le port Ingress Istio.
        export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT
        
    • Clusters VPC : créez une variable d'environnement GATEWAY_URL qui utilise le nom d'hôte Ingress Istio.
        export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
        ```
    
  3. Exécutez la commande curl sur la variable GATEWAY_URL pour vérifier que l'application BookInfo est en cours d'exécution. Une réponse 200 indique que l'application BookInfo s'exécute correctement avec Istio.

    curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
    
  4. Affichez la page Web BookInfo dans un navigateur.

    Mac OS ou Linux

    open http://$GATEWAY_URL/productpage
    

    Windows

    start http://$GATEWAY_URL/productpage
    
  5. Essayez d'actualiser la page plusieurs fois. Les différentes versions du microservice reviews affichent à tour de rôle aucune étoile (v1 de reviews), des étoiles noires (v2) et des étoiles rouges (v3).

Pour plus d'informations sur le fonctionnement du routage dans Istio, voir Comprendre ce qu'il s'est passé.

Etape 3 : Simulation d'un déploiement en plusieurs phases de BookInfo

Pour simuler la publication d'une application, vous pouvez passer par un déploiement en plusieurs phases de la version v3 du microservice reviews de BookInfo.

Après avoir fini de tester votre application et lorsque vous êtes prêt à commencer à diriger du trafic réel vers l'application, vous pouvez effectuer des déploiements progressifs via Istio. Par exemple, vous pouvez d'abord publier la version v3 à 10 % des utilisateurs, puis à 20 % des utilisateurs, et ainsi de suite.

  1. Configurez un service virtuel pour distribuer 0 % du trafic à v1, 90 % du trafic à v2 et 10 % du trafic à v3 de reviews.

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
      - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v1
          weight: 0
        - destination:
            host: reviews
            subset: v2
          weight: 90
        - destination:
            host: reviews
            subset: v3
          weight: 10
    
    kubectl apply -f <filename>.yaml
    
  2. Consultez la page Web BookInfo en exécutant open http://$GATEWAY_URL/productpage sur Mac OS ou Linux ou en exécutant start http://$GATEWAY_URL/productpage sur Windows.

  3. Essayez d'actualiser la page plusieurs fois. Notez que la page sans étoiles (v1) n'est plus affichée et que la majorité des actualisations de page affichent les étoiles noires (v2). Il est rare que la page avec des étoiles rouges (v3) s'affiche.

  4. Modifiez la répartition du trafic pour que tout le trafic soit envoyé uniquement à v3. Notez que dans la réalité, vous pouvez progressivement déployer vos modifications de version en faisant d'abord passer la répartition du trafic à 80:20, ensuite à 70:30, et ainsi de suite, jusqu'à ce que tout le trafic soit acheminé à la dernière version.

    1. Editez le fichier de configuration correspondant au service virtuel reviews.
        kubectl edit VirtualService reviews
        ```
    2. Remplacez la valeur `weight` du paramètre `v2` par `0` et la valeur `weight` du paramètre `v3` par `100`.
    3. Sauvegardez et fermez le fichier.
    
    
  5. Essayez d'actualiser plusieurs fois la page de BookInfo. Notez que la page avec des étoiles noires (v2) ne s'affiche plus et que seule la page avec des étoiles rouges (v3) est affichée.

  6. Si vous avez activé les journaux d'accès : vérifiez qu'au moment où vous avez modifié le fichier YAML pour les vérifications VirtualService, aucun journal n'existe pour les demandes adressées à v2.

    kubectl logs -l app=reviews,version=v2 -c istio-proxy
    

Etape 4 : Surveillance de l'application BookInfo avec IBM Cloud Monitoring

Utilisez l'un des tableaux de bord prédéfinis d' Monitoring Istio pour surveiller vos microservices BookInfo.

Pour déployer des agents de surveillance sur votre cluster, procédez comme suit.

  1. Mettez à disposition une instance de IBM Cloud Monitoring.

  2. Configurez un agent de surveillance dans votre cluster.

  3. Dans la console de surveillance, cliquez sur Ouvrir le tableau de bord pour l'instance que vous avez provisionnée.

  4. Dans l'interface utilisateur de Monitoring, cliquez sur Add new dashboard.

  5. Recherchez et Istio sélectionnez l'un des tableaux de bord prédéfinis d' Istio, disponibles à l'adresse Monitoring.

Pour plus d’informations sur la consultation des métriques et des tableaux de bord, la surveillance des composants internes d’ Istio, ainsi que la surveillance des déploiements A/B et des déploiements canary d’ Istio, consultez l’article de blog Comment surveiller Istio consacré au service mesh d’ Kubernetes.

Etape 5 : Sécurisation du trafic au sein d'un cluster en activant mTLS

Activez le chiffrement pour les charges de travail d'un espace de noms afin d'obtenir l'authentification TLS mutuelle (mTLS) dans le cluster. Le trafic qui est routé par Envoy entre les pods dans le cluster est chiffré avec TLS. La gestion de certificats pour mTLS est traitée par Istio. Pour plus d'informations, voir la documentation Istio mutuelle TLS.

  1. Créez un fichier de règles d'authentification nommé default.yaml. Cette règle porte sur l'espace de noms et configure toutes les charges de travail du maillage de services pour accepter uniquement les demandes chiffrées avec TLS. Notez qu'aucune spécification targets n'est incluse car la règle s'applique à tous les services du maillage dans cet espace de noms.
    apiVersion: "security.istio.io/v1beta1"
    kind: "PeerAuthentication"
    metadata:
      name: "default"
    spec:
      mtls:
        mode: STRICT
    
  2. Appliquez la règle d'authentification à un espace de noms.
    kubectl apply -f default.yaml -n NAMESPACE
    
  3. Créez un fichier de règles de destination nommé destination-mtls.yaml. Cette règle configure les charges de travail du maillage de services dans un espace de noms pour envoyer du trafic à l'aide de TLS. Notez que le caractère générique host: *.local applique ce fichier de destination à tous les services dans le maillage.
    apiVersion: "networking.istio.io/v1beta1"
    kind: "DestinationRule"
    metadata:
      name: "destination-mtls"
    spec:
      host: "*.local"
      trafficPolicy:
        tls:
          mode: ISTIO_MUTUAL
    
  4. Appliquez la règle de destination.
    kubectl apply -f destination-mtls.yaml -n NAMESPACE
    
  5. Si vous souhaitez mettre en place l' mTLS ation pour les charges de travail de maillage de services dans d'autres espaces de noms, répétez ces étapes dans chaque espace de noms.

Les règles de destination sont également utilisées pour des raisons autres que l'authentification, telles que le routage du trafic vers différentes versions d'un service. Toute règle de destination que vous créez pour un service doit également contenir le même bloc TLS que celui défini sur mode: ISTIO_MUTUAL. Ce bloc empêche la règle de remplacer les paramètres mTLS à l'échelle du maillage que vous avez configurés dans cette section.