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

NGINX | 18 de abril de 2023

F5 NGINX Management Suite es una familia de módulos que permite gestionar el plano de datos de NGINX desde una única interfaz. Al simplificar la gestión de las instancias de NGINX Open Source y NGINX Plus, NGINX Management Suite facilita los procesos de escalado, protección y supervisión de aplicaciones y API.

Debe instalar NGINX Agent en cada instancia de NGINX que quiera gestionar desde NGINX Management Suite para permitir la comunicación con el plano de control y la gestión remota de la configuración.

Para las instancias de NGINX que se ejecutan en servidores físicos o en una máquina virtual (VM), proporcionamos instrucciones de instalación en nuestra documentación. En este artículo mostramos cómo crear una imagen de Docker para NGINX Plus y NGINX Agent, con el fin de ampliar el alcance de NGINX Management Suite a las instancias de NGINX Plus implementadas en Kubernetes u otras infraestructuras de microservicios.

Hay tres opciones de compilación, en función de lo que quiera incluir en la imagen de Docker resultante:

[Editor : Esta entrada se actualizó en abril de 2023 para aclarar las instrucciones y añadir 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 con los recursos necesarios para crear una imagen de Docker de NGINX Plus y NGINX Agent, compatible con la versión 2.8.0 y posteriores del módulo Instance Manager de NGINX Management Suite.

Para crear la imagen de Docker, necesita:

  • Un host Linux (servidor físico o máquina virtual)
  • Docker 20.10+
  • Un registro privado al que pueda enviar la imagen de Docker de destino
  • Una instancia de NGINX Management Suite en ejecución con Instance Manager y API Connectivity Manager si desea aprovechar la compatibilidad con el portal para desarrolladores
  • Una suscripción (o una prueba gratuita de 30 días) a NGINX Plus y, opcionalmente, a 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

Creación de la imagen de Docker

Sigue estas instrucciones para crear la imagen de Docker.

  1. Clona el repositorio de 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. Cambia al directorio de compilación:
$ cd NGINX-Demos/nginx-agent-docker/
  1. Ejecute docker ps para comprobar que Docker se está ejecutando y, a continuación, ejecute el script build.sh para incluir el software deseado en la imagen de Docker. Las opciones básicas son: Las opciones adicionales son: Estos son los comandos para las distintas combinaciones de software: A continuación se muestra un ejemplo del registro de compilación de una imagen básica. El mensaje Build complete que aparece al final indica que la compilación se ha realizado correctamente.
$ ./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. Ejecución de la imagen de Docker en Kubernetes Siga estas instrucciones para preparar el manifiesto de Deployment e iniciar NGINX Plus con NGINX Agent en Kubernetes. Primeros pasos Para probar las soluciones de NGINX descritas en este artículo, inicie hoy mismo una prueba gratuita de 30 días o póngase en contacto con nosotros para hablar sobre sus casos de uso: Descargue NGINX Agent; es gratuito y de código abierto.
    • ‑C – Nombre del archivo de certificado de licencia de NGINX Plus (nginx-repo.crt en los comandos de ejemplo que aparecen a continuación)
    • ‑K – Nombre del archivo de clave de licencia de NGINX Plus (nginx-repo.key en los comandos de ejemplo que aparecen a continuación)
    • ‑t – El registro y la imagen de destino con el formato <registry_name>/<image_name>:<tag> (registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 en los comandos de ejemplo que aparecen a continuación)
    • ‑n – URL base de su instancia de NGINX Management Suite (https://nim.f5.ff.lan en los comandos de ejemplo que aparecen a continuación)
    • ‑d – Añade compatibilidad con el plano de datos para el portal para desarrolladores al utilizar NGINX API Connectivity Manager
    • ‑w – Añadir NGINX App Protect WAF
    • NGINX Plus y 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 y NGINX App Protect WAF (añada 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 el portal para desarrolladores (añada 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
  1. Con 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, sustituya el nombre de imagen predeterminado (your.registry.tld/nginx-with-nim2-agent:tag) por 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):
spec:
  ...
  template:
    ...    
    spec:
      containers:
      - name: nginx-nim
        image: your.registry.tld/nginx-with-nim2-agent:tag
  • En la sección spec.template.spec.containers.env, realice estas sustituciones en el campo value para cada name indicado:
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 – (Obligatorio) Sustituya el valor predeterminado (nginx-nim2.nginx-nim2) por 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) Sustituya el valor predeterminado (443) por un número de puerto diferente para el tráfico gRPC.
  • NIM_INSTANCEGROUP – (Opcional) Sustituya el valor predeterminado (lab) por el grupo de instancias al que pertenece la instancia de NGINX Plus.
  • NIM_TAGS – (Opcional) Sustituya el valor predeterminado (preprod,devops) por una lista de etiquetas separadas por comas para la instancia de NGINX Plus.
  • También en la sección spec.template.spec.containers.env, quite los comentarios de estos pares de campos name‑value si se cumple la condición indicada:
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 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 "true".
  • ACM_DEVPORTAL – La imagen incluye compatibilidad con el portal para desarrolladores de App Connectivity Manager (se incluyó la opción -d en el paso 3 de Creación de la imagen de Docker), por lo que el valor es "true".
  1. Ejecute el script nginxwithAgentStart.sh como se indica para aplicar el manifiesto e iniciar dos pods (tal como especifica la instrucción replicas: 2 en la sección spec del manifiesto), cada uno con NGINX Plus y NGINX Agent:
$ ./scripts/nginxWithAgentStart.sh start$ ./scripts/nginxWithAgentStart.sh stop
  1. Compruebe que ahora se estén ejecutando dos pods: cada pod ejecuta una instancia de NGINX Plus y un NGINX Agent para comunicarse con el plano de control 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. Acceda a la interfaz gráfica de NGINX Instance Manager en NGINX Management Suite y compruebe que haya dos instancias de NGINX Plus en ejecución con el estado En línea. En este ejemplo, NGINX App Protect WAF no está habilitado.
    Captura de pantalla de la ventana de resumen de instancias de NGINX Management Suite Instance Manager, versión 2.7.0


Compartir
Etiquetas: F5 NGINX, Tech, 2023

Sobre el autor

Fabrizio Fiorucci
Fabrizio FiorucciArquitecto de soluciones NGINX | F5 (EMEA)

Más artículos de Fabrizio Fiorucci

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.