Comment déployer Nginx sur un cluster Kubernetes
Dans notre dernier article, nous avons expliqué comment configurer et exécuter un cluster Kubernetes. Voyons comment déployer le service NGINX sur notre cluster.
J'exécuterai ce déploiement sur une machine virtuelle hébergée par un fournisseur de cloud public. Comme c'est le cas pour de nombreux services de cloud public, beaucoup maintiennent généralement un schéma IP public et privé pour leurs machines virtuelles.
Environnement de test
Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197
Déployer NGINX sur un cluster Kubernetes
Nous exécuterons ce déploiement à partir du nœud maître.
Commençons par vérifier l’état du cluster. Tous vos nœuds doivent être dans l'état PRÊT.
kubectl get nodes
Nous créons un déploiement de NGINX à l'aide de l'image NGINX.
kubectl create deployment nginx --image=nginx
Vous pouvez maintenant voir l'état de votre déploiement.
kubectl get deployments
Si vous souhaitez voir plus de détails sur votre déploiement, vous pouvez exécuter la commande describe. Par exemple, il est possible de déterminer combien de répliques du déploiement sont en cours d'exécution. Dans notre cas, nous nous attendons à voir une réplique de 1 en cours d'exécution (c'est-à-dire des répliques 1/1).
kubectl describe deployment nginx
Maintenant que votre déploiement Nginx est actif, vous souhaiterez peut-être exposer le service NGINX à une adresse IP publique accessible sur Internet.
Exposer votre service Nginx au réseau public
Kubernetes propose plusieurs options lors de l'exposition de votre service en fonction d'une fonctionnalité appelée Types de services Kubernetes :
- ClusterIP – Ce type de service expose généralement le service sur une adresse IP interne, accessible uniquement au sein du cluster, et éventuellement uniquement au sein des nœuds du cluster.
- NodePort – Il s'agit de l'option la plus basique pour exposer votre service afin qu'il soit accessible en dehors de votre cluster, sur un port spécifique (appelé NodePort) sur chaque nœud du cluster. Nous illustrerons cette option prochainement.
- LoadBalancer – Cette option s'appuie sur les services externes d'équilibrage de charge proposés par divers fournisseurs pour permettre l'accès à votre service. Il s'agit d'une option plus fiable lorsque l'on pense à la haute disponibilité de votre service et offre davantage de fonctionnalités au-delà de l'accès par défaut.
- ExternalName : ce service redirige le trafic vers des services en dehors du cluster. En tant que tel, le service est mappé sur un nom DNS qui pourrait être hébergé hors de votre cluster. Il est important de noter que cela n’utilise pas de proxy.
Le type de service par défaut est ClusterIP.
Dans notre scénario, nous souhaitons utiliser le type de service NodePort car nous avons à la fois une adresse IP publique et privée et nous n'avons pas besoin d'un équilibreur de charge externe pour l'instant. Avec ce type de service, Kubernetes attribuera ce service aux ports de la gamme 30 000+.
kubectl create service nodeport nginx --tcp=80:80
Exécutez la commande get svc pour voir un résumé du service et des ports exposés.
kubectl get svc
Vous pouvez maintenant vérifier que la page Nginx est accessible sur tous les nœuds à l'aide de la commande curl.
curl master-node:30386
curl node-1:30386
curl node-2:30386
Comme vous pouvez le constater, la page « BIENVENUE CHEZ NGINX ! » est accessible.
Atteindre les adresses IP PUBLIQUES éphémères
Comme vous l'avez peut-être remarqué, Kubernetes signale que je n'ai aucune adresse IP publique active enregistrée, ou plutôt aucune adresse IP EXTERNE enregistrée.
kubectl get svc
Vérifions si c'est bien vrai, que je n'ai aucune IP EXTERNE attachée à mes interfaces à l'aide de la commande IP.
ip a
Aucune IP publique comme vous pouvez le voir.
Comme mentionné précédemment, j'exécute actuellement ce déploiement sur une machine virtuelle proposée par un fournisseur de cloud public. Ainsi, bien qu’aucune interface particulière ne soit dotée d’une adresse IP publique, le fournisseur de VM a émis une adresse IP externe éphémère.
Une adresse IP externe éphémère est une adresse IP temporaire qui reste attachée à la VM jusqu'à l'arrêt de l'instance virtuelle. Lorsque l'instance virtuelle est redémarrée, une nouvelle adresse IP externe est attribuée. En termes simples, il s’agit d’un moyen simple pour les fournisseurs de services de tirer parti des adresses IP publiques inactives.
Le défi ici, outre le fait que votre IP publique n'est pas statique, est que l'IP publique éphémère est simplement une extension (ou proxy) de l'IP privée, et pour cette raison, le service accessible uniquement sur le port 30386. Cela signifie que le service sera accessible sur l'URL
, c'est-à-dire 104.197.170.99, qui si vous cochez votre navigateur, vous devriez pouvoir voir la page d'accueil.
Grâce à cela, nous avons déployé avec succès NGINX sur notre cluster Kubernetes à 3 nœuds.