Mesh de service Kubernetes

Mesh de service Kubernetes
Kubernetes a de nombreux types de ressources qui vous aident à résumer l'idée des services ou des microservices. Par exemple, si le frontend de votre application souhaite interagir avec le backend, il ne faut pas se soucier de la nage. Les gousses sont exposées via un service. (Si vous êtes nouveau à Kubernetes, je recommande ce post pour mieux comprendre ce que sont les pods avec d'autres concepts importants.)

Essentiellement, Kubernetes expose un service backend En interne dans le 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 dont vous avez besoin pour maintenir augmente également. Chaque service peut potentiellement parler à tous les autres services du cluster, et le réseau résultant est appelé Maillot de service.

Il y a beaucoup de modules complémentaires pour Kubernetes pour nous aider à simplifier la gestion de ce maillot de service. De nombreuses fonctionnalités de clés comme TLS, l'équilibrage automatisé de charge, la sécurisation des API même sur le réseau interne, etc. sont offertes par ces ajouts. De nombreuses options telles que Istio, Linkerd et Conduit peuvent être intégrées à Kubernetes pour y parvenir. Nous examinerons Istio dans ce post car c'est la version 1.0 a récemment été 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 seul cluster de nœuds sur votre machine locale.
  2. Ou, si vous utilisez Docker sur Windows ou Mac, vous pouvez activer un cluster Kubernetes à un nœud dans les paramètres Docker.
  3. Ou vous pouvez utiliser des services en ligne comme Katacoda Playground. Nous utiliserons ceci.

Pourquoi utiliser un maillage de service?

L'installation d'un maillage de service, comme Istio facilite le travail avec les microservices. Pendant le développement, vous n'avez pas à vous soucier du fait que votre microservice devrait offrir un support pour les TL mutuels, l'équilibrage des charges ou tout autre aspect tel que la découverte de service. Un maillage de service idéal vous permet de connecter les 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 seul cluster de nœuds comme 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 que Katacoda Playground propose, 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 le clonage (ou le téléchargement) La dernière version d'Istio de GitHub. Les utilisateurs de Windows souhaiteront peut-être visiter cette page et obtenir le approprié .zipper déposer.

$ curl -l https: // git.IO / Getlatestistio | shot -
$ cd istio-1.0.0

Le nom du repo peut changer au fil du temps au fur et à mesure de la nouvelle version, au moment de la rédaction de ce document 1.0.0 est la dernière version stable. Ce repo contient non seulement l'extension de maillage de service, mais aussi un exemple d'application intitulée BookInfo à des fins d'expérimentation. Le script ajoute également le nouveau répertoire $ PWD / ISTIO-1.0.0 / bin à votre variable de chemin.

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 \ bac et appel .\ Istioctl Utilisation de PowerShell ou de l'invite de commande. Mais c'est un module complémentaire en option.

Si vous utilisez Mac, vous pouvez le faire en utilisant la commande suivante:

$ Export Path = $ pwd / bin: $ chemin

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

$ kubectl appliquer -f installation / kubernetes / helm / istio / modèles / crds.yaml

Cela pourrait prendre effet en quelques secondes et une fois que vous aurez fait votre kube-apiserver aura des extensions d'istio qui y seront 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 ce dernier est le cas et installer Istio sans authentification TLS.

$ kubectl appliquer -f installation / kubernetes / istio-demo.yaml

Cela créera un nouvel espace de noms Istio-System où tous les différents composants comme Istio-Pilot et Ingress Gateway seront installés.

Déploiement d'application et injecteur Istio

Voici l'utilité d'Istio. Istio ajoute des procurations SideCar à vos services, ce qui se fait sans modifier le code réel de votre application. Si l'injecteur automatique d'istio-sidecar est activé. Vous pouvez étiqueter un espace de noms avec Istio-Injection = activé et lorsque votre application est déployée sur cet espace de noms, les pods eux-mêmes auront des conteneurs envoyés spécialisés ainsi que les conteneurs de l'application de base. Par exemple, étiquetons l'espace de noms par défaut

$ kubectl étiquette de noms d'espace par défaut istio-injection = activé

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

$ kubectl appliquer -f échantillons / bookinfo / plate-forme / kube / bookinfo.yaml

Vous pouvez répertorier toutes les gousses en cours d'exécution ici:

$ kubectl obtenir des pods

Choisissez n'importe quel pod à partir de ceux et voyez ses détails. Par exemple, l'une des pods de l'application BookInfo dans mon déploiement est nommée Détails-V1-6865B9B99D-6MXX9

$ kubectl Décrivez les pods / détails-V1-6865B9B99D-6MXX9

Dans la description, vous remarquerez que le pod contient deux conteneurs, d'abord un composant de l'exécution réelle de l'application d'image - 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 à grain fin sur votre maillage de service car il injecte ces conteneurs jusqu'aux gousses où résident vos applications. Ceci combiné avec un TLS facile à utiliser pour la communication et le 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 service comme Istio.

Les références

L'architecture réelle a beaucoup de composants comme le pilote, la citadelle et le mélangeur avec chacun avec son propre rôle important pour jouer. Vous pouvez en savoir beaucoup plus sur ces composants ici et essayer de déployer votre propre microservice ici.