BLOG | NGINX

Creación de una imagen Docker de NGINX Plus con el Agente NGINX para Kubernetes

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Fabrizio Fiorucci
Fabricio Fiorucci
Publicado el 18 de abril de 2023

F5 NGINX Management Suite es una familia de módulos para administrar el plano de datos NGINX desde un único panel. Al simplificar la gestión de las instancias NGINX Open Source y NGINX Plus, NGINX Management Suite simplifica sus procesos para escalar, proteger y monitorear aplicações y API.

Debe instalar el Agente NGINX en cada instancia NGINX que desee administrar desde NGINX Management Suite, para habilitar la comunicación con el plano de control y la administración de la configuración remota.

Para las instancias de NGINX que se ejecutan en hardware o en una máquina virtual (VM), proporcionamos instrucciones de instalación en nuestra documentación. En esta publicación mostramos cómo construir una imagen Docker para NGINX Plus y NGINX Agent, para ampliar el alcance de NGINX Management Suite a las instancias NGINX Plus implementadas en Kubernetes u otras infraestructuras de microservicios.

Hay tres opciones de compilación, según lo que desee incluir en la imagen de Docker resultante:

[ Editor : esta publicación se actualizó en abril de 2023 para aclarar las instrucciones y agregar el campo ACM_DEVPORTAL en el Paso 1 de Ejecución de la imagen de Docker en Kubernetes ].

Requisitos previos

Proporcionamos un repositorio de GitHub de los recursos que necesita para crear una imagen Docker de NGINX Plus y NGINX Agent, con soporte para la versión 2.8.0 y posteriores del módulo Instance Manager de NGINX Management Suite.

Para crear la imagen de Docker, necesitas:

  • Un host Linux (bare metal o VM)
  • Docker 20.10+
  • Un registro privado al que puedes enviar la imagen Docker de destino
  • Una instancia de NGINX Management Suite en ejecución con Instance Manager y API Connectivity Manager si desea aprovechar el soporte para el portal para desarrolladores
  • Una suscripción ( o prueba gratuita de 30 días ) para NGINX Plus y, opcionalmente, NGINX App Protect

Para ejecutar la imagen de Docker, necesitas:

  • Un clúster de Kubernetes en ejecución
  • kubectl con acceso al clúster de Kubernetes

Construyendo la imagen de Docker

Siga estas instrucciones para crear la imagen de Docker.

  1. Clonar el repositorio de GitHub:

    $ git clone https://github.com/nginxinc/NGINX-Demos Clonando en 'NGINX-Demos'... remoto: Enumeración de objetos: 126, listo. remoto: Contando objetos: 100% (126/126), hecho. remoto: Comprimiendo objetos: 100% (85/85), hecho. remoto: Total 126 (delta 61), reutilizados 102 (delta 37), paquete reutilizado 0 Objetos recibidos: 100% (126/126), 20,44 KiB | 1,02 MiB/s, listo. 
    Resolviendo deltas: 100% (61/61), listo.
    
  2. Cambiar al directorio de compilación:

    $ cd NGINX-Demos/nginx-agent-docker/
    
  3. Ejecute docker ps para verificar que Docker se esté ejecutando y luego ejecute el script build.sh para incluir el software deseado en la imagen de Docker. Las opciones base son:

    • -C – Nombre del archivo de certificado de licencia de NGINX Plus ( nginx-repo.crt en los comandos de muestra a continuación)
    • -K – Nombre del archivo de clave de licencia de NGINX Plus ( nginx-repo.key en los comandos de muestra a continuación)
    • -t – El registro y la imagen de destino en formato

      <nombre_del_registro>/<nombre_de_imagen>:<etiqueta>

      ( register.ff.lan:31005/nginx-plus-with-agent:2.7.0 en los comandos de muestra a continuación)

    • -n – URL base de su instancia de NGINX Management Suite ( https://nim.f5.ff.lan en los comandos de muestra a continuación)

    Las opciones adicionales son:

    • -d – Agregar compatibilidad con el plano de datos para el portal para desarrolladores al usar NGINX API Connectivity Manager
    • -w – Agregar NGINX App Protect WAF

    Aquí están los comandos para las diferentes combinaciones de software:

    • NGINX Plus y NGINX Agente:

      $ ./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 y NGINX App Protect WAF (agregue la opción -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
      
    • Compatibilidad con NGINX Plus, NGINX Agent y portal para desarrolladores (agregue la opción -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
      

    A continuación se muestra un ejemplo de seguimiento de la creación de una imagen básica. El mensaje de compilación completa al final indica que la compilación fue exitosa.

    $ ./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 => La imagen de Docker de destino es nginx-plus-with-agent:2.7.0 [+] Compilando 415.1s (10/10) TERMINADO => [interno] cargar definición de compilación desde Dockerfile => transfiriendo dockerfile: 38B => [interno] cargar .dockerignore => transfiriendo contexto: 2B => [interno] cargar metadatos para docker.io/library/centos:7 => [auth] library/centos:pull token para registry-1.docker.io => EN CACHE [1/4] DESDE docker.io/library /centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 => [interno] cargar contexto de compilación => transfiriendo contexto: 69B => [2/4] EJECUTAR 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 => exportando a imagen => exportando capas => escribiendo imagen sha256:9246de4af659596a290b078e6443a19b8988ca77f36ab90af3b67c03d27068ff => nombrando a registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 => Compilación completada para registry.ff.lan:31005/nginx-plus-with-agent:2.7.0
    

    Ejecución de la imagen de Docker en Kubernetes

    Siga estas instrucciones para preparar el manifiesto de implementación e iniciar NGINX Plus con NGINX Agent en Kubernetes.

    1. Usando su editor de texto preferido, abra manifests/1.nginx-with-agent.yaml y realice los siguientes cambios (los fragmentos de código muestran los valores predeterminados que puede o debe cambiar, resaltados en naranja):

      • En la sección spec.template.spec.containers , reemplace el nombre de la imagen predeterminada ( your.registry.tld/nginx-with-nim2-agent:tag ) con el nombre de la imagen de Docker que especificó con la opción -t en el Paso 3 de Creación de la imagen de Docker (en nuestro caso, registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 ):

        especificación: ... plantilla: ... especificación: contenedores: - nombre: nginx-nim imagen: your.registry.tld/nginx-with-nim2-agent:tag
        
      • En la sección spec.template.spec.containers.env , realice estas sustituciones en el campo de valor para cada nombre indicado:

        • NIM_HOST – (Obligatorio) Reemplace el valor predeterminado ( nginx-nim2.nginx-nim2 ) con el FQDN o la dirección IP de su instancia de NGINX Management Suite (en nuestro caso nim2.f5.ff.lan ).
        • NIM_GRPC_PORT – (Opcional) Reemplace el valor predeterminado (443 ) con un número de puerto diferente para el tráfico gRPC.
        • NIM_INSTANCEGROUP – (Opcional) Reemplace el valor predeterminado ( lab ) con el grupo de instancias al que pertenece la instancia de NGINX Plus.
        • NIM_TAGS – (Opcional) Reemplace el valor predeterminado ( preprod,devops ) con una lista de etiquetas delimitadas por comas para la instancia NGINX Plus.
        especificación: ... plantilla: ... especificación: contenedores: ... entorno: - nombre: NIM_HOST ... valor: " nginx-nim2.nginx-nim2 " - nombre: Valor de NIM_GRPC_PORT: "443 " - nombre: Valor NIM_INSTANCEGROUP: " lab " - nombre: Valor de NIM_TAGS: " preprod,devops "
        
      • También en la sección spec.template.spec.containers.env , descomente estos pares de campos de nombre - valor si se aplica la condición indicada:

        • NIM_WAF y NIM_WAF_PRECOMPILED_POLICIES : NGINX App Protect WAF está incluido en la imagen (incluyó la opción -w en el Paso 3 de Creación de la imagen de Docker ), por lo que el valor es "verdadero" .
        • ACM_DEVPORTAL : la compatibilidad con el portal para desarrolladores de App Connectivity Manager está incluida en la imagen (incluyó la opción -d en el Paso 3 de Creación de la imagen de Docker ), por lo que el valor es "true" .
        especificación: ... plantilla: ... especificación: contenedores: ... entorno: - nombre: NIM_HOST ... #- nombre: NAP_WAF # valor: "verdadero" #- nombre: NAP_WAF_PRECOMPILED_POLICIES # valor: "verdadero" ... #- nombre: ACM_DEVPORTAL # valor: "verdadero"
        
    2. Ejecute el script nginxwithAgentStart.sh como se indica para aplicar el manifiesto e iniciar dos pods (según lo especificado por las réplicas:2 instrucciones en la sección de especificaciones del manifiesto), cada uno con NGINX Plus y NGINX Agent:

      $ ./scripts/nginxWithAgentStart.sh inicio $ ./scripts/nginxWithAgentStart.sh fin
      
    3. Verifique que ahora se estén ejecutando dos pods: cada pod ejecuta una instancia NGINX Plus y un agente NGINX para comunicarse con el plano de control de NGINX Management Suite.

      $ kubectl get pods -n nim-test NOMBRE LISTO ESTADO REINICIO EDAD nginx-nim-7f77c8bdc9-hkkck 1/1 En ejecución 0 1m nginx-nim-7f77c8bdc9-p2s94 1/1 En ejecución 0 1m
      
    4. Acceda a la GUI del Administrador de instancias de NGINX en NGINX Management Suite y verifique que dos instancias de NGINX Plus se estén ejecutando con el estado En línea . En este ejemplo, NGINX App Protect WAF no está habilitado.

      Captura de pantalla de la ventana Descripción general de instancias en NGINX Management Suite Instance Manager versión 2.7.0

    Introducción

    Para probar las soluciones NGINX analizadas en esta publicación, comience hoy mismo una prueba gratuita de 30 días o contáctenos para analizar sus casos de uso :

    Descargue NGINX Agent : es gratis y de código abierto.


"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.