BLOG | NGINX

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

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 mettons à votre disposition un référentiel GitHub regroupant les ressources nécessaires pour créer une image Docker de NGINX Plus et NGINX Agent, compatible avec la version 2.8.0 et suivantes 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 Cloning into 'NGINX-Demos'... 
    remote: Enumerating objects: 126, done. 
    remote: Counting objects: 100% (126/126), done. 
    remote: Compressing objects: 100% (85/85), done. 
    remote: Total 126 (delta 61), reused 102 (delta 37), pack-reused 0 
    Receiving objects: 100% (126/126), 20.44 KiB | 1.02 MiB/s, done. 
    Resolving deltas: 100% (61/61), done.
    
  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 => Target docker image is nginx-plus-with-agent:2.7.0 
    [+] Building 415.1s (10/10) FINISHED 
    => [internal] load build definition from Dockerfile
    => transferring dockerfile: 38B
    => [internal] load .dockerignore 
    => transferring context: 2B 
    => [internal] load metadata for 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
    => [internal] load build context 
    => transferring context: 69B 
    => [2/4] RUN 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  
    => exporting to image 
    => exporting layers 
    => writing image sha256:9246de4af659596a290b078e6443a19b8988ca77f36ab90af3b67c03d27068ff 
    => naming to registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 
    => Build complete for 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:
              containers:
              - name: 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:
            containers:
              ...
              env:
                - name: NIM_HOST
                ...
                  value: "nginx-nim2.nginx-nim2"
                - name: NIM_GRPC_PORT
                  value: "443"
                - name: NIM_INSTANCEGROUP
                  value: "lab"
                - name: NIM_TAGS
                  value: "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:
            containers:
              ...
              env:
                - name: NIM_HOST
                ...
                #- name: NAP_WAF
                #  value: "true"
                #- name: NAP_WAF_PRECOMPILED_POLICIES
                #  value: "true"
                ...
                #- name: ACM_DEVPORTAL
                #  value: "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 start$ ./scripts/nginxWithAgentStart.sh stop
      
    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  NAME                        READY  STATUS   RESTARTS  AGE 
      nginx-nim-7f77c8bdc9-hkkck  1/1    Running  0         1m 
      nginx-nim-7f77c8bdc9-p2s94  1/1    Running  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 – il est gratuit et libre.


« 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."