For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/containers-orchestration/managed-kubernetes/install-istio.md.

Installer Istio sur OVHcloud Managed Kubernetes

Voir en Markdown

Découvrez comment installer le service mesh Istio sur un cluster OVHcloud Managed Kubernetes, déployer l'application exemple Bookinfo et visualiser le trafic avec Kiali

Istio est un service mesh et une plateforme open source visant à réduire la complexité du déploiement, de la sécurisation, du contrôle et de l'observation des services distribués. Comme l'explique le site d'Istio, Istio vous aide à :

  • contrôler le flux de trafic entre les services ;
  • sécuriser les services et gérer l'authentification, l'autorisation et le chiffrement des communications inter-services ;
  • appliquer et faire respecter des politiques sur les services distribués ;
  • surveiller les services en collectant des métriques, des logs et des traces.

Ce tutoriel montre comment installer Istio sur un cluster OVHcloud Managed Kubernetes Service nouvellement créé. Vous pouvez utiliser la fonction Réinitialiser le cluster dans la section Public Cloud de l' pour réinitialiser votre cluster avant de suivre ce tutoriel.

Avant de commencer

Ce tutoriel suppose que vous disposez déjà d'un cluster OVHcloud Managed Kubernetes fonctionnel, ainsi que de connaissances de base sur son fonctionnement. Pour en savoir plus sur ces sujets, consultez la documentation Déployer une application Hello World.

Télécharger Istio

Istio est installé dans son propre namespace istio-system et peut gérer les services de tous les autres namespaces.

1. Accédez à la page des versions d'Istio pour télécharger le fichier d'installation correspondant à votre système d'exploitation, ou téléchargez et extrayez automatiquement la dernière version (Linux ou macOS) :

curl -L https://istio.io/downloadIstio | sh -

2. Déplacez-vous dans le répertoire du package Istio. Par exemple, si le package est istio-1.11.2 :

cd istio-1.11.2

Le répertoire d'installation contient :

  • des applications d'exemple dans samples/ ;
  • le binaire client istioctl dans le répertoire bin/.

3. Ajoutez le client istioctl à votre variable d'environnement PATH, sur un système macOS ou Linux :

export PATH=$PWD/bin:$PATH

Pour la suite du tutoriel, restez dans ce répertoire.

Installer Istio

Cette installation utilise l'outil de ligne de commande istioctl, qui offre une personnalisation avancée du control plane Istio et des sidecars du data plane Istio. Il intègre une validation des entrées utilisateur pour aider à prévenir les erreurs d'installation, ainsi que des options de personnalisation pour modifier n'importe quel aspect de la configuration.

Dans ce tutoriel, vous allez installer Istio avec le profil par défaut ; d'autres profils existent.

istioctl install
$ istioctl install
This will install the Istio 1.11.2 default profile with ["Istio core" "Istiod" "Ingress gateways"] components into the cluster. Proceed? (y/N) y
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Installation complete
Thank you for installing Istio 1.11.  Please take a few minutes to tell us about your install/upgrade experience!  https://forms.gle/kWULBRjUv7hHci7T6

Le namespace istio-system est créé avec tous les composants Istio.

Installer les modules complémentaires (addons)

Istio intègre plusieurs applications de télémétrie différentes. Elles peuvent vous aider à comprendre la structure de votre service mesh, à afficher la topologie du mesh et à analyser son état de santé.

Suivez les instructions ci-dessous pour déployer le tableau de bord Kiali, ainsi que Prometheus, Grafana et Jaeger.

Installez Kiali et les autres modules complémentaires, puis attendez qu'ils soient déployés :

kubectl apply -f samples/addons

Exemple de résultat :

$ kubectl apply -f samples/addons
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment.apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards created
deployment.apps/jaeger created
service/tracing created
service/zipkin created
service/jaeger-collector created
...
service/prometheus created
deployment.apps/prometheus created

Vérifier l'installation

1. Listez les services du namespace istio-system avec kubectl get services -n istio-system et vérifiez que les services suivants sont déployés : istiod, istio-ingressgateway et les modules complémentaires : grafana, jaeger, kiali, prometheus, tracing et zipkin.

Exemple de résultat :

$ kubectl get services -n istio-system
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                                      AGE
grafana                ClusterIP      10.3.75.230    <none>          3000/TCP                                     2m19s
istio-ingressgateway   LoadBalancer   10.3.175.205   51.178.69.212   15021:31288/TCP,80:32588/TCP,443:30085/TCP   4m38s
istiod                 ClusterIP      10.3.31.181    <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP        4m49s
jaeger-collector       ClusterIP      10.3.250.26    <none>          14268/TCP,14250/TCP,9411/TCP                 2m16s
kiali                  ClusterIP      10.3.255.49    <none>          20001/TCP,9090/TCP                           2m15s
prometheus             ClusterIP      10.3.9.246     <none>          9090/TCP                                     2m15s
tracing                ClusterIP      10.3.220.9     <none>          80/TCP,16685/TCP                             2m16s
zipkin                 ClusterIP      10.3.165.183   <none>          9411/TCP                                     2m16s

Comme la création du LoadBalancer est asynchrone et que son provisionnement peut prendre plusieurs minutes, vous obtiendrez probablement un statut pending pour le champ EXTERNAL-IP de istio-ingressgateway. Réessayez dans quelques minutes pour obtenir l'URL externe permettant d'appeler votre instance Istio.

2. Listez les pods du namespace istio-system avec kubectl get pods -n istio-system et vérifiez que les pods suivants sont déployés et que tous les conteneurs sont actifs : istiod-*, istio-ingressgateway-* et les modules complémentaires : grafana-*, jaeger-*, kiali-* et prometheus-*.

Exemple de résultat :

$ kubectl get pods -n istio-system
NAME                                    READY   STATUS    RESTARTS   AGE
grafana-556f8998cd-kmn6l                1/1     Running   0          4m23s
istio-ingressgateway-65668fd4dd-t8t4q   1/1     Running   0          6m43s
istiod-5f7bb95ddf-25f27                 1/1     Running   0          6m54s
jaeger-5f65fdbf9b-ctjkn                 1/1     Running   0          4m20s
kiali-787bc487b7-h9ck9                  1/1     Running   0          4m19s
prometheus-9f4947649-7wszv              2/2     Running   0          4m19s

Déployer une application

Pour vérifier qu'Istio fonctionne dans le cluster, déployez l'application de test Bookinfo — une application composée de plusieurs microservices qui permet de vérifier qu'Istio fonctionne comme prévu.

Bookinfo

Installer Bookinfo

L'injecteur de sidecar Istio, installé avec Istio, injecte automatiquement des conteneurs Envoy dans les pods de votre application. L'injecteur suppose que les pods de l'application s'exécutent dans des namespaces portant le label istio-injection=enabled.

Créez et labellisez un namespace istio-apps :

kubectl create namespace istio-apps

Ajoutez ensuite le label istio-injection=enabled :

kubectl label namespace istio-apps istio-injection=enabled

Exemple de résultat :

$ kubectl create namespace istio-apps
namespace/istio-apps created

$ kubectl label namespace istio-apps istio-injection=enabled
namespace/istio-apps labeled

Déployez maintenant le manifeste bookinfo dans le namespace :

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n istio-apps

La commande ci-dessus installe et lance, dans le namespace istio-apps, les quatre microservices illustrés dans le schéma ci-dessus : details, productpage, ratings et les trois versions de reviews :

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n istio-apps
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created

Vous pouvez maintenant vérifier que tous les services et pods sont correctement définis et en cours d'exécution :

1. Utilisez kubectl -n istio-apps get services pour vérifier que les services details, productpage, ratings et reviews sont actifs :

$ kubectl -n istio-apps get services
NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.3.131.63    <none>        9080/TCP   6s
productpage   ClusterIP   10.3.141.189   <none>        9080/TCP   4s
ratings       ClusterIP   10.3.133.82    <none>        9080/TCP   5s
reviews       ClusterIP   10.3.60.119    <none>        9080/TCP   5s

2. Utilisez kubectl -n istio-apps get pods pour vérifier que details-v1-*, productpage-v1-*, ratings-v1-*, reviews-v1-*, reviews-v2-* et reviews-v3-* sont actifs :

Exemple de résultat :

$ kubectl -n istio-apps get pods
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-79f774bdb9-wnklv       2/2     Running   0          88s
productpage-v1-6b746f74dc-4d77c   2/2     Running   0          87s
ratings-v1-b6994bb9-s6kwq         2/2     Running   0          88s
reviews-v1-545db77b95-rf58h       2/2     Running   0          88s
reviews-v2-7bf8c9648f-5dt4x       2/2     Running   0          88s
reviews-v3-84779c7bbc-f5jbw       2/2     Running   0          87s

Comme vous pouvez le constater, chaque pod comporte 2 conteneurs : le conteneur de l'application et le sidecar Istio qui est déployé avec lui.

Vérifiez que tout fonctionne correctement jusqu'à présent. Exécutez cette commande pour voir si l'application s'exécute dans le cluster et sert des pages HTML, en vérifiant le titre de la page dans la réponse :

$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>

Ouvrir l'application au trafic externe

Maintenant que les services Bookinfo sont actifs, vous devez rendre l'application accessible depuis l'extérieur de votre cluster Kubernetes, par exemple depuis un navigateur. Une Gateway Istio est utilisée à cette fin.

1. Associez cette application à la gateway Istio :

$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n istio-apps
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created

2. Vérifiez qu'il n'y a aucun problème avec la configuration :

$ istioctl analyze -n istio-apps
✔ No validation issues found when analyzing namespace: istio-apps.

3. Confirmez que la gateway a bien été créée :

$ kubectl -n istio-apps get gateway
NAME               AGE
bookinfo-gateway   53s

Déterminer l'IP et le port d'entrée (ingress)

Définissez GATEWAY_URL, l'URL du service istio-gateway.

Vous pouvez l'obtenir avec les commandes suivantes :

$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

$ echo $GATEWAY_URL
135.125.84.93

Confirmer que l'application est en cours d'exécution

Pour confirmer que l'application Bookinfo fonctionne, exécutez la commande curl suivante :

curl -o /dev/null -s -w "%{http_code}\n"  http://$GATEWAY_URL/productpage

Vous devriez obtenir un code de statut HTTP 200 indiquant que votre productpage fonctionne correctement.

$ curl -o /dev/null -s -w "%{http_code}\n"  http://$GATEWAY_URL/productpage
200

Vous pouvez également ouvrir dans votre navigateur http://<YOUR_GATEWAY_URL>/productpage (dans notre exemple, http://135.125.84.93:80/productpage) pour afficher la page web Bookinfo. Si vous actualisez la page plusieurs fois, vous devriez voir différentes versions des avis affichées sur la page produit, présentées selon un principe de répartition circulaire (round robin : étoiles rouges, étoiles noires, aucune étoile), car nous n'avons pas encore utilisé Istio pour contrôler le routage des versions.

Bookinfo

Visualiser le trafic

Une fois les modules complémentaires Istio installés, vous pouvez accéder au tableau de bord Kiali. La commande suivante crée un tunnel entre le service Kiali et votre machine, puis ouvre le lien du tableau de bord dans votre navigateur préféré :

istioctl dashboard kiali
Kiali

Pour afficher le trafic, sélectionnez Graph dans le menu de navigation de gauche, puis istio-apps dans le menu déroulant Namespace.

Warning

Pour voir les données de trace, vous devez envoyer des requêtes à votre service. Pour envoyer 100 requêtes au service productpage, utilisez la commande suivante :

for i in `seq 1 100`; do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done

Le tableau de bord Kiali affiche une vue d'ensemble de votre mesh avec les relations entre les services de l'application exemple Bookinfo. Il fournit également des filtres pour visualiser le flux de trafic.

Kiali Graph

Et ensuite ?

Vous disposez désormais d'une application Bookinfo fonctionnelle déployée sur Istio. Vous pouvez suivre les suggestions de la page de l'application exemple Bookinfo et utiliser cet exemple pour découvrir les fonctionnalités d'Istio en matière de routage de trafic, d'injection de pannes, de limitation de débit, etc. Pour poursuivre, consultez un ou plusieurs des exemples Istio, selon vos centres d'intérêt. Routage intelligent est un bon point de départ pour les débutants.

Suppression (nettoyage)

Pour désinstaller l'application Bookinfo, la méthode la plus simple consiste à utiliser le script cleanup.sh fourni :

$ ./samples/bookinfo/platform/kube/cleanup.sh
namespace ? [default] istio-apps
using NAMESPACE=istio-apps
virtualservice.networking.istio.io "bookinfo" deleted
gateway.networking.istio.io "bookinfo-gateway" deleted
Application cleanup may take up to one minute
service "details" deleted
serviceaccount "bookinfo-details" deleted
deployment.apps "details-v1" deleted
service "ratings" deleted
serviceaccount "bookinfo-ratings" deleted
deployment.apps "ratings-v1" deleted
service "reviews" deleted
serviceaccount "bookinfo-reviews" deleted
deployment.apps "reviews-v1" deleted
deployment.apps "reviews-v2" deleted
deployment.apps "reviews-v3" deleted
service "productpage" deleted
serviceaccount "bookinfo-productpage" deleted
deployment.apps "productpage-v1" deleted
Application cleanup successful

Pour confirmer l'arrêt, vous pouvez lister les virtual services, destination rules, gateway et pods du namespace istio-apps :

kubectl -n istio-apps get virtualservices   #-- there should be no virtual services
kubectl -n istio-apps get destinationrules  #-- there should be no destination rules
kubectl -n istio-apps get gateway           #-- there should be no gateway
kubectl -n istio-apps get pods              #-- there should be no pod

Exemple de résultat :

$ kubectl -n istio-apps get virtualservices   #-- there should be no virtual services
No resources found in istio-apps namespace.
kubectl -n istio-apps get destinationrules  #-- there should be no destination rules
No resources found in istio-apps namespace.
kubectl -n istio-apps get gateway           #-- there should be no gateway
No resources found in istio-apps namespace.
kubectl -n istio-apps get pods              #-- there should be no pod
No resources found in istio-apps namespace.

Vous pouvez maintenant désinstaller Istio avec la commande istioctl :

istioctl manifest generate | kubectl delete --ignore-not-found=true -f -

Cette commande supprime les permissions RBAC et toutes les ressources rattachées hiérarchiquement au namespace istio-system. Vous pouvez ignorer sans risque les erreurs concernant des ressources inexistantes, car elles ont pu être supprimées de manière hiérarchique.

Le namespace istio-system n'est pas supprimé par défaut. S'il n'est plus nécessaire, utilisez la commande suivante pour le supprimer :

kubectl delete namespace istio-system

Et supprimez le namespace istio-apps :

kubectl delete namespace istio-apps

Exemple de résultat :

$ istioctl manifest generate | kubectl delete --ignore-not-found=true -f -
customresourcedefinition.apiextensions.k8s.io "authorizationpolicies.security.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "destinationrules.networking.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "envoyfilters.networking.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "gateways.networking.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "istiooperators.install.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "peerauthentications.security.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "requestauthentications.security.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "serviceentries.networking.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "sidecars.networking.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "telemetries.telemetry.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "virtualservices.networking.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "workloadentries.networking.istio.io" deleted
customresourcedefinition.apiextensions.k8s.io "workloadgroups.networking.istio.io" deleted
serviceaccount "istio-ingressgateway-service-account" deleted
serviceaccount "istio-reader-service-account" deleted
serviceaccount "istiod" deleted
serviceaccount "istiod-service-account" deleted
clusterrole.rbac.authorization.k8s.io "istio-reader-clusterrole-istio-system" deleted
clusterrole.rbac.authorization.k8s.io "istio-reader-istio-system" deleted
clusterrole.rbac.authorization.k8s.io "istiod-clusterrole-istio-system" deleted
...
service "istio-ingressgateway" deleted
service "istiod" deleted

$ kubectl delete namespace istio-system
namespace "istio-system" deleted

$ kubectl delete namespace istio-apps
namespace "istio-apps" deleted

Aller plus loin

  • Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

  • Échangez avec notre communauté d'utilisateurs.

Cette page vous a-t-elle aidé ?