Creé un clúster EKS usando terraform-aws-modules/vpc/aws con Terraform, uso una VPC con 3 subredes privadas en cada AZ en Frankfurt. He creado dos servicios (tomcat y psql) e implementación que están expuestos a través de LoadBalancer y accesibles a través de Internet. Se ve bien hasta ahora. pero el problema es que es solo un entorno (DEV). Me gustaría crear múltiples entornos como etapa, prueba y más dentro de una VPC y dentro de un clúster, ¿cómo hacerlo usando terraform? ¿Debo crear nuevos archivos por entorno? No tendría sentido, pero no se me ocurre nada... También estaba considerando espacios de trabajo, pero el problema es que el nuevo espacio de trabajo requiere un nuevo estado, lo que significa que necesito crear una nueva VPC con un nuevo clúster por espacio de trabajo. ¿Tal vez debería dividir mis archivos de terraformación para tener algo así como un espacio de trabajo "general" y habría una configuración para VPC y clúster, y crear nuevos espacios de trabajo para cada uno de los entornos? ¿Tiene alguna idea o mejor solución?
VPC - 172.26.0.0/16
+--------------------------------------+-------------------------- --------+
| |
| |
| GRUPO DE KUBERNETES |
| +------------------------------------------------- + |
| | | |
| | | |
| | | |
| | +------------------+ +-----------------+ | |
| | | | | | | |
| | | PRUEBA AMBIENTE | | DEV ENV | | |
| | | +------+ +-----+ | | +-----+ +-----+ | | |
| | | |gato| |psql | | | |tomcat |psql | | | |
| | | +------+ +-----+ | | +-----+ +-----+ | | |
| | | | | | | |
| | +------------------+ +-----------------+ | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| +------------------------------------------------- + |
| |
+------------------------------------------------- --------+
Es posible crear múltiples entornos en un solo clúster K8s. Podrías usar el espacio de nombres para esto. Para acceder a los diferentes entornos desde fuera del clúster, puede utilizar un nombre de dominio diferente para cada entorno.
Por ejemplo dev.abc.com para acceder al entorno de desarrollo y test.abc.com para acceder al entorno de prueba.
Puede "separar la vpc" en su propio archivo de estado. Y luego tenga un espacio de trabajo para cada clúster de EKS. Para el EKS, puede extraer la información de VPC de dos maneras, ya sea desde la fuente de datos de AWS por etiqueta o desde el archivo de estado.
Su estructura de árbol se vería así:
├── vpc │ ├── main.tf │ └── outputs.tf └── eks └── main.tf Agregue lo siguiente a la configuración de back-end en vpc/main.tf :
terraform { backend "s3" { ... key = "vpc/terraform.tfstate" workspace_key_prefix = "vpc" ... } } y eks/main.tf :
terraform { backend "s3" { ... key = "eks/terraform.tfstate" workspace_key_prefix = "eks" ... } }Pasando la VPC a la sección EKS:
Opción 1 (extraer de la fuente de datos de aws por nombre, ref https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/vpc ):
data "aws_vpc" "selected" { filter { ... } }Opción 2 (extraer del archivo de estado):
data "terraform_remote_state" "vpc" { backend = "s3" config = { ... key = "vpc/terraform.tfstate" workspace_key_prefix = "vpc" ... } }No es una buena práctica administrar sus aplicaciones dentro de terraform, puede usar terraform solo para crear su clúster (infra) EC2, EKS, VPC... pero dentro del clúster, puede usar helm/kubectl... para administre sus pods, por ejemplo, puede tener dos repositorios, uno para terraform iac y el otro para proyectos, luego puede administrar sus entornos (dev, staging, prod...) por espacios de nombres...