

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Simplificación de la implementación de aplicaciones multiusuario de Amazon EKS mediante Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

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

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

Muchas empresas que ofrecen productos y servicios son sectores regulados por los datos que deben mantener las barreras de datos entre sus funciones empresariales internas. Este patrón describe cómo puede utilizar la característica de varias tenencias de Amazon Elastic Kubernetes Service (Amazon EKS) para crear una plataforma de datos que logre el aislamiento lógico y físico entre los inquilinos o usuarios que comparten un clúster único de Amazon EKS. El patrón proporciona aislamiento a través de los enfoques siguientes:
+ Aislamiento del espacio de nombres de Kubernetes
+ Control de acceso basado en roles (RBAC)
+ Políticas de red
+ Cuotas de recursos
+ AWS Identity and Access Management Funciones (IAM) para cuentas de servicio (IRSA)

Además, esta solución utiliza Flux para mantener inmutable la configuración del inquilino al implementar aplicaciones. Puede implementar las aplicaciones del inquilino y especificar el repositorio del inquilino que contiene el archivo `kustomization.yaml` de Flux en la configuración.

Este patrón implementa lo siguiente:
+ Un AWS CodeCommit repositorio, AWS CodeBuild proyectos y una AWS CodePipeline canalización, que se crean mediante la implementación manual de los scripts de Terraform.
+ Componentes de red y cómputo obligatorios para alojar a los inquilinos. Se crean a través de Terraform CodePipeline y CodeBuild utilizando Terraform.
+ Espacios de nombres de inquilinos, políticas de red y cuotas de recursos, que se configuran a través de un gráfico de Helm.
+ Aplicaciones que pertenecen a diferentes inquilinos, implementadas con Flux.

Le recomendamos que planifique y cree con detenimiento su propia arquitectura para varios inquilinos según sus requisitos únicos y sus consideraciones de seguridad. Este patrón proporciona un punto de partida para la implementación.

## Requisitos previos y limitaciones
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ AWS Command Line Interface [(AWS CLI) versión 2.11.4 o posterior, [instalada y configurada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ La versión 0.12 o posterior de [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) instalada en su máquina local
+ La versión 3.0.0 o posterior del [Proveedor de AWS para Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest)
+ Versión 2.10 o posterior de [Kubernetes Provider](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs)
+ Versión 2.8.0 o posterior de [Helm Provider](https://registry.terraform.io/providers/hashicorp/helm/latest/docs)
+ Versión 1.14 o posterior de [Kubectl Provider](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs)

**Limitaciones**
+ **Dependencia de las implementaciones manuales de Terraform:** la configuración inicial del flujo de trabajo, que incluye la creación de CodeCommit repositorios, CodeBuild proyectos y CodePipeline canalizaciones, se basa en las implementaciones manuales de Terraform. Esto introduce una posible limitación respecto de automatización y escalabilidad, ya que requiere una intervención manual para hacer cambios en la infraestructura.
+ **CodeCommit dependencia de los repositorios:** el flujo de trabajo se basa en CodeCommit los repositorios como solución de gestión del código fuente y está estrechamente vinculado a ellos. Servicios de AWS

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

**Arquitecturas de destino **

Este patrón implementa tres módulos para crear la infraestructura de canalización, red y computación de una plataforma de datos, como se ilustra en los diagramas siguientes.

*Arquitectura de canalización:*

![\[Infraestructura de canalización para la arquitectura multiusuario de Amazon EKS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Arquitectura de redes:*

![\[Infraestructura de redes para la arquitectura multiusuario de Amazon EKS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Arquitectura de computación:*

![\[Infraestructura de computación para la arquitectura multiusuario de Amazon EKS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


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

**Servicios de AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que permite almacenar y administrar repositorios de Git de forma privada, sin necesidad de administrar su propio sistema de control de origen.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)es un centro central que conecta nubes privadas virtuales () y redes locales. VPCs
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS.

**Otras herramientas**
+ Las [políticas de red de Cilium](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) son compatibles con las políticas de red de L3 y L4 de Kubernetes. Se pueden ampliar con políticas de L7 para proporcionar seguridad de las API para HTTP, Kafka y gRPC, y otros protocolos similares.
+ [Flux](https://fluxcd.io/) es una herramienta de entrega continua (CD) basada en Git que automatiza las implementaciones de aplicaciones en Kubernetes.
+ [Helm](https://helm.sh/docs/): es un administrador de paquetes de código abierto para Kubernetes que le permite instalar y administrar aplicaciones en el clúster de Kubernetes.
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

**Repositorio de código**

El código de este patrón está disponible en el repositorio de soluciones Terraform [Multi-Tenancy de GitHub EKS](https://github.com/aws-samples/aws-eks-multitenancy-deployment).

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

Para directrices y prácticas recomendadas para utilizar esta implementación, consulte lo siguiente:
+ [Amazon EKS multi-tenancy best practices](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Documentación de Flux](https://fluxcd.io/flux/get-started/)

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

### Creación de canalizaciones para las etapas de compilación, prueba e implementación de Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio del proyecto. | Clone el repositorio de la [solución GitHub EKS Multi-Tenancy Terraform](https://github.com/aws-samples/aws-eks-multitenancy-deployment) ejecutando el siguiente comando en una ventana de terminal:<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Inicie el bucket de S3 de Terraform y Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Actualice los archivos `run.sh` y `locals.tf`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Implemente el módulo de canalización. | Para crear recursos de canalización, ejecute los comandos siguientes de Terraform de manera manual. No hay ninguna orquestación para ejecutar estos comandos automáticamente.<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 | 

### Creación de la infraestructura de red
<a name="create-the-network-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Iniciar la canalización.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Tras esta primera ejecución, la canalización se iniciará automáticamente cada vez que realices un cambio en la rama principal del CodeCommit repositorio.La canalización incluye las siguientes [etapas](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/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Valide los recursos creados a través del módulo de red. | Confirme que los siguientes AWS recursos se crearon después de que la canalización se implementara correctamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Creación de la infraestructura de computación
<a name="create-the-compute-infrastructure"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice `locals.tf` para permitir el acceso del CodeBuild proyecto a la VPC. | Para implementar los complementos para el clúster privado de Amazon EKS, el CodeBuild proyecto debe estar adjunto a la VPC de Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Actualice los archivos `buildspec` para crear el módulo de computación. | En la carpeta `templates`, en todos los archivos de YAML `buildspec`, establezca el valor de la variable `TF_MODULE_TO_BUILD` de `network` a `compute`:<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Actualice el archivo `values` para el gráfico de Helm de administración de inquilinos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Valide los recursos de computación. | Tras actualizar los archivos en los pasos anteriores, se CodePipeline inicia automáticamente. Confirme que creó los siguientes AWS recursos para la infraestructura informática:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Comprobación de la administración de inquilinos y otros recursos
<a name="check-tenant-management-and-other-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide los recursos de administración de inquilinos en Kubernetes. | Ejecute los comandos siguientes para comprobar que los recursos de administración de inquilinos se hayan creado correctamente con la ayuda de Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Verifique las implementaciones de aplicaciones de inquilinos. | Para comprobar que se implementaron las aplicaciones de inquilinos, ejecute los comandos siguientes.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## Resolución de problemas
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Aparece un mensaje de error similar al siguiente:`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.` | Para solucionar el problema, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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)
+ [Amazon EKS Best Practices Guides, Multi-tenancy section](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Sitio web de Flux](https://fluxcd.io/)
+ [Sitio web de Helm](https://helm.sh/)

## Información adicional
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

A continuación, se muestra un ejemplo de estructura de repositorios para implementar aplicaciones de inquilinos:

```
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
```