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

NGINX | 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 de NGINX, que permite configurar, escalar, proteger y supervisar aplicaciones de usuario y API REST en el plano de datos de NGINX desde una única interfaz.

NGINX Management Suite tiene un diseño modular: en su núcleo se encuentra el módulo Instance Manager, que permite supervisar, configurar y obtener visibilidad de toda su flota de instancias de NGINX Open Source y NGINX Plus. En el momento de redactar este artículo, API Connectivity Manager es el otro módulo disponible, que se utiliza para gestionar y orquestar NGINX Plus cuando funciona como puerta de enlace de API.

NGINX Management Suite puede ejecutarse directamente en un servidor físico, como una máquina virtual Linux o en un contenedor. La forma recomendada de implementarlo en Kubernetes es mediante el chart de Helm que proporcionamos, pero para fines específicos puede que necesite crear su propia imagen de Docker y gestionar su ciclo de vida mediante una canalización de CI/CD personalizada que no dependa necesariamente de Helm.

[Editor – Esta entrada 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 con los recursos necesarios para crear una imagen de Docker para NGINX Management Suite, compatible con estas versiones de Instance Manager y API Connectivity Manager:

  • Instance Manager 2.4.0+
  • API Connectivity Manager 1.0.0+
  • Supervisión de seguridad 1.0.0+

Para crear la imagen de Docker, necesitas:

  • 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 suscripción (o una prueba gratuita de 30 días) a 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 una prueba gratuita de 30 días) para NGINX Ingress Controller basado en NGINX Plus

Creación de la imagen de Docker

Sigue estas instrucciones para crear la imagen de Docker.

Nota: Hemos hecho todo lo posible por representar fielmente la interfaz de usuario de NGINX Management Suite en el momento de la publicación, pero esta puede cambiar. Utilice estas instrucciones como referencia y adáptelas a la interfaz actual según sea necesario.

  1. Clone 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.
  1. Cambia al directorio de compilación:
$ cd NGINX-Demos/nginx-nms-docker/
  1. Ejecute docker ps para comprobar que Docker se está ejecutando y, a continuación, ejecute el script buildNIM.sh para crear la imagen de Docker. La opción ‑i establece el modo de compilación automatizada; ‑C y ‑K son opciones obligatorias que indican, respectivamente, el certificado y la clave de NGINX Management Suite; 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 Deployment 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 en el portapapeles:
$ base64 -w0 nginx-mgmt-suite.licTulNRS1WZXJz...
  1. Con su editor preferido, abra manifests/1.nginx-nim.yaml y realice los siguientes cambios:
    • En la sección spec.template.spec.containers, sustituya el nombre de imagen predeterminado (your.registry.tld/nginx-nim2:tag) por 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 value para cada name indicado:
spec:  ...
  template:
    ...
      spec:
        containers:
          ...
          env:
            ...
            - name: NIM_USERNAME
              value: admin
            - name: NIM_PASSWORD
              value: nimadmin
            - name: NIM_LICENSE
              value: "<BASE64_ENCODED_LICENSE_FILE>"
  • NIM_USERNAME – (Opcional) Sustituya el valor predeterminado admin por el nombre de una cuenta de administrador.
  • NIM_PASSWORD – (Obligatorio) Sustituya el valor predeterminado nimadmin por una contraseña segura.
  • NIM_LICENSE – (Obligatorio) Sustituya el valor predeterminado <BASE64_ENCODED_LICENSE_FILE> por la licencia codificada en base64 que generó en el paso 1 anterior.
  1. Compruebe y modifique los archivos de manifests/certs para personalizar el certificado y la clave TLS utilizados para la descarga de TLS; para ello, establezca el FQDN que desee utilizar. De forma predeterminada, el script de inicio nimDockerStart.sh publica NGINX Management Suite en contenedores mediante NGINX Ingress Controller.
  2. Opcionalmente, edite manifests/3.vs.yaml y personalice los nombres de host utilizados para acceder a NGINX Management Suite.
  3. Ejecute nimDockerStart.sh para iniciar NGINX Management Suite en su clúster de Kubernetes. Como se indica en el registro, se ejecuta como el pod nginx-nim2. El script también inicializa pods para ClickHouse como base de datos de backend y Grafana para visualizar los análisis. Para obtener más información, consulte el archivo README del 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
  1. Comprueba 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, vaya en un navegador a https://nim2.f5.ff.lan (o al nombre de host alternativo que configuró en el paso 4 de la sección anterior). Inicie sesión con las credenciales que configuró en el paso 2 de la sección anterior.

Detener NGINX Management Suite

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

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

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:


Compartir

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.