Istio: Déploiement sur un cluster Kubernetes  en Production

Dans l’article précédent, nous avons abordé quelques points  à prendre en compte pour installer Istio en production. Dans cet article,  nous  allons voir en détails comment effectuer une installation d’Istio, et comment l’intégrer avec des outils de monitoring,  de tracing  ainsi que des outils de visualisation.

Pour un déploiement d’istio en production, il faut prendre en compte l’environnement sur lequel va être déployé Istio. Istio peut être déployé:

  • sur un ou plusieurs clusters
  • sur un ou plusieurs réseaux
  • en mode control plane unique ou multiple
  • pour gérer un ou plusieurs meshes

Pour plus d’informations sur les modèles de déploiement, il faut se référer au lien suivant:

https://istio.io/docs/ops/deployment/deployment-models/.

Le choix du bon modèle de déploiement dépend des exigences d’isolation, de performances et de haute disponibilité pour le cas d’utilisation. Dans notre cas, nous allons voir comment installer Istio en mode control plane unique, sur un Kubernetes mono-cluster déployé sur un réseau unique, pour gérer plusieurs meshes. Et nous allons nous concentrer sur la résilience des composants d’Istio et l’intégration avec les outils de monitoring et tracing.

https://istio.io/docs/ops/deployment/deployment-models/single-cluster.svg

 

Prérequis d’installation

Dans cette partie nous allons nous focaliser sur l’installation d’Istio en mode control plane unique sur un cluster kubernetes.

Pour cette installation il faut:

  • Un cluster Kubernetes 1.10+ avec la gestion des RBAC activée. Pour des informations sur comment mettre en place un cluster kubernetes rapidement vous  pouvez suivre ce lien:  

    https://istio.io/docs/setup/platform-setup

  • Un Jaeger installé. Pour des informations sur comment installer jaeger en prod consulter l’article suivant:
  • Un Prometheus et un Grafana installés

Pour installer Grafana et Prometheus suivre ce lien: https://github.com/coreos/kube-prometheus/

  • Un Kiali installé  et configuré pour communiquer avec le Prometheus

https://kiali.io/documentation/runtimes-monitoring/#_prometheus_configuration

Installation

Istioctl

Pour l’installation il nous faut la commande istioctl:

  1. On commence par spécifier la version en variable d’environnement:
Copy to Clipboard

      2. Puis on exécute cette commande qui va télécharger les fichiers compatibles avec l’os: 

Copy to Clipboard

      3. Entrer dans le dossier istio-1.4.6:

Copy to Clipboard

      4. Ajouter istioctl dans notre path:

Copy to Clipboard

Tracing jaeger

Pour spécifier le lien du jaeger installé, on fournira le paramètre suivant à la commande d’installation:

Copy to Clipboard

Kiali

Pour installer kiali avec Istio et spécifier les liens vers le Grafana et le Jaeger, on va passer les paramètres suivants à la commande d’installation:

Copy to Clipboard

Tls et sécurité du control plane

Pour activer la sécurité du control plane et le tls entre les différents services, on passera les paramètres suivants:

Copy to Clipboard

Configuration du control plane

Pour les composants d’istio, nous allons  nous assurer de spécifier clairement  les resources en terme de CPU et RAM, ainsi que  le nombre d’instances et l’autoscaling comme le montre le tableau suivant:

Pour intégrer les éléments du tableau ci-dessus dans la configuration, il nous faudra utiliser l’objet IstioControlPlane. C’est un  CRD kubernetes fournit par Istio qui définit toute la configuration d’installation:

Copy to Clipboard

Le fichier  contenant toute la configuration pour cette installation se trouve ici: https://github.com/dakario/istio-ha/blob/master/istio-ha.yaml

La commande complète d’installation est comme suit:

Copy to Clipboard

Configuration des add ons:

Grafana

Vu que le Grafana n’a pas  été installé par Istio, il faut le configurer pour ajouter des dashboards pour Istio.

Istio fournit des dashboards dans le répertoire d’installation ci-dessous:

https://github.com/istio/istio/tree/1.4.6/install/kubernetes/helm/istio/charts/grafana/dashboards 

Il faut éditer les dashboards pour configurer la datasource. On remplace

# « datasource »: « Prometheus » par « datasource »: « prometheus »

Dans notre répertoire d’installation:

Copy to Clipboard

On crée une ConfigMap à partir des dashboards Istio:

Copy to Clipboard

On édite le déploiement Grafana pour lui passer les dashboards.

Copy to Clipboard

Vérifier dans la console Grafana que les dashboards sont bien présents.

Prometheus

Il faut configurer prometheus pour qu’il aille chercher les métriques du mesh, comme indiqué dans le lien suivant:

https://github.com/coreos/prometheus-operator/blob/master/Documentation/additional-scrape-config.md

On crée un secret en utilisant le fichier  istio-metrics.yaml, qui contient la configuration des nouvelles métriques:

Copy to Clipboard

Puis on édite le CRD Prometheus operator pour passer notre configmap:

Copy to Clipboard

Kiali

Maintenant que le Prometheus est  configuré, nous allons configurer kiali pour qui puisse aller chercher les métriques.

Pour cela, il suffit d’éditer le configmap  kiali créé par istio, et mettre l’url de prometheus:

Copy to Clipboard

Puis il faut relancer  le pod Kiali pour prendre en compte la modification.

Injection des sidecars proxy

Maintenant, il  faut juste configurer l’auto-injection de sidecar Proxy par istio, sur les namespaces de notre cluster en plaçant le  label istio-injection=enabled:

Copy to Clipboard

 

Pour effectuer une injection manuelle de sidecar proxy istio, on utilise  l’option kube-inject d’istioctl pour ajouter le sidecar Envoy dans le template de l’application: 

Copy to Clipboard

 

Conclusion

Cet article parle de l’installation  en production d’istio en mode control plane unique, sur un Kubernetes mono-cluster. Mais avec istio, il est possible d’aller plus loin et effectuer une installation en mode multi-cluster, avec de  multiples control planes pour avoir une meilleure résilience et de la haute Disponibilité. C’est ce que nous couvrirons prochainement.