Kubernetes

Maillage de services Kubernetes

Maillage de services Kubernetes
Kubernetes propose de nombreux types de ressources qui vous aident à faire abstraction de l'idée de services ou de microservices. Par exemple, si le frontend de votre application veut interagir avec le backend, il n'a pas besoin de se soucier du pod qu'il recherche, ni même de l'adresse IP qu'il espère qu'un pod backend occupera. Les pods sont exposés via un service. (Si vous êtes nouveau sur Kubernetes, je recommande cet article pour mieux comprendre ce que sont les pods ainsi que d'autres concepts importants.)

Essentiellement, Kubernetes expose un service d'arrière-plan en interne au sein du cluster et le front-end interagit avec ce service. Les pods qui offrent le service peuvent très bien être remplacés et personne ne remarquerait rien. Mais à mesure que les fonctionnalités de vos applications augmentent, le nombre de services que vous devez maintenir augmente également. Chaque service peut potentiellement parler à tous les autres services du cluster, et le réseau résultant est appelé Maillage de services.

Il existe de nombreux add-ons pour Kubernetes pour nous aider à simplifier la gestion de ce Service Mesh. De nombreuses fonctionnalités clés telles que TLS, l'équilibrage de charge automatisé, la sécurisation des API même sur le réseau interne, etc. sont offertes par ces modules complémentaires. De nombreuses options telles que Istio, Linkerd et Conduit peuvent être intégrées à Kubernetes pour y parvenir. Nous examinerons Istio dans cet article puisqu'il s'agit de la version 1.0 a été récemment annoncé.

Conditions préalables

Pour commencer avec Istio, vous auriez besoin d'un cluster kubernetes fonctionnel. Il y a trois façons d'obtenir cela.

  1. Vous pouvez installer Minikube pour créer un cluster à nœud unique sur votre machine locale.
  2. Ou, si vous utilisez Docker sous Windows ou Mac, vous pouvez activer un cluster Kubernetes à nœud unique dans les paramètres Docker.
  3. Ou vous pouvez utiliser des services en ligne comme l'aire de jeux Katacoda. Nous utiliserons ceci.

Pourquoi utiliser un Service Mesh?

L'installation d'un service mesh, comme Istio, facilite l'utilisation des microservices. Lors du développement, vous n'avez pas à vous soucier du fait que votre microservice devrait offrir un support pour TLS mutuel, l'équilibrage de charge ou tout autre aspect tel que la découverte de services. Un Service Mesh idéal vous permet de connecter des microservices, de les sécuriser les uns des autres et du monde extérieur, et de les gérer de manière organisée. Il aide énormément les développeurs et les opérateurs.

Installation d'Istio

L'installation d'Istio nécessite d'avoir un cluster Kubernetes. Si vous avez un cluster à nœud unique comme celui que vous obtenez avec Minikube ou Docker sur le bureau, toutes les commandes peuvent être exécutées sur votre nœud local. Cependant, si vous utilisez un cluster multi-nœuds comme celui proposé par Katacoda, gardez à l'esprit que la plupart des commandes et des procédures de configuration sont effectuées sur le nœud maître. Oui, cela affecte l'ensemble du cluster, mais nous devons interagir uniquement avec le nœud maître.

Nous commençons par cloner (ou télécharger) la dernière version d'Istio depuis Github. Les utilisateurs de Windows voudront peut-être visiter cette page et obtenir le .Zip *: français déposer.

$ curl -L https://git.io/getLatestIstio | sh -
$ cd istio-1.0.0

Le nom du dépôt peut changer au fil du temps au fur et à mesure de la sortie d'une nouvelle version, au moment de la rédaction de cet article 1.0.0 est la dernière version stable. Ce référentiel contient non seulement l'extension de maillage de services, mais également un exemple d'application appelée BookInfo à des fins d'expérimentation. Le script ajoute également le nouveau répertoire $PWD/istio-1.0.0/bin à votre variable PATH.

Ce répertoire contient istioctl binaire qui peut être utilisé pour interagir avec le cluster. Les utilisateurs de Windows peuvent simplement appeler le binaire en allant dans le dossier istio-1.0.0\bin et appeler .\istioctl en utilisant powershell ou invite de commande. Mais c'est un complément optionnel.

Si vous utilisez Mac, vous pouvez le faire à l'aide de la commande suivante :

$ export CHEMIN=$PWD/bin:$CHEMIN

Ensuite, nous devons étendre notre API Kubernetes avec les définitions de ressources personnalisées (CRD) qu'istio nous fournit.

$ kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml

Cela peut prendre effet dans quelques secondes et une fois que c'est fait, votre kube-apiserver aura des extensions Istio intégrées. À partir de là, les options d'installation varient selon que vous l'utilisez à des fins de production ou si vous l'expérimentez dans votre propre environnement isolé.

Nous allons supposer que c'est le cas et installer istio sans authentification TLS.

$ kubectl applique -f install/kubernetes/istio-demo.yaml

Cela créera un nouvel espace de noms istio-system où tous les différents composants comme istio-pilot et la passerelle d'entrée seront installés.

Déploiement d'applications et injecteur Istio

Voici l'utilité d'Istio. Istio ajoute des proxys side-car à vos services, et cela sans modifier le code réel de votre application. Si l'injecteur automatique istio-sidecar est activé. Vous pouvez étiqueter un espace de noms avec istio-injection=enabled et lorsque votre application est déployée sur cet espace de noms, les pods eux-mêmes auront des conteneurs Envoy spécialisés avec les conteneurs de l'application principale. Par exemple, étiquetons l'espace de noms par défaut

$ kubectl label espace de noms par défaut istio-injection=enabled

Déployons maintenant l'exemple d'application BookInfo dans cet espace de noms. À partir du répertoire racine du représentant Isitio que nous avons cloné, exécutez :

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

Vous pouvez répertorier tous les pods en cours d'exécution ici :

$ kubectl obtenir des pods

Choisissez n'importe quelle capsule parmi celles-ci et voyez ses détails. Par exemple, l'un des pods de l'application BookInfo dans mon déploiement est nommé details-v1-6865b9b99d-6mxx9

$ kubectl décrire les pods/details-v1-6865b9b99d-6mxx9

Dans la description, vous remarquerez que le pod contient deux conteneurs, le premier est un composant de l'exécution réelle de l'application d'image examples-bookinfo-details-v1:1.8.0 et le second est l'istio-proxy exécutant l'image  gcr.io/istio-release/proxyv2:1.0.0 .

Istio offre un contrôle fin sur votre maillage de services car il injecte ces conteneurs dans les pods mêmes où résident vos applications. Ceci, combiné à un TLS facile à utiliser pour la communication et un contrôle du trafic à grain fin, est l'une des nombreuses raisons pour lesquelles les grandes applications peuvent bénéficier d'un maillage de services comme Istio.

Les références

L'architecture actuelle comporte de nombreux composants tels que Pilot, Citadel et Mixer, chacun ayant son propre rôle important à jouer. Vous pouvez en apprendre beaucoup plus sur ces composants ici et essayer de déployer votre propre microservice ici.

Meilleurs jeux de ligne de commande pour Linux
La ligne de commande n'est pas seulement votre plus grand allié lorsque vous utilisez Linux, elle peut également être une source de divertissement car...
Meilleures applications de mappage de manette de jeu pour Linux
Si vous aimez jouer à des jeux sur Linux avec une manette de jeu au lieu d'un système de saisie clavier et souris typique, il existe des applications ...
Outils utiles pour les joueurs Linux
Si vous aimez jouer à des jeux sur Linux, il est probable que vous ayez utilisé des applications et des utilitaires comme Wine, Lutris et OBS Studio p...