En el [post anterior](https://www.ahioros.info/2024/12/pipeline-cd-en-jenkins-para-terraform.html) te mostré como usar Jenkis como CD para desplegar tu infraestructura EKS con terraform en AWS. El "detalle" es que usamos el secret de Jenkins de texto cifrado. Ahora lo que usaremos es el plugin de [AWS Credentials](https://plugins.jenkins.io/aws-credentials/), lo puedes instalar desde el administrador de plugins de Jenkins con un par de clicks.Aquí abajo te dejo el video para que veas la configuración en caso que tengas dudas:
Ahioros Home
[ Guillermo@Garcia ~]# cd /pub | more beer
jueves, 12 de diciembre de 2024
Pipeline CD en Jenkins para terraform AWS EKS segunda parte (plugin AWS Credentials)
lunes, 9 de diciembre de 2024
Pipeline CD en Jenkins para terraform AWS EKS
En el [post anterior](https://www.ahioros.info/2024/12/creacion-de-un-cluster-aws-eks-con.html) hicimos un cluster AWS EKS con terraform. Como lo que nos gusta aquí es el tema de automatización, vamos a crear el pipeline de CD con Jenkins, les motraré 2 maneras de hacerlo, en este primer post vamos a hacerlo usando Secrets de Jenkins. ## Explicación del Pipeline El Pipeline -> repositorio github (puede ser cualquier repositorio de git) -> Terraform (init, plan, apply/destroy) -> kubectl test ## Requisitos Para Jenkins estoy usando el contenedor de Jenkins. Los Plugins que tengo para este ejemplo son: * Pipeline: GitHub Groovy Libraries * Pipeline: Stage view * Terraform Plugin (opcional) **Nota:** En mi caso yo tengo los binarios de terraform y kubectl en el directorio jenkins_home/terraform-bin y jenkins_home/kubectl-bin/.Aquí abajo te dejo el video para que veas la configuración en caso que tengas dudas:
miércoles, 4 de diciembre de 2024
AWS Creación de un cluster EKS con terraform
## Introducción Ya hace un tiempo enseñé [cómo instalar localstack para que puedas probar terraform](https://www.ahioros.info/2024/05/how-to-install-localstack-with-docker.html). Bueno ahora voy a enseñarte una de las maneras de como crear un cluster de kubernetes (EKS) en AWS. ¿Cuántas maneras de crear un cluster de kubernetes (EKS) en AWS hay? 1. Con terraform escribiendo desde 0. 2. Con terraform haciendo uso del module. 3. Con cloudformation. 4. Crear un cluster de kubernetes (EKS) en AWS con eksctl (esta al final es un wrapper y hace uso de cloudformation). Nosotros vamos a realizar la primera configuración. Puedes ver el video aquí:
No te voy a decir todas las ventajas que tiene hacerlo con terraform (que para eso ya debes de saberlas) solo diré que no me gusta tanto hacerlos con cloudformation por que "tarda" bastante tiempo. **Nota:** más adelante vamos a hacer el pipeline CI/CD para automatizar el deploy e ir agregándo más características, así como ir poniéndo "presentable" el proyecto.
lunes, 25 de noviembre de 2024
Hablemos de: Seguridad en Kubernetes
Vamos a dividir en antes del despliegue y en Kubernetes. ## Antes del Despliegue 1. Escaneo de las imágenes de contenedores - Durante CI. - Escaneo constante del registry de imagenes. Herramientas: - snyk. - sysdig. - Sonarqube. - Trivy. 2. Que el servicio de la imgen lo ejecute un usuario de servicio (non-root) **Nota:** Esto lo podemos sobreescribir en kubernetes usando **spec.securityContext.runAsUser: 1000** o **spec.allowPrivilegeEscalation: false** ## En Kubernetes 1. Manejo usuarios y permisos Usa RBAC, ClusterRole, ServiceAccount y siempre usa la regla de menor privilegio. 2. Políticas de red Aplica NetworkPolicy para limitar la comunicación entre pods, no quieres que un pod de front se comunique con un pod de database, se debe comunicar con el backend solamente, por mencionar un ejemplo. **Nota:** Usa la regla del mínimo acceso permitido. Herramientas: - calico - weave Net También puedes usar herramientas a nivel de aplicación, usando un service mesh ya hemos hablado de dos, [Linkerd](https://www.ahioros.info/2024/10/service-mesh-linkerd.html) e [Istio](https://www.ahioros.info/2024/10/service-mesh-istio.html). Herramientas: - Istio - Linkerd 3. Cifrado de tráfico, mTLS entre Servicios Esto se resuelve usando un service mesh, solo tienes que habilitarlo. 4. Seguridad y cifrado de Secrets Habilita el cifrado usando el recurso EncryptionConfiguration. Pero todavía necesitamos algo para manejar las llaves cifradas, aquí nos apoyamos de herramientas de terceros como AWS KMS, Google KMS, Vault de HashiCorp,etc. o incluso te puede funcionar algo como pass si estás on-premise. 5. Seguridad en etcd Si estas administrando etcd ponlo detrás de un firewall, cifra toda la informacion en etcd. 6. Backup y Restore En este caso me refiero a la data de tu(s) aplicacion(es) que están corriendo en kubernetes. - Realiza backups de tus aplicaciones regularmente. - Guarda los backups en un lugar seguro. - Hagan pruebas de sus backups para ver que estén funcionando correctamente en un ambiente controlado, incluso pueden automatizar estos tests para que se ejecuten cada cierto tiempo. 7. Define y Aplica Políticas de seguridad Por ejemplo: - No permitas ejecutar contenedores como root. - Cada pod debe tener su política de red. - Los backups se realizan cada día a X hora. Algunas herramientas que te pueden ayudar son: - Open Policy Agent. - Kyverno. 8. Disaster Recovery Define estrategias y mecanismos para una recuperación ante un desastre y sobre todo automatiza. Define también hacer pruebas para que todo el equipo sepa qué hacer en caso de uno y poder ajustar la estrategia de recuperación, entre mayor conocimiento tengan menor tiempo les tomará en ejecutar la recuperación y menor tiempo afectaran la experiencia del usuario.
lunes, 18 de noviembre de 2024
Kubernetes: Controla tus recursos
Ya todos sabemos que la cultura DevOps parte de cederle responsabilidades al área de desarrollo para liberar sus servicios más ágil, esto no quiere decir que debamos darles las llaves del cielo y que hagan lo que quieran, por lo que es responsabilidad de nosotros tomar precauciones para que no tumben los servicios y tengamos que correr como pollos sin cabeza a solucionar. Como ya sabemos tener el servicio indisponible se traduce en pérdida de dinero, pero te cuento que tener el servicio consumiendo recursos sin control también se traduce en pérdida de dinero. Ya en posts anteriores cuando hablé de [HPA](https://www.ahioros.info/2024/09/kubernetes-horizontal-pod-autoscaling.html) mencioné unas buenas prácticas para aplicar a nuestros deployments, para ser más específicos resources.requests y resources.limits.Puedes seguir el video aquí:
## LimitRanges
lunes, 11 de noviembre de 2024
Hablemos de: Pod Disruption Budgets
El escenario "normal" cuando tienes que hacer un mantenimiento en tu cluster de k8s, es que marcas un nodo como cordon esto hace que no acepte más pods y de ahí empiezas a "drenar" los pods el nodo. Lo que hará k8s es que "sacará" los pods del nodo y después empezará a crearlos en el nodo activo. Si nuestra aplicación tiene la mayoría de los pods en el nodo que vamos a hacer el mantenimiento, nos trae inconvenientes como: - Indisponibilidad de nuestra aplicación. - Perder dinero. Aquí te dejo el video para que veas el funcionamiento:
El Pod Disruption Budget (para los compas "PDB" de ahora en adelante) sirve para drenar un nodo, con la diferencia que va a recrear primero en el (los) otro(s) nodo(s) los pods y cuando estén listos (RUNNING), va a matar los pods del nodo que quieres hacer el mantenimiento. Suena bien ¿no? Así, evitamos la indisponibilidad de nuestra aplicación.
viernes, 25 de octubre de 2024
Service Mesh Linkerd
En el post anterior se habló de lo que es un Service Mesh e instalamos Istio. Hoy toca hablar sobre Linkerd, es un Service Mesh que no cuenta con tantas cosas como Istio, ¿esto es malo?, no es malo por que lo que hace, lo hace bien. En comparación con Istio no es necesario crear los Istio ingress o gateways, solo se encarga del Service Mesh. Linkerd tiene mejor performance que Istio (según la documentación de Linkerd claro está). Como Linkerd es más pequeño puedes tener un ahorro en el costo de tu cluster de Kubernetes en tu proveedor de la nube. Al igual que Istio cuenta con mTLS entre los microservicios cuando se inyecta el sidecar (proxy) de Linkerd, esta de más decir que esto te agregará un poco de latencia en tu aplicación. Acá esta el video para que vayas conmigo haciendo el tutorial:
martes, 15 de octubre de 2024
Service Mesh Istio
Imagina que tienes una aplicación la cual está construida por muchos microservicios, ¿Cómo la vas a monitorear/supervisar/optimizar el rendimiento y la comunicación de la aplicación entre todos estos microservicios? Aquí es dónde te ayudan tener un service mesh: - Administrar conexiones entre servicios - Supervisión de tráfico - Registro de tráfico - Rastreo de tráfico - Control de tráfico - Escalabilidad y alta disponibilidad En resumen un **service mesh** es una software dedicado a manejar la comunicación entre servicios. Aquí te dejo el video para que lo sigas conmigo:
Suscribirse a:
Entradas (Atom)