Comment configurer un contrôleur d'entrée NGINX sur DigitalOcean Kubernetes
Agence web » Actualités du digital » Comment configurer un contrôleur d’entrée NGINX sur DigitalOcean Kubernetes

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.

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.

image des clusters Kubernetes dans le panneau de configuration 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-productionet 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

image de la suppression d'un équilibreur de charge DigitalOcean

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.

★★★★★