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

NGINX | 18 avril 2023

F5 NGINX Management Suite est une famille de modules permettant de gérer le plan de données NGINX depuis une interface unique. En simplifiant la gestion des instances NGINX Open Source et NGINX Plus, NGINX Management Suite facilite vos processus de mise à l’échelle, de sécurisation et de surveillance des applications et des API.

Vous devez installer NGINX Agent sur chaque instance NGINX que vous souhaitez gérer depuis NGINX Management Suite afin de permettre la communication avec le plan de contrôle et la gestion de la configuration à distance.

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

Trois options de compilation sont disponibles, selon les éléments que vous souhaitez inclure dans l’image Docker obtenue :

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

Prérequis

Nous mettons à votre disposition un dépôt GitHub contenant les ressources nécessaires pour créer une image Docker de NGINX Plus et de NGINX Agent, compatible avec la version 2.8.0 et les versions ultérieures du module Instance Manager de NGINX Management Suite.

Pour créer l’image Docker, vous avez besoin des éléments suivants :

  • Un hôte Linux (machine physique ou virtuelle)
  • Docker 20.10+
  • Un registre privé vers lequel vous pouvez envoyer l’image Docker cible
  • Une instance NGINX Management Suite opérationnelle avec Instance Manager, ainsi qu’API Connectivity Manager si vous souhaitez bénéficier de la prise en charge du portail des développeurs
  • Un abonnement (ou un essai gratuit de 30 jours) à NGINX Plus et, éventuellement, à NGINX App Protect

Pour exécuter l’image Docker, vous avez besoin des éléments suivants :

  • Un cluster Kubernetes opérationnel
  • kubectl avec accès au cluster Kubernetes

Création de l’image Docker

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

  1. Clonez 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.
  1. Accédez au répertoire de compilation :
$ cd NGINX-Demos/nginx-agent-docker/
  1. Exécutez docker ps pour vérifier que Docker est en cours d’exécution, puis exécutez le script build.sh afin d’inclure les logiciels souhaités dans l’image Docker. Les options de base sont les suivantes : Les options supplémentaires sont les suivantes : Voici les commandes correspondant aux différentes combinaisons de logiciels : Voici un exemple de journal de compilation pour une image de base. Le message Build complete affiché à la fin indique que la compilation a réussi.
$ ./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
  1. 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. Pour commencer Pour essayer 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 open source.
    • ‑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 au format « <registry_name>/<image_name>:<tag> » (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)
    • ‑d – Ajoute 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
    • 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, de 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
  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 indiquent 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 d’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 section « 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 les substitutions suivantes dans le champ « value » pour chaque « name » indiqué :
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"
  • NIM_HOST – (Obligatoire) Remplacez la valeur par défaut (nginx-nim2.nginx-nim2) par le nom de domaine complet (FQDN) ou l’adresse IP de votre instance NGINX Management Suite (dans notre cas, nim2.f5.ff.lan).
  • NIM_GRPC_PORT – (Facultatif) Remplacez le port par défaut (443) par un autre numéro de port 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 séparées par des virgules pour l’instance NGINX Plus.
  • Toujours dans la section « spec.template.spec.containers.env », décommentez les paires de champs name‑value suivantes si la condition indiquée s’applique :
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"
  • 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 section « Création de l’image Docker »), la valeur est donc "true".
  • ACM_DEVPORTAL – La prise en charge du portail des développeurs d’App Connectivity Manager est incluse dans l’image (vous avez inclus l’option -d à l’étape 3 de la section Création de l’image Docker), la valeur est donc "true".
  1. Exécutez le script nginxwithAgentStart.sh comme indiqué afin d’appliquer le manifeste et de démarrer deux pods (comme spécifié par l’instruction replicas: 2 dans la section spec du manifeste), chacun exécutant NGINX Plus et NGINX Agent :
$ ./scripts/nginxWithAgentStart.sh start$ ./scripts/nginxWithAgentStart.sh stop
  1. 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 afin de communiquer avec le plan de contrôle de 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
  1. Accédez à l’interface graphique de NGINX Instance Manager dans NGINX Management Suite et vérifiez que deux instances NGINX Plus sont en cours d’exécution avec l’état En ligne. Dans cet exemple, le WAF NGINX App Protect n’est pas activé.
    Capture d’écran de la fenêtre de vue d’ensemble des instances dans NGINX Management Suite Instance Manager version 2.7.0


Partager
Mots-clés : F5 NGINX, Tech, 2023

À propos de l’auteur

Fabrizio Fiorucci
Fabrizio FiorucciArchitecte de solutions NGINX | F5 (EMEA)

Autres articles de Fabrizio Fiorucci

Articles de blog associés

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA
NGINX | 13/10/2025

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA

Découvrez les principaux enseignements tirés des réponses à l’enquête annuelle F5 NGINX sur les dernières tendances en matière de technologies cloud natives, de sécurité, d’ingénierie de plateforme et d’IA.

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?
NGINX | 03/11/2023

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?

Lorsque de nouvelles CVE sont signalées, il est facile de ne plus savoir si elles concernent un outil de contrôleur Ingress NGINX particulier, car il existe plusieurs projets. Cet article présente les CVE et explique comment distinguer les différents projets de contrôleurs Ingress afin de dissiper toute confusion.

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX
NGINX | 11/03/2020

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX

Votre API répond-elle aux requêtes en moins de 30 ms ? Si ce n’est pas le cas, il ne s’agit pas d’une API en temps réel offrant la faible latence exigée par la grande majorité des organisations. Mesurez la latence de votre API avec l’outil rtapi de NGINX et découvrez comment NGINX peut l’aider à offrir une réactivité en temps réel.

Un testeur d’expressions régulières pour NGINX et NGINX Plus
NGINX | 11/06/2019

Un testeur d’expressions régulières pour NGINX et NGINX Plus

Le testeur d’expressions régulières (regex) pour NGINX et NGINX Plus vous évite de tâtonner en vous indiquant si une expression régulière utilisée dans un bloc location ou map correspond aux valeurs comme prévu. Il génère la configuration appropriée et affiche les valeurs des groupes de capture.

Caches partagés avec les clusters de cache NGINX Plus, partie 1
NGINX | 24/01/2017

Caches partagés avec les clusters de cache NGINX Plus, partie 1

Optimisez la capacité de votre cache web en le répartissant entre plusieurs serveurs de cache web NGINX ou NGINX Plus. Découvrez comment procéder dans cet article.

Introduction aux microservices
NGINX | 19/05/2015

Introduction aux microservices

Les microservices suscitent actuellement beaucoup d’intérêt. Cet article de blog est le premier d’une série de sept consacrée à la conception, au développement et au déploiement de microservices.