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
Nadeem Rahaman, Aditya Ambati, Aniket Dekate y Shrikant Patil, Amazon Web Services
Resumen
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
Requisitos previos
Un activo Cuenta de AWS
AWS Command Line Interface (AWS CLI) versión 2.11.4 o posterior, instalada y configurada
La versión 0.12 o posterior de Terraform
instalada en su máquina local La versión 3.0.0 o posterior del Proveedor de AWS para Terraform
Versión 2.10 o posterior de Kubernetes Provider
Versión 2.8.0 o posterior de Helm Provider
Versión 1.14 o posterior de Kubectl Provider
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
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:

Arquitectura de redes:

Arquitectura de computación:

Tools (Herramientas)
Servicios de AWS
AWS CodeBuild 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 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 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 EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
AWS Transit Gatewayes un centro central que conecta nubes privadas virtuales () y redes locales. VPCs
Amazon Virtual Private Cloud (Amazon VPC) 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
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
es una herramienta de entrega continua (CD) basada en Git que automatiza las implementaciones de aplicaciones en Kubernetes. Helm
: 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
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
Prácticas recomendadas
Para directrices y prácticas recomendadas para utilizar esta implementación, consulte lo siguiente:
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Clone el repositorio del proyecto. | Clone el repositorio de la solución GitHub EKS Multi-Tenancy Terraform
| AWS DevOps |
Inicie el bucket de S3 de Terraform y Amazon DynamoDB. |
| AWS DevOps |
Actualice los archivos |
| 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.
| AWS DevOps |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Iniciar la canalización. |
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:
| 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:
| AWS DevOps |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Actualice | Para implementar los complementos para el clúster privado de Amazon EKS, el CodeBuild proyecto debe estar adjunto a la VPC de Amazon EKS.
| AWS DevOps |
Actualice los archivos | En la carpeta
| AWS DevOps |
Actualice el archivo |
| 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:
| AWS DevOps |
| 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.
| AWS DevOps |
Verifique las implementaciones de aplicaciones de inquilinos. | Para comprobar que se implementaron las aplicaciones de inquilinos, ejecute los comandos siguientes.
|
Resolución de problemas
| Problema | Solución |
|---|---|
Aparece un mensaje de error similar al siguiente:
| Para solucionar el problema, haga lo siguiente:
|
Recursos relacionados
Información adicional
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