Simplificação da implantação de aplicações multilocatário no Amazon EKS usando o Flux
Nadeem Rahaman, Aditya Ambati, Aniket Dekate e Shrikant Patil, Amazon Web Services
Resumo
Aviso: o AWS CodeCommit não está mais disponível para novos clientes. Os clientes atuais do AWS CodeCommit podem continuar usando o serviço normalmente. Saiba mais
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
Perfis do AWS Identity and Access Management (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 repositório do AWS CodeCommit, projetos do AWS CodeBuild e um pipeline do AWS CodePipeline, criados manualmente por meio de scripts do Terraform.
Componentes de rede e de computação necessários para hospedar os locatários. Esses componentes são criados pelo CodePipeline e pelo 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
Pré-requisitos
Uma Conta da AWS ativa
AWS Command Line Interface (AWS CLI) versão 2.11.4 ou versões posteriores, instalada e configurada
Terraform
versão 0.12 ou versões posteriores, instalado em sua máquina local Terraform AWS Provider
versão 3.0.0 ou versões posteriores Kubernetes Provider
versão 2.10 ou versões posteriores Helm Provider
versão 2.8.0 ou versões posteriores Kubectl Provider
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 repositórios do CodeCommit, projetos do CodeBuild e pipelines do CodePipeline, 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.
Dependência de repositórios do CodeCommit: o fluxo de trabalho depende dos repositórios do CodeCommit como solução de gerenciamento de código-fonte e está fortemente integrado aos Serviços da AWS.
Arquitetura
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:

Arquitetura da rede:

Arquitetura da computação:

Ferramentas
Serviços da AWS
O AWS CodeBuild é 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 é 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 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) ajuda você a executar o Kubernetes na AWSsem precisar instalar e manter seus próprios nós ou painel de controle do Kubernetes.
AWS Transit Gateway O é um hub central que conecta nuvens privadas virtuais (VPCs) e redes on-premises.
A Amazon Virtual Private Cloud (Amazon VPC) ajuda a iniciar recursos da AWS em uma rede virtual definida por você. 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
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
é uma ferramenta de entrega contínua (CD) baseada em Git que automatiza a implantação de aplicações no Kubernetes. O Helm
é 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
é uma ferramenta de infraestrutura como código (IaC) da HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e on-premises.
Repositório de código
O código para este padrão está disponível no repositório EKS Multi-Tenancy Terraform Solution
Práticas recomendadas
Para obter diretrizes e práticas recomendadas para o uso dessa implementação, consulte:
Épicos
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Clone o repositório do projeto. | Clone o repositório EKS Multi-Tenancy Terraform Solution
| AWS DevOps |
Inicialize o bucket do S3 do Terraform e o Amazon DynamoDB. |
| AWS DevOps |
Atualize os arquivos |
| 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.
| AWS DevOps |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Iniciar o pipeline. |
Após essa primeira execução, o pipeline será iniciado automaticamente sempre que você fizer uma confirmação na ramificação principal do repositório do CodeCommit. O pipeline inclui as seguintes fases:
| AWS DevOps |
Valide os recursos criados por meio do módulo de rede. | Confirme que os seguintes recursos da AWS foram criados após o pipeline ser executado com êxito:
| AWS DevOps |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Atualize o arquivo | Para implantar os complementos no cluster privado do Amazon EKS, o projeto do CodeBuild deve estar anexado à VPC do Amazon EKS.
| AWS DevOps |
Atualize os arquivos | Na pasta
| AWS DevOps |
Atualize o arquivo |
| AWS DevOps |
Valide os recursos de computação. | Após atualizar os arquivos nas etapas anteriores, o CodePipeline é iniciado automaticamente. Confirme se ele criou os seguintes recursos da AWS para a infraestrutura de computação:
| AWS DevOps |
| Tarefa | Descrição | 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.
| 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.
|
Solução de problemas
| Problema | Solução |
|---|---|
Você recebe uma mensagem de erro semelhante a esta:
| Siga estas etapas para solucionar o problema:
|
Recursos relacionados
Mais informações
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