BLOG | NGINX

Creación de una imagen de Docker para implementar NGINX Management Suite sin Helm

Miniatura de Fabrizio Fiorucci
Fabricio Fiorucci
Publicado el 27 de febrero de 2023

A principios de este año , presentamos NGINX Management Suite como nuestro nuevo plano de control para las soluciones de software NGINX, lo que le permite configurar, escalar, proteger y monitorear las aplicaciones de usuario y las API REST en el plano de datos NGINX desde un solo panel.

NGINX Management Suite tiene un diseño modular: en su núcleo se encuentra el módulo Instance Manager , que proporciona seguimiento, configuración y visibilidad para toda su flota de instancias NGINX Open Source y NGINX Plus. Al momento de escribir este artículo, API Connectivity Manager es el otro módulo disponible, utilizado para administrar y orquestar el funcionamiento de NGINX Plus como puerta de enlace de API.

NGINX Management Suite puede ejecutarse en hardware real, como una máquina virtual Linux o en contenedores. La forma recomendada de implementarlo en Kubernetes es usando el diagrama de Helm que proporcionamos, pero para fines específicos es posible que necesite crear su propia imagen de Docker y administrar su ciclo de vida a través de una canalización CI/CD personalizada que no necesariamente dependa de Helm.

[ Editor : esta publicación se actualizó en febrero de 2023 para automatizar por completo el proceso de creación de la imagen de Docker].

Requisitos previos

Proporcionamos un repositorio de GitHub de los recursos que necesita para crear una imagen de Docker para NGINX Management Suite, con soporte para estas versiones de Instance Manager y API Connectivity Manager:

  • Administrador de instancias 2.4.0+
  • Administrador de conectividad API 1.0.0+
  • Monitoreo de seguridad 1.0.0+

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 suscripción ( o prueba gratuita de 30 días ) para NGINX Management Suite

Para ejecutar la imagen de Docker, necesitas:

  • Un clúster de Kubernetes en ejecución
  • kubectl con acceso al clúster de Kubernetes
  • Una suscripción ( o prueba gratuita de 30 días ) para el controlador de ingreso NGINX basado en NGINX Plus

Construyendo la imagen de Docker

Siga estas instrucciones para crear la imagen de Docker.

Nota:  Hemos hecho todo lo posible para representar con precisión la interfaz de usuario de NGINX Management Suite en el momento de la publicación, pero la interfaz de usuario está sujeta a cambios. Utilice estas instrucciones como referencia y adáptelas a la interfaz de usuario actual según sea necesario.

  1. Clonar el repositorio de GitHub:

    $ git clone https://github.com/nginxinc/NGINX-DemosCloning into 'NGINX-Demos'... 
    remote: Enumerating objects: 215, done. 
    remote: Counting objects: 100% (215/215), done. 
    remote: Compressing objects: 100% (137/137), done. 
    remote: Total 215 (delta 108), reused 171 (delta 64), pack-reused 0 
    Receiving objects: 100% (215/215), 2.02 MiB | 1.04 MiB/s, done. 
    Resolving deltas: 100% (108/108), done.
  2. Cambiar al directorio de compilación:

    $ cd NGINX-Demos/nginx-nms-docker/
  3. Ejecute docker ps para verificar que Docker se esté ejecutando y luego ejecute el script buildNIM.sh para compilar la imagen de Docker. La opción -i establece el modo de compilación automatizado, -C y -K son opciones obligatorias que nombran el certificado y la clave de NGINX Management Suite respectivamente, y la opción -t especifica la ubicación y el nombre del registro privado al que se envía la imagen.

    $ ./scripts/buildNIM.sh -i -C nginx-repo.crt -K nginx-repo.key -t registry.ff.lan:31005/nginx-nms:2.5.1 
    ==> Building NGINX Management Suite docker image 
    Sending build context to Docker daemon  92.19MB 
    Step 1/18 : FROM ubuntu:22.04 
    ---> a8780b506fa4 
    Step 2/18 : ARG NIM_DEBFILE 
    ---> Running in 0f2354280c34 
    Removing intermediate container 0f2354280c34
    [...]
    ---> 0588a050c852 
    Step 18/18 : CMD /deployment/startNIM.sh 
    ---> Running in d0cc5466a43d 
    Removing intermediate container d0cc5466a43d 
    ---> 25117ec0410a 
    Successfully built 25117ec0410a 
    Successfully tagged registry.ff.lan:31005/nginx-nms:2.5.1 
    The push refers to repository [registry.ff.lan:31005/nginx-nms] 
    9c4918474e3a: Pushed
    42543d044dbb: Pushed
    1621b2ec0a5e: Pushed
    c6a464fc6a79: Pushed
    75fa1d3c61bb: Pushed
    3501fcf5dbd8: Pushed
    d4a221057e67: Pushed
    9ad05eafed57: Pushed
    f4a670ac65b6: Pushed
    2.5.1: digest: sha256:9a70cfdb63b71dc31ef39e4f20a1420d8202c85784cb037b45dc0e884dad74c9 size: 2425

Ejecución de NGINX Management Suite en Kubernetes

Siga estas instrucciones para preparar el manifiesto de implementación e iniciar NGINX Management Suite en Kubernetes.

  1. Codifique en Base64 la licencia de NGINX Management Suite que descargó en el paso 4 de la sección anterior y copie el resultado al portapapeles:

    $ base64 -w0 nginx-mgmt-suite.licTulNRS1WZXJz...
  2. Usando su editor favorito, abra manifests/1.nginx-nim.yaml y realice los siguientes cambios:

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

      spec:  ...
        template:
      	...
      	spec:
        	containers:
            - name: nginx-nim2
      	    image: your.registry.tld/nginx-nim2:tag
    • En la sección spec.template.spec.containers.env , configure las credenciales de autenticación realizando estas sustituciones en el campo de valor para cada nombre indicado:

      • NIM_USERNAME – (Opcional) Reemplace el administrador predeterminado con un nombre de cuenta de administrador.
      • NIM_PASSWORD – (Obligatorio) Reemplace el nimadmin predeterminado con una contraseña segura.
      • LICENCIA NIM – (Obligatorio) Reemplazar el valor predeterminado <ARCHIVO DE LICENCIA CODIFICADO EN BASE64> con la licencia codificada en base64 que generó en el Paso 1 anterior.
      spec:  ...
        template:
          ...
            spec:
              containers:
                ...
                env:
                  ...
                  - name: NIM_USERNAME
                    value: admin
                  - name: NIM_PASSWORD
                    value: nimadmin
                  - name: NIM_LICENSE
                    value: "<BASE64_ENCODED_LICENSE_FILE>"
  3. Verifique y modifique los archivos en manifiestos/certificados para personalizar el certificado TLS y la clave utilizados para la descarga TLS configurando el FQDN que desea utilizar. De forma predeterminada, el script de inicio nimDockerStart.sh publica NGINX Management Suite en contenedor a través del controlador de ingreso NGINX.
  4. Opcionalmente, edite manifests/3.vs.yaml y personalice los nombres de host utilizados para acceder a NGINX Management Suite.

  5. Ejecute nimDockerStart.sh para iniciar NGINX Management Suite en su clúster de Kubernetes. Como se indica en el seguimiento, se ejecuta como el pod nginx-nim2 . El script también inicializa pods para ClickHouse como base de datos de backend y Grafana para la visualización de análisis. Para obtener más información, consulte el archivo README en el repositorio de GitHub.

    $ ./scripts/nimDockerStart.sh start namespace/nginx-nim2 created 
    ~/NGINX-NIM2-Docker/manifests/certs ~/NGINX-NIM2-Docker 
    Generating a RSA private key 
    .....................................+++++ 
    .....................................+++++ 
    writing new private key to 'nim2.f5.ff.lan.key' 
    ----- 
    secret/nim2.f5.ff.lan created 
    configmap/clickhouse-conf created 
    configmap/clickhouse-users created 
    persistentvolumeclaim/pvc-clickhouse created 
    deployment.apps/clickhouse created 
    service/clickhouse created 
    deployment.apps/nginx-nim2 created 
    service/nginx-nim2 created 
    service/nginx-nim2-grpc created 
    persistentvolumeclaim/pvc-grafana-data created 
    persistentvolumeclaim/pvc-grafana-log created 
    deployment.apps/grafana created 
    service/grafana created 
    virtualserver.k8s.nginx.org/nim2 created 
    virtualserver.k8s.nginx.org/grafana created 
    ~/NGINX-NIM2-Docker
  6. Verifique que ahora se estén ejecutando tres pods:

    $ kubectl get pods -n nginx-nim2 NAME                        READY     STATUS    RESTARTS   AGE 
    clickhouse-759b65db8c-74pn5   1/1     Running   0          63s 
    grafana-95fbbf5c-jczgk        1/1     Running   0          63s 
    nginx-nim2-5f54664754-lrhmn   1/1     Running   0          63s

Acceso a NGINX Management Suite

Para acceder a NGINX Management Suite, navegue en un navegador a https://nim2.f5.ff.lan (o el nombre de host alternativo que configuró en el Paso 4 de la sección anterior). Inicie sesión utilizando las credenciales que configuró en el Paso 2 de la sección anterior.

Detener NGINX Management Suite

Para detener y eliminar la instancia Docker de NGINX Management Suite, ejecute este comando:

$ ./scripts/nimDockerStart.sh stop namespace "nginx-nim2" deleted

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:


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