Tabla de contenidos
1. Introducción
En este artículo, vamos a crear un clúster de Kubernetes en el servicio de EKS, con esto ya tendremos un clúster levantado y listo para poder empezar a desplegar nuestro código custom.
Es posible que no conozcas alguno de los servicios que se mencionan, así que te dejamos una breve descripción de qué hace cada uno de ellos:
¿Que es IAM y para que lo usaremos?
AWS IAM (Identity and Access Management) es un servicio de Amazon Web Services que permite gestionar el acceso a los servicios y recursos de AWS de manera segura. Se utiliza para:
- Autenticación: Verificar la identidad de los usuarios antes de permitirles el acceso a los recursos de AWS.
- Autorización: Asignar permisos específicos a usuarios, grupos y roles para controlar qué acciones pueden realizar en AWS.
- Gestión de políticas: Crear políticas que definan los permisos y asociarlas a las entidades de IAM para gestionar el acceso a los recursos.
Es fundamental para la seguridad en la nube, ya que permite a los administradores de sistemas controlar quién puede hacer qué dentro de su entorno de AWS. Por ejemplo, se puede permitir a un desarrollador acceder a instancias EC2 pero no a otros servicios a los que no tendria que poder acceder, o se puede restringir el acceso a ciertos servicios solo a usuarios con autenticación multifactor.
En nuestro caso, lo usaremos para autorizar a Cloud Formation para que pueda crear los recursos necesarios, así como para dar permisos a la consola de AWS para que pueda obtener los datos necesarios para mostrar la información del estado del cluster.
¿Qué es Cloud Formation y para que se utiliza?
Cloud Formation es un servicio ofrecido por Amazon Web Services (AWS) que permite a los usuarios definir y provisionar recursos de manera programática en la nube utilizando archivos de texto JSON o YAML, en lugar de configurarlos manualmente a través de la consola de AWS, también conocido como “Infrastructure as Code” o infraestructura como código.
En pocas palabras, Cloud Formation proporciona una forma de crear y gestionar de manera automatizada la infraestructura y los servicios en la nube de AWS. Esto se logra mediante la definición de un conjunto de recursos y sus relaciones en un único archivo de plantilla, que describe la configuración deseada de la infraestructura. Estos recursos pueden incluir instancias EC2, security groups, load balancers, bases de datos RDS, colas de mensajes SQS, entre otros servicios de AWS.
Una vez que se crea una plantilla de Cloud Formation que describe la infraestructura necesaria, se puede usar esa plantilla para lanzar una pila (conocidos como stacks) de CloudFormation. Un stack es una instancia única de los recursos definidos en la plantilla, es decir, si lanzamos 2 stacks iguales, crearemos por diplicado los recursos definidos en un stack (siempre y cuando no haya conflictos). Cloud Formation se encarga de provisionar y configurar estos recursos según lo especificado en la plantilla de Cloud Formation.
¿Que és una VPC?
Una VPC (Virtual Private Cloud) es un servicio proporcionado por Amazon Web Services (AWS) que te permite crear una red virtual aislada en la nube. Para alguien que nunca ha estado en la nube, esto puede sonar un poco abstracto, así que déjame explicarlo de manera más sencilla:
Imagina que tienes una oficina física con diferentes departamentos, como recursos humanos, ventas y contabilidad. Cada departamento necesita su propio espacio para trabajar y almacenar información, pero al mismo tiempo, necesitas que estén conectados para poder comunicarte y compartir datos cuando sea necesario.
En el mundo de la nube, una VPC es como esa oficina física, pero virtual. Te permite crear diferentes “departamentos” o subredes dentro de esta red virtual. Cada subred puede tener sus propias reglas de seguridad y acceso, lo que significa que puedes controlar quién puede acceder a qué recursos y desde dónde.
Además, una VPC te permite conectar tu red virtual en la nube con tu infraestructura de TI existente, como tu red corporativa. Esto se hace a través de conexiones VPN (Redes Privadas Virtuales) o conexiones directas, lo que te permite extender tu red empresarial a la nube de manera segura.
En resumen, una VPC en AWS te proporciona un entorno virtual privado y seguro en la nube donde puedes ejecutar tus aplicaciones y servicios, al tiempo que controlas completamente la configuración de red y la seguridad.
2. ¿Cómo vamos a crear el clúster? Lo decides tú
Hay 2 formas que podemos emplear para crear nuestro clúster:
- Desde la consola (más amigable)
- Desde eksctl (más customizable)
Todo y que ahora el proceso de crear un clúster en EKS desde la consola es muy fácil y amigable, no siempre ha sido así. Cuando empezamos la prueba de concepto sobre la que se basa esta serie de artículos, desde la consola de AWS no se podía ver prácticamente nada. Por eso, creemos necesario explicaros ambos procesos, y que escojáis el que más os conviene.
Si ya tienes experiencia moviéndote por AWS, te resultará más sencillo hacerlo a través de la consola. En cambio, si tienes experiencia creando clústers de Kubernetes a mano, eksctl te puede resultar más familiar.
En el caso de que no lo tengas claro, te recomendamos hacerlo desde la consola de AWS, dado que en caso de error proporciona más información.
3. Antes de nada
Con tal de aislar completamente esta prueba de concepto de cualquier recurso que puedas tener en uso en tu cuenta, te recomendamos lo siguiente:
- MUY IMPORTANTE: Si en tu cuenta de AWS ya existe algún recurso que estás usando, cambia a una región donde no tengas nada, o de ser posible, crea una subcuenta nueva.
- Si tu cuenta de AWS es nueva, lo puedes hacer en la región que más te apetezca.
- Selecciona una región desarrollada: Las nuevas regiones les suelen faltar servicios, en Europa recomendamos Irlanda (eu-west-1) o Frankfurt (eu-central-1) y en América Northern Virginia (us-east-1), ya que disponen de prácticamente la totalidad de los servicios.
Recalcar que es muy importante que no haya nada en esa región o en esa cuenta, ya que al final de la serie estaremos eliminando los recursos, y no queremos arriesgarnos a eliminar algo que este en uso.
4. Vamos a crear un clúster
Con el fin de avanzar rápidamente hacia nuestro objetivo, utilizaremos siempre que se pueda Infraestructura como código que os proporcionaremos nosotros.
4.1 Creemos el VPC con todos los recursos necesarios
Principalmente en AWS para cualquier aplicación que queramos tener, necesitaremos un Virtual Private Cloud, que nos permitiría tener aislados todos los recursos de una aplicación a otra.
Como este tutorial no va sobre como crear un VPC, te proporcionaremos un template de CloudFormation que te permitirá crear todos los recursos necesarios.
Si ya sabes como desplegar un template de CloudFormation, puedes desplegarlo y obviar la explicación debajo. El archivo es el siguiente.
ADVERTENCIA: Desplegar este template creará recursos que tienen coste económico.
Como crear el ROL de CloudFormation (solo primera vez)
- Si es nuestro primer template de CloudFormation, tendremos que crear un rol AWS IAM que permita a CloudFormation asumir el rol. Para ello nos dirigiremos a la Consola de AWS, iremos al servicio IAM (a trabes del buscador de la parte superior) y vamos a seleccionar ROLES. Le daremos a “Crear”.
- En este apartado, en el buscador resaltado buscaremos “CloudFormation”, y seleccionaremos este “Use case”.
- Seleccionaremos la política “AmazonVPCFullAccess”. Esta política nos va a permitir que este rol pueda crear los recursos necesarios.
- En el siguiente paso nos pedirá ponerle un nombre y una descripción.
- En el siguiente paso será de verificación. Asegúrate de que concuerda, sobretodo los steps 1 y 2.
- En el step 3 puedes añadir TAGS que te ayuden a identificar todos los recursos que este template ha creado.
- Finalmente, le daremos a “create” y crearemos el ROL.
Como desplegar un template de CloudFormation
- Para desplegar nuestro primer template tendremos que ir a CloudFormation (usa el buscador superior), iremos al apartado de Stacs y seleccionaremos “Crear Stack” y del dropdown seleccionaremos “Con nuevos recursos”.
- En esta pantalla, seleccionaremos que el template ya esta preparado, que queremos subir un archivo, seleccionar el fichero a subir (OJO: Tiene que ser un JSON o YAML, no puede ser .ZIP ni nada más, si tienes un .ZIP extrae los ficheros). Una vez subido el fichero, dale a “Next”.
- En el siguiente apartado nos va a preguntar por un nombre y parámetros, solo introducimos el nombre y le damos a NEXT.
- En el apartado de Tags puedes añadir tantos tags como quieras (hasta 50). Eso sí, te recomendamos que incluyas una que indique el nombre del Stack que la ha creado.
- En el apartado de permisions tienes que seleccionar el Rol que hemos creado anteriormente.
- En el apartado de “Stack failure options”, dejaremos las opciones que vienen por defecto. Y finalmente le daremos a crear.
- Esperaremos a que todos los recursos se hayan creado correctamente.
Una vez desplegado el template, ya habremos creado lo siguiente (AZ = Zona de disponibilidad):
- Una VPC
- 10 Subnets
- 3 Públicas para el frontal y para el mqtt broker (una por AZ)
- 3 Privadas donde va a correr el Backend de EKS (una por AZ)
- 3 de backend donde va a correr el RDS (donde se asegurara el máximo de seguridad) (una por AZ)
- 1 para el NAT Gateway
- 4 Route tables
- 1 NAT Gateway
- 1 IPv4 Elastic IP
- 1 Internet Gateway
Si no sabes que es o para qué se usa cada cosa, tranquil@, esto daría para otra serie de artículos que ahora mismo no es imprescindible para llevar a cabo el proyecto.
Para verificar que todo está correcto, ve al buscador de la consola de AWS y busca VPC, una vez dentro selecciona el VPC llamado “EKS-TEST-VPC” y ve al apartado “Resource Map” y tendria que ver algo parecido a la ultima imagen.
4.2 Creemos el cluster de EKS
Ahora viene la elección entre EKSCTL o AWS,
Antes de nada, tendremos que crear un usuario IAM que asumirá el clúster. Para evitar que puedas tener problemas, tendrás que desplegar tal como lo hemos hecho antes este template de CloudFormation.
- Iremos al servicio IAM, y seleccionaremos el rol de IAM que hemos creado anteriormente (EKS-TEST-CLOUDFORMATION-ROLE).
- Añadiremos la política “IAMFullAccess”.
OJO: En el último paso tendrás que seleccionar.
4.2.1 Como crearlo desde la consola de AWS
Para crear el cluster desde la consola de AWS, seguiremos los siguentes pasos.
- Nos dirigiremos al servicio de EKS. Le daremos a “Add clúster”, y al apartado de “Create”.
- En el apartado de cluster access, dejaremos configurado “Allow cluster administration access”.
- En el apartado de “Secrets” y “Tags”, dejamos todo por defecto (puedes modificar cualquiera de los 2, pero para nuestro ejemplo no hara falta).
- En el apartado de “Networking”, seleccionaremos el VPC que creamos con el template al principio.
- Una vez seleccionado el VPC, seleccionaremos todas las Subnets, exceptuando la que contiene “NAT”.
- En el apartado “security groups”, no seleccionaremos ninguno.
- En caso de la familia de IP’s, dejaremos seleccionado IPv4.
- Para el acceso al cluster, lo dejaremos en “Publico y privado”. Modificaremos en “advanced setting” y añadriemos nuestras IPs. Para ello eliminaremos la ruta “0.0.0.0/0”.
- Iremos a cualesmiip.com y obtendremos nuestra IP (ojo, en casa normalmente varian).
- Añadiremos nuestra ip con /32 al final para asegurarnos que solo nuestra ip esta permitida en el clúster.
- En el apartado de metricas, dejaremos todo sin seleccionar.
- En el apartado de add-ons, dejaremos seleccionados los que vienen por defecto.
- En el apartado de “add-ons setting” lo dejaremos todo por defecto.
- Lo dejaremos tal como esta y le daremos a next.
- En la revision le daremos una ojeada, y le daremos a “create”.
- Regresaremos a la pantalla de EKS y ya veremos que se esta creando el clúster.
4.2.2 Como crearlo desde EKSCTL
4.2.2.1 Modificación del fichero de configuración
Para crear un clúster desde EKSCTL vamos a tener que modificar el fichero de configuración del cúster con los datos correctos. Aquí os proporcionamos el template:
Tendremos que hacer ciertas modificaciones. Para ello, abre el fichero con VSCode (o tu IDE preferido) y sigue los pasos.
- Primero vamos a modificar los metadata para que todo este de acorde a tu caso.
El apartado 1 “name” indica el nombre del Clúster que quieras.
En el apartado 2 “region”, añade la abreviación de la región donde estás haciendo la demo.
Finalmente, en el apartado 3, incluye la versión que vas a usar. Asegúrate de usar una relativamente actual. Aquí puedes encontrar una lista de las que actualmente soporta AWS.
- Posteriormente, tendremos que indicar que rol va a asumir el clúster de Kubernetes.
Para hacerlo tendremos que ir a la consola de AWS, bucar IAM y buscar el rol que préviamente hemos creado (ROLE_EKS_TEST). Obtendremos su ARN.
- Tendremos que añadir las Subnets ID de las subnets al template.
Para ello buscaremos VPC en el buscador, y seleccionaremos el VPC con el nombre “EKS-TEST-VPC”. Seleccionar todas las subnets excepto la que contiene NAT, y guardamos la subnet ID.
- En VPC añadiremos el VPC ID y las subnets ID correspondientes. Hay que tener en cuenta que las que terminan en “a” tienen que estar en la zona de disponibilidad “a”.
- Lo mismo con las otras zonas de disponibilidad, “b” con la “b”, y “c” con “c”.
4.2.2.2 Configuración de AWS CLI
Para poder crear nuestro clúster, tendremos que tener configurado AWS CLI. Para comprovar que lo tenemos correctamente instalado, ejecutaremos “aws configure”. Tendría que devolvernos algo así:
Haz Control + C para cancelar y en caso de que no te salga, revisa este artículo TODO donde instalábamos todo el software necesario.
Para obtener los parámetros que nos pide, tendremos que obtener claves programáticas. Si ya las tienes, usa esas. Sino ahora las crearemos.
Como crear claves programáticas para usar el AWS CLI
- Primero, iremos a la consola de AWS y buscaremos IAM.
- Una vez estemos en el apartado de usuarios, buscaremos nuestro usuario.
- Seleccionaremos el usuario y nos iremos al apartado de “Security Credentials”
- Iremos al apartado “Access keys” y le daremos a “Create Key”.
- Una vez dentro, seleccionaremos la opción “Command Line Interface”, seleccionaremos el checkbox de la parte inferior y le daremos a “Next”.
- En el apartado de descripción, añade algun texto que te permita identificar para que se va a usar esta clave programatica. Le daremos a “Create access key”.
- Una vez ya hemos creado una access key y secret key, nos guardaremos los valores en un lugar seguro. ESTO ES COMO EL USUARIO Y CONTRASEÑA DE AWS, ASÍ QUE MUCHO CUIDADO DONDE LO GUARDAS.
- Finalmente abriremos una consola o terminal. Ahí ejecutaremos “aws configure” para configurar las credenciales del usuario que va a crear el cluster.
Es importante que pongas la region donde has creado todos los recursos anteriormente mencionados.
4.2.2.3 Creemos el clúster
Primero de todo, abriremos una consola en la carpeta donde está el template que te hemos proporcionado y que ya has adaptado a tu casuística.
Comprobaremos que eksctl funciona ejecutando “eksctl version”, y tendría que respondernos con la versión que está corriendo ahora mismo.
Ahora si, ha llegado el momento de clear el clúster. Para ello vamos a hacer lo siguiente:
- Con el terminal que hemos abierto para comprovar que ekstcl se ejecutava correctamente, vamos a ejecutar “eksctl create cluster -f .\config.yaml”. Esto lo que hara es crear nuestro clúster a partir del fichero de configuración anteriormente proporcionado.
- Esperaremos hasta que el terminal nos indique que el clúster ya se ha creado correctamente.
- Iremos a la consola de AWS y buscaremos el servicio “EKS” (asegurate de estar en la región que toca, lo puedes verificar en la parte superior derecha) y buscaremos nuestro cluster.
- Y ya podemos navegar a través de las opciones que nos ofrece la consola de AWS.
5. Conclusión
En este artículo hemos creado un clúster básico de Kubernetes, y hemos configurado todo lo necesario para tener un clúster en funcionamiento. Ahora solo faltaria definir que y como va a correr dentro de nuestro clúster de kubernetes.
Hay que tener en cuenta, que los nodos master que comentavamos en el articulo 1. Fundamentos ya estan corriendo en multiples Zonas de disponibilidad dentro de la region seleccionada, por lo que nosotros no tenemos que pensar en gestionarlos, sino que se encarga AWS.
En el siguiente articulo, vamos a crear las imagenes que van a correr dentro de los pods y como subirlo a ECR (Elastic Container Repository) para que puedan ser obtenidos de allí por EKS.
Artículo anterior: 2. El proyecto, ¿Qué necesitamos?
Siguiente artículo: 4. Imagenes, Elastic Container Repository y Node Groups