Présentation
Un moyen pratique de gérer les microservices d'une application cloud native consiste à automatiser les fonctions du réseau d'application.
Istio est une plate-forme de maillage de services configurable agissant comme un plan de contrôle, distribuant la configuration aux proxys et passerelles side-car. Il s'agit d'une option populaire pour connecter, surveiller et sécuriser les conteneurs dans un cluster Kubernetes.
Dans ce didacticiel, vous apprendrez à installer Istio, à déployer une application de test et à configurer votre cluster Kubernetes pour qu'il fonctionne avec la plate-forme.
Prérequis
- Un cluster Kubernetes (ou minikube)
- outil de ligne de commande kubectl
Télécharger la dernière version d'Istio
Pour télécharger la dernière version d'Istio, accédez à la page de publication d'Istio sur GitHub.
Alternativement, les utilisateurs de Linux peuvent utiliser curl
pour télécharger et extraire automatiquement la dernière version :
curl -L https://istio.io/downloadIstio | sh -
La commande extrait les fichiers d'installation dans le dossier nommé istio-[version]
:
Pour télécharger une ancienne version d'Istio, utilisez curl
, mais précisez la version et l'architecture du processeur en utilisant la syntaxe suivante :
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.8 TARGET_ARCH=x86_64 sh -
Guide d'installation Istio
1. Démarrez votre cluster Kubernetes. Cet article utilise minikube :
minikube start
2. Ensuite, démarrez l'installation d'Istio en vous déplaçant dans le dossier contenant les fichiers extraits :
cd istio-1.9.2
3. Le bin/
le répertoire contient istioctl
binaire client. Sous Linux, ajoutez le client à votre chemin en tapant :
export PATH=$PWD/bin:$PATH
La variable définie de cette manière ne dure que jusqu'à ce que vous terminiez la session shell en cours. Pour définir la variable de manière permanente, lisez comment définir des variables d'environnement sous Linux.
4. Utilisez le istioctl
outil pour lancer le processus d'installation :
istioctl install --set profile=demo -y
La sortie confirme la réussite de l'installation :
5. Istio peut injecter automatiquement des proxys side-car Envoy lors du déploiement de l'application. Pour l'activer, utilisez kubectl
pour ajouter une étiquette d'espace de noms contenant cette instruction :
kubectl label namespace default istio-injection=enabled
Ceci conclut le processus d'installation d'Istio.
Tester le déploiement via l'application Bookinfo
L'archive d'installation d'Istio contient tous les fichiers nécessaires au déploiement de l'exemple d'application appelé Bookinfo .
1. Commencez par appliquer le bookinfo.yaml
fichier en utilisant kubectl
:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Le système crée plusieurs déploiements, services et pods :
2. Vérifiez les services en cours :
kubectl get services
3. Vérifiez si les pods sont prêts :
kubectl get pods
Au fur et à mesure que les pods augmentent, Istio déploie des side-cars avec eux :
4. Attendez que le READY
l'étiquette de chaque pod est 2/2
. Exécutez ensuite la commande suivante pour voir si l'application diffuse correctement les pages HTML :
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ""
Le résultat doit être la balise de titre de la page, ainsi que le titre lui-même :
5. L'étape suivante consiste à ouvrir l'application au trafic extérieur. Appliquez le bookinfo-gateway.yaml
fichier à partir des samples
dossier :
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Le résultat confirme que l'application a bien été associée à la passerelle Istio :
6. Utilisez istioctl
pour analyser la configuration et vérifier les problèmes potentiels :
istioctl analyze
Si le système ne détecte aucun problème, le message suivant s'affiche :
7. Pour accéder à la passerelle configurée à l'étape précédente, définissez les variables d'entrée. Tout d'abord, exportez INGRESS_PORT
:
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
8. Maintenant, répétez le processus pour SECURE_INGRESS_PORT
:
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
9. Utilisez la commande echo pour vérifier si les ports ont été attribués avec succès :
echo "$INGRESS_PORT" && echo "$SECURE_INGRESS_PORT"
La sortie affiche les numéros de port :
10. Exportez le INGRESS_HOST
variables :
export INGRESS_HOST=$(minikube ip)
11. Vérifiez la variable avec echo
:
echo "$INGRESS_HOST"
12. Pour diriger le trafic vers la passerelle d'entrée Istio, ouvrez une nouvelle fenêtre de terminal et saisissez la commande suivante :
minikube tunnel
Minikube sert désormais d'équilibreur de charge pour Istio. La sortie montre que minikube dirige le trafic :
13. Revenez à la fenêtre de terminal précédente et exportez le GATEWAY_URL
variable, qui se compose de INGRESS_HOST
et INGRESS_PORT
variables :
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
14. Utilisez echo
pour voir l'intégralité de l'adresse IP et du numéro de port :
echo "$GATEWAY_URL"
15. Tapez la commande suivante pour afficher l'adresse externe de l'application :
echo http://$GATEWAY_URL/productpage
16. Copiez l'adresse obtenue à l'étape précédente et collez-la dans un navigateur Web. Le site Web Bookinfo se charge correctement :
Configurer un cluster Kubernetes pour Istio
Istio est livré avec un certain nombre de modules complémentaires pour les services Istio populaires, tels que le tableau de bord Grafana, le logiciel de suivi des transactions Jaeger, le scraper de métriques Prometheus et la console de gestion Kiali.
1. Installez ces modules complémentaires en appliquant les samples/addons
dossier :
kubectl apply -f samples/addons
2. Maintenant, créez une ressource Kubernetes Ingress pour chacun des addons. Pour ce faire, collez ce qui suit dans un yaml
fichier.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: istio-system
namespace: istio-system
annotations:
kubernetes.io/ingress.class: istio
spec:
rules:
- host: my-istio-dashboard.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: grafana
servicePort: 3000
- host: my-istio-tracing.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: tracing
servicePort: 9411
- host: my-istio-logs-database.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: prometheus
servicePort: 9090
- host: my-kiali.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: kiali
servicePort: 20001
3. Enregistrez le fichier et appliquez la configuration avec kubectl :
kubectl apply -f [file-name]
Les modules complémentaires sont maintenant configurés et prêts à être utilisés.