

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Migração dos NGINX Ingress Controllers ao habilitar o Modo Automático do Amazon EKS
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Olawale Olaleye e Shamanth Devagari, Amazon Web Services*

## Resumo
<a name="migrate-nginx-ingress-controller-eks-auto-mode-summary"></a>

O [Modo Automático do EKS](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) para o Amazon Elastic Kubernetes Service (Amazon EKS) pode reduzir a sobrecarga operacional de executar as workloads em clusters do Kubernetes. Esse modo também AWS permite configurar e gerenciar a infraestrutura em seu nome. Ao habilitar o Modo Automático do EKS em um cluster existente, é necessário planejar cuidadosamente a migração das configurações do [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/). Isso ocorre porque a transferência direta de Network Load Balancers não é possível.

Você pode usar uma estratégia de blue/green implantação para migrar uma instância do NGINX Ingress Controller ao habilitar o EKS Auto Mode em um cluster Amazon EKS existente.

## Pré-requisitos e limitações
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Um [cluster do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) que executa a versão 1.29 ou versões posteriores do Kubernetes
+ [Versões mínimas](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required) requeridas para os complementos do Amazon EKS
+ Versão mais recente do [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update)
+ Uma instância existente do [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/deploy/#aws)
+ (Opcional) Uma [zona hospedada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) no Amazon Route 53 para redirecionamento de tráfego baseado em DNS

## Arquitetura
<a name="migrate-nginx-ingress-controller-eks-auto-mode-architecture"></a>

Uma *implantação azul/verde* é uma estratégia de implantação na qual você cria dois ambientes separados, mas idênticos. Blue/green as implantações fornecem recursos de liberação e reversão com tempo de inatividade quase zero. A ideia fundamental consiste em alternar o tráfego entre dois ambientes idênticos que estão executando versões diferentes da aplicação.

A imagem apresentada a seguir ilustra a migração de Network Load Balancers de duas instâncias diferentes do NGINX Ingress Controller ao habilitar o Modo Automático do EKS. Você usa uma blue/green implantação para transferir o tráfego entre os dois balanceadores de carga de rede.

![\[Usando uma estratégia de blue/green implantação para migrar instâncias do NGINX Ingress Controller.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


O namespace de origem é o namespace *azul*. Este é o local em que o serviço e a instância originais do NGINX Ingress Controller são executados, antes de você habilitar o Modo Automático do EKS. O serviço e a instância originais estabelecem conexão com um Network Load Balancer que tem um nome de DNS configurado no Route 53. O [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) implantou este Network Load Balancer na nuvem privada virtual (VPC) de destino.

O diagrama mostra o seguinte fluxo de trabalho para configurar um ambiente para uma blue/green implantação:

1. Instale e configure outra instância do NGINX Ingress Controller em um namespace diferente, o namespace *verde*.

1. No Route 53, configure um nome de DNS para um novo Network Load Balancer.

## Ferramentas
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**Serviços da AWS**
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ O [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, você pode distribuir o tráfego entre instâncias, contêineres e endereços IP do Amazon Elastic Compute Cloud (Amazon EC2) em uma ou mais zonas de disponibilidade.
+ O [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) é um serviço web de DNS altamente disponível e escalável.
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

**Outras ferramentas**
+ O [Helm](https://helm.sh/) é um gerenciador de pacotes de código aberto para o Kubernetes que auxilia na instalação e no gerenciamento de aplicações no cluster do Kubernetes.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) é uma interface de linha de comando que ajuda você na execução de comandos em clusters do Kubernetes.
+ O [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/) conecta aplicações e serviços do Kubernetes, fornecendo gerenciamento de solicitações, autenticação, recursos personalizados de autoatendimento e depuração.

## Épicos
<a name="migrate-nginx-ingress-controller-eks-auto-mode-epics"></a>

### Análise do ambiente existente
<a name="review-the-existing-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Confirme que a instância original do NGINX Ingress Controller está operacional. | Digite o comando apresentado a seguir para verificar se os recursos no namespace `ingress-nginx` estão operacionais. Se o NGINX Ingress Controller foi implantado em outro namespace, atualize o nome do namespace neste comando.<pre>kubectl get all -n ingress-nginx</pre>Na saída do comando, certifique-se de que os pods do NGINX Ingress Controller estão no estado de execução. Veja a seguir um exemplo de saída:<pre>NAME                                           READY   STATUS      RESTARTS      AGE<br />pod/ingress-nginx-admission-create-xqn9d       0/1     Completed   0             88m<br />pod/ingress-nginx-admission-patch-lhk4j        0/1     Completed   1             88m<br />pod/ingress-nginx-controller-68f68f859-xrz74   1/1     Running     2 (10m ago)   72m<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.67.255    k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com   80:30330/TCP,443:31462/TCP   88m<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.201.176   <none>                                                                          443/TCP                      88m<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           88m<br /><br />NAME                                                 DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-68f68f859   1         1         1       72m<br />replicaset.apps/ingress-nginx-controller-d8c96cf68   0         0         0       88m<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         88m<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         88m</pre> | DevOps engenheiro | 

### Implemente uma HTTPd carga de trabalho de amostra para usar o controlador de entrada NGINX
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie os recursos do Kubernetes. | Digite os seguintes comandos para criar uma implantação, um serviço e uma entrada de amostra do Kubernetes:<pre>kubectl create deployment demo --image=httpd --port=80</pre><pre>kubectl expose deployment demo</pre><pre> kubectl create ingress demo --class=nginx \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps engenheiro | 
| Analise os recursos implantados. | Digite o seguinte comando para visualizar uma lista dos recursos implantados:<pre>kubectl get all,ingress</pre>Na saída, confirme se o HTTPd pod de amostra está em execução. Veja a seguir um exemplo de saída:<pre>NAME                        READY   STATUS    RESTARTS   AGE<br />pod/demo-7d94f8cb4f-q68wc   1/1     Running   0          59m<br /><br />NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE<br />service/demo         ClusterIP   10.100.78.155   <none>        80/TCP    59m<br />service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP   117m<br /><br />NAME                   READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/demo   1/1     1            1           59m<br /><br />NAME                              DESIRED   CURRENT   READY   AGE<br />replicaset.apps/demo-7d94f8cb4f   1         1         1       59m<br /><br />NAME                             CLASS   HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />ingress.networking.k8s.io/demo   nginx   nginxautomode.local.dev                k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                 80      56m</pre> | DevOps engenheiro | 
| Confirme se o serviço está disponível. | Digite o seguinte comando para confirmar que o serviço está disponível por meio do nome de DNS do Network Load Balancer:<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>A saída esperada é a seguinte:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps engenheiro | 
| (Opcional) Crie um registro de DNS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps engenheiro, AWS DevOps | 

### Habilitação do Modo Automático do EKS no cluster existente
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Habilite o Modo Automático do EKS. | Siga as instruções apresentadas em [Habilitar o Modo Automático do EKS em um cluster existente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentação do Amazon EKS). | AWS DevOps | 

### Instalação de um novo NGINX Ingress Controller
<a name="install-a-new-nginx-ingress-controller"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure uma nova instância do NGINX Ingress Controller. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps engenheiro | 
| Realize a implantação da nova instância do NGINX Ingress Controller. | Digite o seguinte comando para aplicar o arquivo de manifesto modificado:<pre>kubectl apply -f deploy.yaml</pre> | DevOps engenheiro | 
| Confirme se a implantação teve êxito. | Digite o seguinte comando para verificar se os recursos no namespace `ingress-nginx-v2` estão operacionais:<pre>kubectl get all -n ingress-nginx-v2</pre>Na saída do comando, certifique-se de que os pods do NGINX Ingress Controller estão em um estado de execução. Veja a seguir um exemplo de saída:<pre>NAME                                            READY   STATUS      RESTARTS   AGE<br />pod/ingress-nginx-admission-create-7shrj        0/1     Completed   0          24s<br />pod/ingress-nginx-admission-patch-vkxr5         0/1     Completed   1          24s<br />pod/ingress-nginx-controller-757bfcbc6d-4fw52   1/1     Running     0          24s<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.208.114   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com   80:31469/TCP,443:30658/TCP   24s<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.150.114   <none>                                                                          443/TCP                      24s<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           24s<br /><br />NAME                                                  DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-757bfcbc6d   1         1         1       24s<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         24s<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         24s</pre> | DevOps engenheiro | 
| Crie uma nova entrada para a carga de HTTPd trabalho de amostra. | Insira o comando a seguir para criar uma nova entrada para a carga de HTTPd trabalho de amostra existente:<pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps engenheiro | 
| Confirme se a nova entrada está funcionando. | Digite o seguinte comando para confirmar se a nova entrada está funcionando:<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>A saída esperada é a seguinte:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps engenheiro | 

### Substituir
<a name="cut-over"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Realize a substituição para o novo namespace. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps, DevOps engenheiro | 
| Analise as duas entradas. | Insira o comando a seguir para analisar as duas entradas que foram criadas para a carga de HTTPd trabalho de amostra:<pre>kubectl get ingress</pre>Veja a seguir um exemplo de saída:<pre>NAME       CLASS      HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />demo       nginx      nginxautomode.local.dev   k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                              80      95m<br />demo-new   nginx-v2   nginxautomode.local.dev   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com                80      33s</pre> | DevOps engenheiro | 

## Recursos relacionados
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ [Habilitar o Modo Automático do EKS em um cluster existente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentação do Amazon EKS)
+ [Solucione problemas com balanceadores de carga criados pelo controlador de serviço Kubernetes no Amazon EKS](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) (re:POST Knowledge Center)AWS 
+ [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/) (documentação do NGINX)