BLOG | NGINX

Construindo uma imagem Docker do NGINX Plus com o NGINX Agent para Kubernetes

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Fabrizio Fiorucci Miniatura
Fabrizio Fiorucci
Publicado em 18 de abril de 2023

O F5 NGINX Management Suite é uma família de módulos para gerenciar o plano de dados NGINX a partir de um único painel de controle. Ao simplificar o gerenciamento de instâncias do NGINX Open Source e do NGINX Plus, o NGINX Management Suite simplifica seus processos de dimensionamento, proteção e monitoramento de aplicativos e APIs.

Você precisa instalar o Agente NGINX em cada instância do NGINX que deseja gerenciar do NGINX Management Suite para habilitar a comunicação com o plano de controle e o gerenciamento de configuração remota.

Para instâncias do NGINX executadas em bare metal ou em uma máquina virtual (VM), fornecemos instruções de instalação em nossa documentação. Nesta postagem, mostramos como construir uma imagem Docker para NGINX Plus e NGINX Agent, para ampliar o alcance do NGINX Management Suite para instâncias NGINX Plus implantadas no Kubernetes ou outras infraestruturas de microsserviços.

Há três opções de compilação, dependendo do que você deseja incluir na imagem Docker resultante:

[ Editor – Esta postagem foi atualizada em abril de 2023 para esclarecer as instruções e adicionar o campo ACM_DEVPORTAL , na Etapa 1 de Executar a imagem do Docker no Kubernetes .]

Pré-requisitos

Fornecemos um repositório GitHub dos recursos necessários para criar uma imagem Docker do NGINX Plus e do NGINX Agent, com suporte para a versão 2.8.0 e posteriores do módulo Instance Manager do NGINX Management Suite.

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 instância do NGINX Management Suite em execução com o Instance Manager e o API Connectivity Manager se você quiser aproveitar o suporte para o portal do desenvolvedor
  • Uma assinatura ( ou teste gratuito de 30 dias ) para NGINX Plus e, opcionalmente, NGINX App Protect

Para executar a imagem do Docker, você precisa:

  • Um cluster Kubernetes em execução
  • kubectl com acesso ao cluster Kubernetes

Construindo a imagem do Docker

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

  1. Clone o repositório GitHub:

    $ git clone https://github.com/nginxinc/NGINX-Demos Clonando em 'NGINX-Demos'... remoto: Enumerando objetos: 126, feito. remoto: Contando objetos: 100% (126/126), concluído. remoto: Comprimindo objetos: 100% (85/85), concluído. remoto: Total 126 (delta 61), reutilizado 102 (delta 37), pacote-reutilizado 0 Recebendo objetos: 100% (126/126), 20,44 KiB | 1,02 MiB/s, concluído. 
    Resolução de deltas: 100% (61/61), concluído.
    
  2. Mude para o diretório de construção:

    $ cd NGINX-Demos/nginx-agent-docker/
    
  3. Execute docker ps para verificar se o Docker está em execução e, em seguida, execute o script build.sh para incluir o software desejado na imagem do Docker. As opções básicas são:

    • ‑C – Nome do arquivo do certificado de licença do NGINX Plus ( nginx-repo.crt nos comandos de exemplo abaixo)
    • ‑K – Nome do arquivo de chave de licença do NGINX Plus ( nginx-repo.key nos comandos de exemplo abaixo)
    • ‑t – O registro e a imagem de destino no formulário

      <nome_do_registro>/<nome_da_imagem>:<etiqueta>

      ( registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 nos comandos de exemplo abaixo)

    • ‑n – URL base da sua instância do NGINX Management Suite ( https://nim.f5.ff.lan nos comandos de exemplo abaixo)

    As opções adicionais são:

    • ‑d – Adicionar suporte ao plano de dados para o portal do desenvolvedor ao usar o NGINX API Connectivity Manager
    • ‑w – Adicionar NGINX App Protect WAF

    Aqui estão os comandos para as diferentes combinações de software:

    • NGINX Plus e Agente NGINX:

      $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registro.ff.lan:31005/nginx-plus-com-agente:2.7.0 \ -n https://nim.f5.ff.lan
      
    • NGINX Plus, NGINX Agent e NGINX App Protect WAF (adicione a opção ‑w ):

      $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \-t registro.ff.lan:31005/nginx-plus-com-agente:2.7.0 -w \ -n https://nim.f5.ff.lan
      
    • Suporte ao NGINX Plus, NGINX Agent e portal do desenvolvedor (adicione a opção ‑d ):

      $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registro.ff.lan:31005/nginx-plus-com-agente:2.7.0 -d \ -n https://nim.f5.ff.lan
      

    Aqui está um exemplo de rastreamento da construção de uma imagem básica. A mensagem Build complete no final indica uma compilação bem-sucedida.

    $ ./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 => A imagem do docker de destino é nginx-plus-with-agent:2.7.0 [+] Compilando 415.1s (10/10) CONCLUÍDO => [interno] carregar definição de compilação do Dockerfile => transferir dockerfile: 38B => [interno] carregar .dockerignore => transferir contexto: 2B => [interno] carregar metadados para docker.io/library/centos:7 => [auth] library/centos:pull token para registry-1.docker.io => EM CACHE [1/4] DE docker.io/library /centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 => [interno] carregar contexto de compilação => transferir contexto: 69B => [2/4] EXECUTE 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 para imagem => exportando camadas => gravando imagem sha256:9246de4af659596a290b078e6443a19b8988ca77f36ab90af3b67c03d27068ff => nomeando para registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 => Compilação concluída para registry.ff.lan:31005/nginx-plus-with-agent:2.7.0
    

    Executando a imagem do Docker no Kubernetes

    Siga estas instruções para preparar o manifesto de implantação e iniciar o NGINX Plus com o NGINX Agent no Kubernetes.

    1. Usando seu editor de texto preferido, abra manifests/1.nginx-with-agent.yaml e faça as seguintes alterações (os trechos de código mostram os valores padrão que você pode ou deve alterar, destacados em laranja):

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

        especificação: ... modelo: ... especificação: contêineres: - nome: nginx-nim imagem: your.registry.tld/nginx-with-nim2-agent:tag
        
      • Na seção spec.template.spec.containers.env , faça estas substituições no campo de valor para cada nome indicado:

        • NIM_HOST – (Obrigatório) Substitua o padrão ( nginx-nim2.nginx-nim2 ) pelo FQDN ou endereço IP da sua instância do NGINX Management Suite (no nosso caso nim2.f5.ff.lan ).
        • NIM_GRPC_PORT – (Opcional) Substitui o padrão (443 ) com um número de porta diferente para tráfego gRPC.
        • NIM_INSTANCEGROUP – (Opcional) Substitua o padrão ( lab ) pelo grupo de instâncias ao qual a instância do NGINX Plus pertence.
        • NIM_TAGS – (Opcional) Substitua o padrão ( preprod,devops ) por uma lista delimitada por vírgulas de tags para a instância do NGINX Plus.
        especificação: ... modelo: ... especificação: contêineres: ... ambiente: - nome: NIM_HOST ... valor: " nginx-nim2.nginx-nim2 " - nome: Valor NIM_GRPC_PORT: "443 " - nome: Valor NIM_INSTANCEGROUP: " lab " - nome: Valor NIM_TAGS: " preprod,devops "
        
      • Também na seção spec.template.spec.containers.env , descomente esses pares de campos nome - valor se a condição indicada se aplicar:

        • NIM_WAF e NIM_WAF_PRECOMPILED_POLICIES – O NGINX App Protect WAF está incluído na imagem (você incluiu a opção -w na Etapa 3 de Construindo a imagem do Docker ), então o valor é "true" .
        • ACM_DEVPORTAL – O suporte para o portal do desenvolvedor do App Connectivity Manager está incluído na imagem (você incluiu a opção -d na Etapa 3 de Construindo a imagem do Docker ), então o valor é "true" .
        especificação: ... modelo: ... especificação: contêineres: ... ambiente: - nome: NIM_HOST ... #- nome: NAP_WAF # valor: "true" #- nome: NAP_WAF_PRECOMPILED_POLICIES # valor: "true" ... #- nome: ACM_DEVPORTAL # valor: "true"
        
    2. Execute o script nginxwithAgentStart.sh conforme indicado para aplicar o manifesto e iniciar dois pods (conforme especificado pelas réplicas:2 instruções na seção de especificações do manifesto), cada um com NGINX Plus e NGINX Agent:

      $ ./scripts/nginxWithAgentStart.sh iniciar $ ./scripts/nginxWithAgentStart.sh parar
      
    3. Verifique se dois pods estão em execução: cada pod executa uma instância do NGINX Plus e um agente NGINX para se comunicar com o plano de controle do NGINX Management Suite.

      $ kubectl get pods -n nim-test NOME PRONTO STATUS REINÍCIOS IDADE nginx-nim-7f77c8bdc9-hkkck 1/1 Em execução 0 1m nginx-nim-7f77c8bdc9-p2s94 1/1 Em execução 0 1m
      
    4. Acesse a GUI do NGINX Instance Manager no NGINX Management Suite e verifique se duas instâncias do NGINX Plus estão em execução com o status Online . Neste exemplo, o NGINX App Protect WAF não está habilitado.

      Captura de tela da janela Visão geral de instâncias no NGINX Management Suite Instance Manager versão 2.7.0

    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 :

    Baixe o NGINX Agent – é gratuito e de código aberto.


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