Comment configurer un contrôleur d’entrée NGINX sur DigitalOcean Kubernetes
Le service Managed Kubernetes de DigitalOcean simplifie le provisionnement et la maintenance des clusters Kubernetes. La plate-forme fournit une base prête à l’emploi pour les charges de travail conteneurisées avec une prise en charge en un clic des applications complémentaires courantes.
Dans cet article, nous montrerons comment utiliser l’un de ces modules complémentaires pour configurer un contrôleur NGINX Ingress dans votre cluster. Les entrées fournissent un mécanisme pour acheminer le trafic externe vers vos services en fonction de règles telles que le nom d’hôte, le chemin et les en-têtes. NGINX Ingress est l’un des contrôleurs Ingress les plus populaires. il utilise le serveur Web NGINX comme proxy inverse qui dirige le trafic entrant vers le bon service Kubernetes.
Sommaire
Commencer
Vous devez créer un cluster Kubernetes dans votre compte DigitalOcean avant de suivre ce tutoriel. Nous supposerons également que vous connaissez les bases de l’utilisation de Kubernetes, Kubectl et du panneau de configuration cloud de DigitalOcean.
Commencez par vous connecter à votre panneau de contrôle DigitalOcean, cliquez sur le lien « Kubernetes » dans la barre latérale gauche et sélectionnez votre cluster sur la page qui apparaît. Cliquez ensuite sur l’onglet « Marketplace » pour afficher la liste des applications 1-Click disponibles.
Que sont les applications en 1 clic ?
Les applications Kubernetes 1-Click de DigitalOcean fournissent des installations préconfigurées pour les applications en cluster les plus courantes. Les applications sont testées par DigitalOcean afin qu’elles fonctionnent avec chaque version de Kubernetes disponible.
Les applications disponibles utilisent le tableau Helm officiel de leur fournisseur. Les graphiques sont complétés par les paramètres par défaut fournis par DigitalOcean dans un référentiel GitHub open source. Le panneau de configuration DigitalOcean vous permet d’installer les cartes disponibles en un seul clic, offrant un moyen facile de se mettre en route avec les utilitaires essentiels. Vous n’avez pas besoin d’installer manuellement Helm et de configurer des référentiels de graphiques.
Installation de NGINX Ingress avec l’application 1-Click
Vous pouvez maintenant utiliser cette technique pour ajouter NGINX Ingress à votre cluster. Trouvez l’application sur le marché en faisant défiler la liste ou en utilisant la barre de recherche. Cliquez sur le bouton bleu « Installer » sur la carte de l’application et acceptez l’invite de confirmation.
La procédure d’installation peut prendre plusieurs minutes. La progression sera affichée dans l’interface utilisateur Web. Un nouvel équilibreur de charge sera automatiquement ajouté à votre compte lors du processus de configuration de l’application. Cet équilibreur de charge sera facturé au tarif standard et doit être utilisé comme point d’entrée externe pour votre cluster.
Votre contrôleur Ingress sera prêt à l’emploi une fois l’installation terminée. Étant donné que l’application 1-Click est basée sur un graphique Helm, vous pouvez vérifier que l’application a été ajoutée en répertoriant les versions Helm de votre cluster :
$ helm list --all-namespaces NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx ingress-nginx 1 2022-05-30 14:46:37.591626084 +0000 UTC deployed ingress-nginx-4.1.0-beta.1 1.2.0-beta.1
La ingress-nginx
La version a été ajoutée par DigitalOcean. Il montre comme deployed
afin que vous puissiez commencer à créer des ressources Ingress pour acheminer le trafic vers vos services.
Utilisation de votre contrôleur d’entrée
Vous pouvez tester votre contrôleur Ingress en créant des ressources simples de déploiement, de service et d’entrée Kubernetes :
apiVersion: apps/v1 kind: Deployment metadata: name: demo-deployment spec: replicas: 1 selector: matchLabels: app: demo-app template: metadata: labels: app: demo-app spec: containers: - name: demo-container image: httpd:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: demo-service spec: selector: app: demo-app ports: - port: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo-ingress spec: ingressClassName: nginx rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: demo-service port: number: 80
Appliquez ce fichier manifeste à votre cluster à l’aide de Kubectl :
$ kubectl apply -f app.yaml
La spec.ingressClassName: nginx
dans la ressource Ingress signifie qu’elle sera enregistrée auprès du contrôleur NGINX Ingress nouvellement installé. Chaque implémentation de contrôleur a son propre nom de classe afin que vous puissiez utiliser plusieurs contrôleurs dans un cluster.
Configurez ensuite un enregistrement DNS pour example.com
qui pointe vers l’adresse IP externe de votre équilibreur de charge DigitalOcean. Vous pouvez le trouver en accédant à Networking > Load Balancers dans le panneau de configuration en ligne ou en exécutant la commande Kubectl suivante :
$ kubectl get service ingress-nginx-controller --namespace=ingress-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer XXX.XXX.XXX.XXX 1.2.3.4 80:30547/TCP,443:32027/TCP 1d
Visiter example.com
devrait afficher la page Web Apache par défaut une fois que le changement DNS prend effet. Votre contrôleur Ingress reçoit la demande de l’équilibreur de charge. Il utilise vos ressources Ingress pour sélectionner un service approprié, ce qui entraîne l’envoi de demandes example.com
pour finir avec vos conteneurs Apache.
Vous pouvez désormais suivre la documentation Kubernetes pour créer des ressources Ingress qui expriment les règles de routage de service nécessaires à vos applications réelles.
Ajout de HTTPS
Les points de terminaison sur les clusters de production doivent être protégés avec TLS. Vous pouvez configurer des certificats HTTPS automatisés en ajoutant Cert-Manager à votre cluster, aux côtés du contrôleur d’entrée NGINX.
Cert-Manager est disponible en tant qu’application 1-Click supplémentaire sur DigitalOcean Marketplace. Vous pouvez répéter la procédure utilisée précédemment : accédez à la page de présentation de votre cluster dans le panneau de configuration, cliquez sur l’onglet « Place de marché », puis recherchez et installez l’application.
Une fois l’installation terminée, créez un émetteur de certificat qui sera utilisé pour demander des certificats Let’s Encrypt :
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-staging spec: acme: server: https://acme-staging-v02.api.letsencrypt.org/directory email: example@example.com privateKeySecretRef: name: letsencrypt-staging solvers: - http01: ingress: class: nginx
Changer la spec.acme.email
champ à votre propre adresse e-mail afin que Let’s Encrypt puisse vous contacter avec des notifications concernant vos certificats. Appliquez ensuite le manifeste à votre cluster :
$ kubectl apply -f issuer.yml
Vous pouvez désormais mettre à jour votre ressource Ingress avec la compatibilité HTTPS :
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo-ingress annotations: kubernetes.io/ingress.class: ingress cert-manager.io/cluster-issuer: letsencrypt-staging spec: ingressClassName: nginx rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: demo-service port: number: 80 tls: - hosts: - example.com
Le nouveau spec.tls
précise qu’un certificat doit être acquis pour le example.com
domaine. La letsencrypt-staging
l’émetteur du certificat sera utilisé, tel que défini par le cert-manager.io/cluster-issuer
annotation.
L’exemple ci-dessus utilise le point de terminaison intermédiaire de Let’s Encrypt, qui est recommandé pendant que vous testez votre déploiement. Vous pouvez passer à l’utilisation de vrais certificats en créant un deuxième émetteur qui cible les terminaux de production. Copiez le manifeste de l’émetteur ci-dessus, remplacez letsencrypt-staging
avec letsencrypt-production
et changez le spec.acme.server
URL vers https://acme-v02.api.letsencrypt.org/directory
. Ensuite, vous pouvez mettre à jour votre ressource Ingress cert-manager.io/cluster-issuer
annotation pour référencer votre nouveau letsencrypt-production
émetteur.
Gestion de votre installation NGINX Ingress
Malheureusement, les applications 1-Click de DigitalOcean ne font que simplifier l’expérience d’installation. Vous êtes autonome dans la gestion et la mise à jour de vos applications. Comme les applications sont simplement des graphiques Helm préconfigurés, ce n’est pas aussi onéreux qu’il y paraît.
Vous pouvez utiliser votre installation locale de l’interface de ligne de commande Helm pour mettre à niveau vers les nouvelles versions de NGINX Ingress :
$ helm upgrade ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --values values.yml
Vous devriez télécharger le values.yml
fichier du référentiel Marketplace de DigitalOcean en premier. Cela garantira que la nouvelle version est configurée avec vos paramètres existants. Vous pouvez également utiliser cette procédure pour personnaliser votre contrôleur Ingress avec vos propres paramètres après l’installation initiale. Modifier le values.yml
fichier, puis exécutez le helm upgrade
commande.
Suppression de NGINX Ingress de votre cluster
Vous pouvez supprimer complètement NGINX Ingress de votre cluster en désinstallant la version Helm de l’application et en supprimant l’espace de noms qui a été créé :
$ helm uninstall ingress-nginx --namespace ingress-nginx $ kubectl delete namespace ingress-nginx
L’équilibreur de charge doit être nettoyé automatiquement. Vous pouvez le supprimer manuellement de la page Networking > Load Balancers dans le panneau de configuration DigitalOcean si nécessaire. Cliquez sur le bouton « Plus » à côté de l’équilibreur de charge, puis choisissez « Détruire » dans le menu déroulant. Vous ne pourrez pas récupérer l’adresse IP qui a été attribuée.
Installer NGINX Ingress avec Doctl
Vous pouvez installer des applications en 1 clic à l’aide du client de ligne de commande Doctl de DigitalOcean. Commencez par récupérer la liste de vos clusters Kubernetes :
$ doctl kubernetes cluster list ID Name Region Version Auto Upgrade Status Node Pools 946407f3-abcd-123a-456b-6a0ec60f93bf demo-k8s lon1 1.22.8-do.1 false running demo-k8s-1
Exécutez ensuite la commande suivante pour ajouter NGINX Ingress à votre cluster. Remplacer <cluster-id>
avec l’ID affiché ci-dessus.
$ doctl kubernetes 1-click install <cluster-id> --1-clicks ingress-nginx
Utilisez cette alternative si vous souhaitez également installer Cert-Manager :
$ doctl kubernetes 1-click install <cluster-id> --1-clicks ingress-nginx,cert-manager
Outre l’utilisation de Doctl, vous pouvez également interagir directement avec l’API DigitalOcean pour ajouter par programme de nouvelles applications à votre cluster.
Sommaire
Vous pouvez rapidement ajouter le contrôleur NGINX Ingress à un cluster DigitalOcean Kubernetes en utilisant l’application 1-Click disponible sur le Marketplace. Cela déploie une version préconfigurée du graphique NGINX Ingress Helm avec une configuration prête à l’emploi.
Bien que cela accélère le provisionnement initial, vous devez toujours exécuter manuellement les commandes Helm pour gérer et mettre à niveau votre installation. L’application 1-Click vise à trouver un équilibre entre la facilité d’utilisation et la personnalisation, en veillant à ce que vous ne soyez pas enfermé dans un ensemble spécifique de paramètres.