BLOG | NGINX

Criando uma imagem Docker para implantar o NGINX Management Suite sem o Helm

Fabrizio Fiorucci Miniatura
Fabrizio Fiorucci
Publicado em 27 de fevereiro de 2023

No início deste ano, apresentamos o NGINX Management Suite como nosso novo plano de controle para soluções de software NGINX, permitindo que você configure, dimensione, proteja e monitore aplicativos de usuário e APIs REST no plano de dados NGINX a partir de um único painel de controle.

O NGINX Management Suite tem um design modular: em seu núcleo está o módulo Instance Manager , que fornece rastreamento, configuração e visibilidade para toda a sua frota de instâncias NGINX Open Source e NGINX Plus. No momento em que este artigo foi escrito, o API Connectivity Manager era o outro módulo disponível, usado para gerenciar e orquestrar o NGINX Plus em execução como um gateway de API.

O NGINX Management Suite pode ser executado em bare metal, como uma máquina virtual Linux ou em contêiner. A maneira recomendada de implantá-lo no Kubernetes é usar o gráfico Helm que fornecemos, mas, para fins específicos, pode ser necessário criar sua própria imagem do Docker e gerenciar seu ciclo de vida por meio de um pipeline de CI/CD personalizado que não depende necessariamente do Helm.

[ Editor – Esta postagem foi atualizada em fevereiro de 2023 para automatizar totalmente o processo de construção da imagem do Docker.]

Pré-requisitos

Fornecemos um repositório GitHub dos recursos necessários para criar uma imagem do Docker para o NGINX Management Suite, com suporte para estas versões do Instance Manager e do API Connectivity Manager:

  • Gerenciador de instâncias 2.4.0+
  • Gerenciador de conectividade de API 1.0.0+
  • Monitoramento de Segurança 1.0.0+

Para construir a imagem do Docker, você precisa:

  • Um host Linux (bare metal ou VM)
  • Docker 20.10+
  • Um registro privado para o qual você pode enviar a imagem Docker de destino
  • Uma assinatura ( ou teste gratuito de 30 dias ) para o NGINX Management Suite

Para executar a imagem do Docker, você precisa:

  • Um cluster Kubernetes em execução
  • kubectl com acesso ao cluster Kubernetes
  • Uma assinatura ( ou teste gratuito de 30 dias ) para o NGINX Ingress Controller baseado no NGINX Plus

Construindo a imagem do Docker

Siga estas instruções para criar a imagem do Docker.

Observação:  Fizemos todos os esforços para representar com precisão a interface do usuário do NGINX Management Suite no momento da publicação, mas a interface do usuário está sujeita a alterações. Use estas instruções como referência e adapte-as à interface do usuário atual conforme necessário.

  1. Clone o repositório 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. Mude para o diretório de construção:

    $ cd NGINX-Demos/nginx-nms-docker/
  3. Execute docker ps para verificar se o Docker está em execução e, em seguida, execute o script buildNIM.sh para criar a imagem do Docker. A opção ‑i define o modo de compilação automatizado, ‑C e ‑K são opções obrigatórias que nomeiam o certificado e a chave do NGINX Management Suite, respectivamente, e a opção ‑t especifica o local e o nome do registro privado para o qual a imagem é enviada.

    $ ./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

Executando o NGINX Management Suite no Kubernetes

Siga estas instruções para preparar o manifesto de implantação e iniciar o NGINX Management Suite no Kubernetes.

  1. Codifique em Base64 a licença do NGINX Management Suite que você baixou na Etapa 4 da seção anterior e copie a saída para a área de transferência:

    $ base64 -w0 nginx-mgmt-suite.licTulNRS1WZXJz...
  2. Usando seu editor favorito, abra manifests/1.nginx-nim.yaml e faça as seguintes alterações:

    • Na seção spec.template.spec.containers , substitua o nome da imagem padrão ( your.registry.tld/nginx-nim2:tag ) pelo nome da imagem do Docker que você especificou com a opção ‑t na Etapa 3 da seção anterior (no nosso caso, registry.ff.lan:31005/nginx-nms:2.5.1 ):

      spec:  ...
        template:
      	...
      	spec:
        	containers:
            - name: nginx-nim2
      	    image: your.registry.tld/nginx-nim2:tag
    • Na seção spec.template.spec.containers.env , configure as credenciais de autenticação fazendo estas substituições no campo de valor para cada nome indicado:

      • NIM_USERNAME – (Opcional) Substitua o administrador padrão por um nome de conta de administrador.
      • NIM_PASSWORD – (Obrigatório) Substitua o nimadmin padrão por uma senha forte.
      • LICENÇA_NIM – (Obrigatório) Substituir o padrão <ARQUIVO_DE_LICENÇA_CODIFICADO_BASE64> com a licença codificada em base64 que você gerou na Etapa 1 acima.
      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 e modifique os arquivos em manifestos/certificados para personalizar o certificado TLS e a chave usada para o descarregamento TLS, definindo o FQDN que deseja usar. Por padrão, o script de inicialização nimDockerStart.sh publica o NGINX Management Suite em contêiner por meio do NGINX Ingress Controller.
  4. Opcionalmente, edite manifests/3.vs.yaml e personalize os nomes de host usados para acessar o NGINX Management Suite.

  5. Execute nimDockerStart.sh para iniciar o NGINX Management Suite no seu cluster Kubernetes. Conforme indicado no rastreamento, ele é executado como o pod nginx-nim2 . O script também inicializa pods para o ClickHouse como banco de dados de back-end e o Grafana para visualização analítica. Para mais informações, consulte o README no repositório do 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 se três pods estão em execução:

    $ 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

Acessando o NGINX Management Suite

Para acessar o NGINX Management Suite, navegue em um navegador até https://nim2.f5.ff.lan (ou o nome de host alternativo que você definiu na Etapa 4 da seção anterior). Faça login usando as credenciais que você definiu na Etapa 2 da seção anterior.

Parando o NGINX Management Suite

Para parar e remover a instância do Docker do NGINX Management Suite, execute este comando:

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

Iniciar

Para experimentar as soluções NGINX discutidas nesta postagem, inicie um teste gratuito de 30 dias hoje mesmo ou entre em contato conosco para discutir seus casos de uso:


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."