

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

# Simplificação da implantação de aplicações multilocatário no Amazon EKS usando o Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

*Nadeem Rahaman, Aditya Ambati, Aniket Dekate e Shrikant Patil, Amazon Web Services*

## Resumo
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-summary"></a>

Diversas empresas que fornecem produtos e serviços atuam em setores regulados por dados e devem preservar a separação de dados entre suas áreas internas. Este padrão descreve como você pode usar o recurso multilocatário no Amazon Elastic Kubernetes Service (Amazon EKS) para desenvolver uma plataforma de dados que garanta isolamento lógico e físico entre locatários ou usuários que compartilham um único cluster do Amazon EKS. O padrão oferece isolamento por meio das seguintes abordagens:
+ Isolamento entre namespaces no Kubernetes
+ Regras de controle de acesso com base em função (RBAC)
+ Políticas de rede
+ Cotas de recurso
+ AWS Identity and Access Management Funções (IAM) para contas de serviço (IRSA)

Além disso, a solução usa o Flux para garantir que a configuração do locatário permaneça imutável durante a implantação das aplicações. É possível implantar as aplicações do locatário especificando o repositório do locatário que contém o arquivo `kustomization.yaml` do Flux na sua configuração.

Este padrão realiza a implementação de:
+ Um AWS CodeCommit repositório, AWS CodeBuild projetos e um AWS CodePipeline pipeline, que são criados com a implantação manual de scripts do Terraform.
+ Componentes de rede e de computação necessários para hospedar os locatários. Eles são criados por meio CodePipeline e CodeBuild usando o Terraform.
+ Namespaces dos locatários, políticas de rede e cotas de recursos, os quais são configurados via chart do Helm.
+ Aplicações pertencentes a diferentes locatários, implantadas usando o Flux.

Recomendamos que você planeje e desenvolva cuidadosamente a própria arquitetura multilocatário com base em seus requisitos e considerações de segurança. Este padrão fornece um ponto de partida para a sua implementação.

## Pré-requisitos e limitações
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ AWS Command Line Interface [(AWS CLI) versão 2.11.4 ou posterior, [instalada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) versão 0.12 ou versões posteriores, instalado em sua máquina local
+ [Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest) versão 3.0.0 ou versões posteriores
+ [Kubernetes Provider](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs) versão 2.10 ou versões posteriores
+ [Helm Provider](https://registry.terraform.io/providers/hashicorp/helm/latest/docs) versão 2.8.0 ou versões posteriores
+ [Kubectl Provider](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs) versão 1.14 ou versões posteriores

**Limitações**
+ **Dependência de implantações manuais do Terraform:** a configuração inicial do fluxo de trabalho, incluindo a criação de CodeCommit repositórios, CodeBuild projetos e CodePipeline pipelines, depende de implantações manuais do Terraform. Isso introduz uma limitação potencial em termos de automação e escalabilidade, pois exige intervenção manual para alterações na infraestrutura.
+ **CodeCommit dependência do repositório:** o fluxo de trabalho depende dos CodeCommit repositórios como solução de gerenciamento de código-fonte e é fortemente acoplado a. Serviços da AWS

## Arquitetura
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-architecture"></a>

**Arquiteturas de destino**

Este padrão implanta três módulos para criar o pipeline e a infraestrutura de rede e de computação de uma plataforma de dados, conforme ilustrado nos diagramas a seguir.

*Arquitetura do pipeline:*

![\[Infraestrutura do pipeline para uma arquitetura multilocatário no Amazon EKS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Arquitetura da rede:*

![\[Infraestrutura da rede para uma arquitetura multilocatário no Amazon EKS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Arquitetura da computação:*

![\[Infraestrutura da computação para uma arquitetura multilocatário no Amazon EKS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


## Ferramentas
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-tools"></a>

**Serviços da AWS**
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ O [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda no armazenamento e no gerenciamento de repositórios Git de forma privada, sem a necessidade de administrar o próprio sistema de controle de origem.
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)é um hub central que conecta nuvens privadas virtuais (VPCs) e redes locais.
+ [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**
+ As[ políticas de rede da Cilium](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) fornecem suporte para as políticas do Kubernetes voltadas para as camadas 3 e 4. Essas políticas podem ser complementadas com políticas para a camada 7 para prover segurança de API em protocolos como HTTP, Kafka, gRPC e outros equivalentes.
+ O [Flux](https://fluxcd.io/) é uma ferramenta de entrega contínua (CD) baseada em Git que automatiza a implantação de aplicações no Kubernetes.
+ O [Helm](https://helm.sh/docs/) é 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.
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment).

## Práticas recomendadas
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-best-practices"></a>

Para obter diretrizes e práticas recomendadas para o uso dessa implementação, consulte:
+ [Práticas recomendadas para a arquitetura multilocatário no Amazon EKS](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Documentação do Flux](https://fluxcd.io/flux/get-started/)

## Épicos
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-epics"></a>

### Criação de pipelines para as fases de desenvolvimento, teste e implantação do Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório do projeto. | Clone o repositório GitHub [EKS Multi-Tenancy Terraform Solution](https://github.com/aws-samples/aws-eks-multitenancy-deployment) executando o seguinte comando em uma janela de terminal:<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Inicialize o bucket do S3 do Terraform e o Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Atualize os arquivos `run.sh` e `locals.tf`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Implante o módulo do pipeline. | Para criar os recursos do pipeline, execute manualmente os comandos do Terraform apresentados a seguir. Não há orquestração para executar esses comandos automaticamente.<pre>./run.sh -m pipeline -e demo -r <AWS_REGION> -t init<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t plan<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t apply</pre> | AWS DevOps | 

### Criação da infraestrutura de rede
<a name="create-the-network-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Iniciar o pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Após essa primeira execução, o pipeline é iniciado automaticamente sempre que você confirma uma alteração na ramificação principal do CodeCommit repositório.O pipeline inclui as seguintes [fases](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages):[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Valide os recursos criados por meio do módulo de rede. | Confirme se os seguintes AWS recursos foram criados após a implantação bem-sucedida do pipeline:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Criação da infraestrutura de computação
<a name="create-the-compute-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize `locals.tf` para permitir o acesso do CodeBuild projeto à VPC. | Para implantar os complementos para o cluster privado do Amazon EKS, o CodeBuild projeto deve ser anexado à VPC do Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Atualize os arquivos `buildspec` para desenvolver o módulo de computação. | Na pasta `templates`, em todos os arquivos YAML de `buildspec`, defina o valor da variável `TF_MODULE_TO_BUILD` de `network` para `compute`:<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Atualize o arquivo `values` para o chart do Helm de gerenciamento de locatários. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Valide os recursos de computação. | Depois de atualizar os arquivos nas etapas anteriores, CodePipeline inicia automaticamente. Confirme se ele criou os seguintes AWS recursos para a infraestrutura computacional:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Verificação do gerenciamento de locatários e de outros recursos
<a name="check-tenant-management-and-other-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide os recursos de gerenciamento de locatários no Kubernetes. | Execute os comandos apresentados a seguir para verificar se os recursos de gerenciamento de locatários foram criados com êxito com a ajuda do Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Verifique as implantações das aplicações dos locatários. | Execute os comandos apresentados a seguir para verificar se as aplicações dos locatários foram implantadas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## Solução de problemas
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Você recebe uma mensagem de erro semelhante a esta:`Failed to checkout and determine revision: unable to clone unknown error: You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit.` | Siga estas etapas para solucionar o problema:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | 

## Recursos relacionados
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-resources"></a>
+ [Amazon EKS Blueprints for Terraform](https://github.com/aws-ia/terraform-aws-eks-blueprints)
+ [Guia de práticas recomendadas do Amazon EKS, seção de arquitetura multilocatário](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Site do Flux](https://fluxcd.io/)
+ [Site do Helm](https://helm.sh/)

## Mais informações
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

A seguir, apresentamos um exemplo de estrutura de repositório para a implantação das aplicações dos locatários:

```
applications
sample_tenant_app
├── README.md
├── base
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── tenant-1
    │   ├── configmap.yaml
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── tenant-2
        ├── configmap.yaml
        └── kustomization.yaml
```