BLOG | NGINX

Création d'une image Docker de NGINX Plus avec NGINX Agent pour Kubernetes

NGINX-Partie-de-F5-horiz-black-type-RGB
Miniature de Fabrizio Fiorucci
Fabrizio Fiorucci
Publié le 18 avril 2023

F5 NGINX Management Suite est une famille de modules permettant de gérer le plan de données NGINX à partir d'une seule et même interface. En simplifiant la gestion des instances NGINX Open Source et NGINX Plus, NGINX Management Suite simplifie vos processus de mise à l'échelle, de sécurisation et de surveillance des applications et des API.

Vous devez installer l'agent NGINX sur chaque instance NGINX que vous souhaitez gérer à partir de NGINX Management Suite, pour activer la communication avec le plan de contrôle et la gestion de la configuration à distance.

Pour les instances NGINX exécutées sur du bare metal ou une machine virtuelle (VM), nous fournissons des instructions d'installation dans notre documentation. Dans cet article, nous montrons comment créer une image Docker pour NGINX Plus et NGINX Agent, afin d'élargir la portée de NGINX Management Suite aux instances NGINX Plus déployées dans Kubernetes ou d'autres infrastructures de microservices.

Il existe trois options de construction, en fonction de ce que vous souhaitez inclure dans l'image Docker résultante :

[ Éditeur – Cet article a été mis à jour en avril 2023 pour clarifier les instructions et ajouter le champ ACM_DEVPORTAL à l’étape 1 de l’exécution de l’image Docker dans Kubernetes .]

Prérequis

Nous fournissons un référentiel GitHub des ressources dont vous avez besoin pour créer une image Docker de NGINX Plus et NGINX Agent, avec prise en charge de la version 2.8.0 et ultérieure du module Instance Manager de NGINX Management Suite.

Pour créer l’image Docker, vous avez besoin de :

  • Un hôte Linux (bare metal ou VM)
  • Docker 20.10+
  • Un registre privé vers lequel vous pouvez pousser l'image Docker cible
  • Une instance NGINX Management Suite en cours d'exécution avec Instance Manager et API Connectivity Manager si vous souhaitez tirer parti de la prise en charge du portail des développeurs
  • Un abonnement ( ou un essai gratuit de 30 jours ) pour NGINX Plus et en option NGINX App Protect

Pour exécuter l’image Docker, vous avez besoin de :

  • Un cluster Kubernetes en cours d'exécution
  • kubectl avec accès au cluster Kubernetes

Création de l'image Docker

Suivez ces instructions pour créer l’image Docker.

  1. Cloner le dépôt GitHub :

    $ git clone https://github.com/nginxinc/NGINX-Demos Clonage dans 'NGINX-Demos'... à distance : Énumération des objets : 126, terminé. à distance : Compter les objets : 100% (126/126), terminé. à distance : Compression d'objets : 100% (85/85), terminé. à distance : Total 126 (delta 61), réutilisé 102 (delta 37), pack-réutilisé 0 Objets de réception : 100 % (126/126), 20,44 Ko | 1,02 Mio/s, terminé. 
    Résolution des deltas : 100% (61/61), fait.
    
  2. Accédez au répertoire de construction :

    $ cd NGINX-Demos/nginx-agent-docker/
    
  3. Exécutez docker ps pour vérifier que Docker est en cours d’exécution, puis exécutez le script build.sh pour inclure le logiciel souhaité dans l’image Docker. Les options de base sont :

    • ‑C – Nom du fichier de certificat de licence NGINX Plus ( nginx-repo.crt dans les exemples de commandes ci-dessous)
    • ‑K – Nom du fichier de clé de licence NGINX Plus ( nginx-repo.key dans les exemples de commandes ci-dessous)
    • ‑t – Le registre et l’image cible sous la forme

      <nom_registre>/<nom_image>:<étiquette>

      ( registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 dans les exemples de commandes ci-dessous)

    • ‑n – URL de base de votre instance NGINX Management Suite ( https://nim.f5.ff.lan dans les exemples de commandes ci-dessous)

    Les options supplémentaires sont :

    • ‑d – Ajout de la prise en charge du plan de données pour le portail des développeurs lors de l’utilisation de NGINX API Connectivity Manager
    • ‑w – Ajouter NGINX App Protect WAF

    Voici les commandes pour les différentes combinaisons de logiciels :

    • NGINX Plus et NGINX Agent :

      $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 \ -n https://nim.f5.ff.lan
      
    • NGINX Plus, NGINX Agent et NGINX App Protect WAF (ajoutez l'option ‑w ) :

      $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \-t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -w \ -n https://nim.f5.ff.lan
      
    • Prise en charge de NGINX Plus, NGINX Agent et du portail des développeurs (ajoutez l'option ‑d ) :

      $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -d \ -n https://nim.f5.ff.lan
      

    Voici un exemple de trace de la construction d'une image de base. Le message « Build terminé » à la fin indique une build réussie.

    $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -n https://nim.f5.ff.lan => L'image Docker cible est nginx-plus-with-agent:2.7.0 [+] Construction de 415.1s (10/10) TERMINÉE => [interne] charger la définition de construction à partir du Dockerfile => transfert du dockerfile : 38B => [interne] load .dockerignore => transfert de contexte : 2B => [interne] charger les métadonnées pour docker.io/library/centos:7 => [auth] library/centos:pull token for registry-1.docker.io => CACHED [1/4] FROM docker.io/library /centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 => [interne] charger le contexte de construction => transférer le contexte : 69B => [2/4] EXÉCUTER yum -y update && yum install -y wget ca-certificates epel-release curl && mkdir -p /deployment /etc/ssl/nginx && bash -c 'curl -k $NMS_URL/install/nginx-agent | sh' && echo "A 299.1s => [3/4] COPY ./container/start.sh /deployment/ => [4/4] RUN --mount=type=secret,id=nginx-crt,dst=/etc/ssl/nginx/nginx-repo.crt --mount=type=secret,id=nginx-key,dst=/etc/ssl/nginx/nginx-repo.key set -x && chmod +x /deployment/start.sh & 102.4s => exportation vers image => exportation des calques => écriture de l'image sha256:9246de4af659596a290b078e6443a19b8988ca77f36ab90af3b67c03d27068ff => dénomination vers Registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 => Construction terminée pour Registry.ff.lan:31005/nginx-plus-with-agent:2.7.0
    

    Exécution de l'image Docker dans Kubernetes

    Suivez ces instructions pour préparer le manifeste de déploiement et démarrer NGINX Plus avec NGINX Agent sur Kubernetes.

    1. À l'aide de votre éditeur de texte préféré, ouvrez manifests/1.nginx-with-agent.yaml et apportez les modifications suivantes (les extraits de code affichent les valeurs par défaut que vous pouvez ou devez modifier, surlignées en orange) :

      • Dans la section spec.template.spec.containers , remplacez le nom de l'image par défaut ( your.registry.tld/nginx-with-nim2-agent:tag ) par le nom de l'image Docker que vous avez spécifié avec l'option ‑t à l'étape 3 de la création de l'image Docker (dans notre cas, registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 ) :

        spec: ... template: ... spec: conteneurs: - nom: nginx-nim image: your.registry.tld/nginx-with-nim2-agent:tag
        
      • Dans la section spec.template.spec.containers.env , effectuez ces substitutions dans le champ de valeur pour chaque nom indiqué :

        • NIM_HOST – (Obligatoire) Remplacez la valeur par défaut ( nginx-nim2.nginx-nim2 ) par le nom de domaine complet ou l’adresse IP de votre instance NGINX Management Suite (dans notre cas nim2.f5.ff.lan ).
        • NIM_GRPC_PORT – (Facultatif) Remplacez la valeur par défaut (443 ) avec un numéro de port différent pour le trafic gRPC.
        • NIM_INSTANCEGROUP – (Facultatif) Remplacez la valeur par défaut ( lab ) par le groupe d’instances auquel appartient l’instance NGINX Plus.
        • NIM_TAGS – (Facultatif) Remplacez la valeur par défaut ( preprod,devops ) par une liste de balises délimitées par des virgules pour l’instance NGINX Plus.
        spec: ... template: ... spec: conteneurs: ... env: - nom: NIM_HOST ... valeur : " nginx-nim2.nginx-nim2 " - nom : Valeur NIM_GRPC_PORT : "443 " - nom: Valeur NIM_INSTANCEGROUP : « lab » - nom : Valeur NIM_TAGS : « preprod,devops »
        
      • Également dans la section spec.template.spec.containers.env , supprimez le commentaire de ces paires de champs nom - valeur si la condition indiquée s'applique :

        • NIM_WAF et NIM_WAF_PRECOMPILED_POLICIES – NGINX App Protect WAF est inclus dans l'image (vous avez inclus l'option -w à l'étape 3 de la création de l'image Docker ), donc la valeur est « true » .
        • ACM_DEVPORTAL – La prise en charge du portail des développeurs App Connectivity Manager est incluse dans l'image (vous avez inclus l'option -d à l'étape 3 de la création de l'image Docker ), donc la valeur est « true » .
        spec: ... template: ... spec: conteneurs: ... env: - nom: NIM_HOST ... #- nom : NAP_WAF # valeur : « true » #- nom : NAP_WAF_PRECOMPILED_POLICIES # valeur : « true » ... #- nom : ACM_DEVPORTAL # valeur : « true »
        
    2. Exécutez le script nginxwithAgentStart.sh comme indiqué pour appliquer le manifeste et démarrer deux pods (comme spécifié par les répliques :2 instructions dans la section spec du manifeste), chacun avec NGINX Plus et NGINX Agent :

      $ ./scripts/nginxWithAgentStart.sh démarrer $ ./scripts/nginxWithAgentStart.sh arrêter
      
    3. Vérifiez que deux pods sont désormais en cours d’exécution : chaque pod exécute une instance NGINX Plus et un agent NGINX pour communiquer avec le plan de contrôle NGINX Management Suite.

      $ kubectl get pods -n nim-test NOM PRÊT ÉTAT RESTARTS AGE nginx-nim-7f77c8bdc9-hkkck 1/1 En cours d'exécution 0 1m nginx-nim-7f77c8bdc9-p2s94 1/1 En cours d'exécution 0 1m
      
    4. Accédez à l'interface graphique du gestionnaire d'instances NGINX dans NGINX Management Suite et vérifiez que deux instances NGINX Plus sont en cours d'exécution avec le statut En ligne . Dans cet exemple, NGINX App Protect WAF n'est pas activé.

      Capture d'écran de la fenêtre Présentation des instances dans NGINX Management Suite Instance Manager version 2.7.0

    Commencer

    Pour tester les solutions NGINX présentées dans cet article, démarrez dès aujourd'hui un essai gratuit de 30 jours ou contactez-nous pour discuter de vos cas d'utilisation :

    Téléchargez NGINX Agent – c'est gratuit et open source.


« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."