Proyecto Avanzado End to End Three-Tier , AWS EKS y Jenkins — Parte I

Cristhian C. M.
6 min readJan 7, 2025

--

Introducción al Proyecto:
La guía del proyecto Kubernete End to End . En este proyecto integral, vamos a recorrer todo el proceso de configuración de una sólida arquitectura de tres niveles en AWS utilizando Kubernetes, las mejores prácticas de DevOps. Este proyecto tiene como objetivo proporcionar experiencia práctica en el despliegue la supervisión de un entorno de aplicación escalable.

Project Overview:

  1. IAM User Setup: Crear un usuario IAM en AWS con los permisos necesarios para facilitar el despliegue.
  2. Jenkins Server Configuration: Instalar y configurar herramientas esenciales en el server de Jenkins incluyendo Docker , Kubectl , SonarQube y Trivy.
  3. Docker Hub Repositorio: Crear repositorios públicos para las imágenes Docker del frontend ,backend , base de datos en Docker Hub.
  4. SonarQube Integration: Integrar SonarQube para el análisis de la calidad del código en el proceso DevSecOps.
  5. Jenkins Pipelines: Crear Pipeline de Jenkins para desplegar código backend y frontend en el clúster EKS.
  6. EKS Cluster Deployment: Utilizar el comando eksctl para crear un cluster en EKS y manejar kubernetes en AWS.
  7. Load Balancer Configuration: Configurar AWS Application Load Balancer (ALB) para el clúster EKS.
  8. DNS Configuration: Configure los ajustes DNS para que la aplicación sea accesible a través de subdominios personalizados.

Paso 01 : Crear un usuario IAM y generar la clave de acceso AWS

Crear un usuario IAM en AWS y darle acceso de administrador para fines de pruebas.

Ir al servicio AWS IAM y hacer click en crear Usuarios:

Luego de haber creado nuestro usuario vamos a la sección user para generar los access key.

Script de instalación de AWSCLI

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt install unzip -y
unzip awscliv2.zip
sudo ./aws/install

Configurar AWS CLI

Ejecute el siguiente comando y agregue sus claves

aws configure

Paso 02 : Jenkins Server Configuration:

Ahora nos toca realizar la configuración de Jenkins Server en este caso vamos a utilizar docker compose para realizar la configuración.

Primer archivo en generar es nuestro Dockerfile en la cual permitirá generar nuestra imagen de jenkins.

FROM jenkins/jenkins:2.492
USER root
RUN apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
jq \
git \
bash \
unzip \
zip \
wget \
lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg

RUN curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.18.3

RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable"
> /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins

RUN jenkins-plugin-cli \
--plugins \
workflow-support \
pam-auth \
sshd \
ws-cleanup \
ssh-agent \
docker-workflow \
pipeline-utility-steps \
pipeline-stage-view:2.34

Lo siguiente es crear nuestro archivo compose (docker-compose.yml)en la cual nos permitirá crear nuestro contenedor teniendo en cuenta el Dockerfile creado previamente.

version: "3.8"
services:
docker:
container_name: docker
image: docker:dind
privileged: true
restart: always
volumes:
- jenkins-data:/var/jenkins_home
- jenkins-docker-certs:/certs/client
environment:
DOCKER_TLS_CERTDIR: /certs


jenkins:
container_name: jenkins
restart: always
depends_on:
- docker
networks:
- sonarnet
build:
context: .
dockerfile: Dockerfile
volumes:
- jenkins-data:/var/jenkins_home
- jenkins-docker-certs:/certs/client:ro
environment:
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_VERIFY: 1
DOCKER_CERT_PATH: /certs/client
ports:
- "8080:8080"
- "50000:50000"

networks:
sonarnet:
driver: bridge

volumes:
jenkins-data:
jenkins-docker-certs:

Ahora tenemos que configurar Jenkins. Copia la IP pública de tu servidor Jenkins y pégala en tu navegador con el puerto 8080.

lo siguiente es ingresar al contenedor para poder obtener el Administrator password.

Ejecutamos el siguiente código para poder ingresar al contenedor


docker exec -ti 5c0c4e7a5f7e /bin/bash

Estando dentro del contenedor ejecutamos el siguiente código para obtener el password :

cat /var/jenkins_home/secrets/initialAdminPassword

copiamos el código y pegamos en la pantalla que nos salio al inicio y le damos siguiente y hacemos clic en Instalar complementos sugeridos

Después de instalar los complementos, continúe para crear el usuario administrador

Hacemos clic en Guardar y finalizar

El panel de Jenkins se verá como la siguiente imagen.

Lo siguiente es instalar algunos plugins necesario para el proyecto :

  • OWASP Dependency-Check
  • SonarQube Scanner
  • NodeJS

Luego nos dirigimos : Manage Jenkins -> Tools

Configuramos nuestro jdk :

Lo siguiente es configurar NodeJS :

Ahora seguimos con la configuración de Dependency-Check :

y por último configuramos SonarQube y le damos Apply -> Save :

Ahora, tenemos que configurar nuestras credenciales de GitHub , Docker Hub en Jenkins. Nos dirigimos a la siguiente ruta

Manage Jenkins -> Credentials -> System -> Global credentials (unrestricted)

para configurar las credenciales de github primero debemos de crear nuestro token para eso realicemos lo siguiente , ir a nuestra de GiHub y a la siguiente ruta

Settings -> Developer Settings -> Personal acces token -> Tokens (classic)

hacemos click en Generate new token y generamos nuestro token para utilizarlo en el proyecto.

creamos nuestra primera credencial :

configuraremos las credenciales para nuestro DockerHub , en este caso se debe de contar con una cuenta en DockerHub , nos dirigimos a la siguiente ruta : Account settings

luego a Personal access tokens

le damos click en Generate new token

Teniendo nuestro token pasamos a crear nuestra credencial de docker Hub en jenkins.

con lo realizado ya tenemos nuestras credenciales lista para utilizarlas.

Paso 03 : Docker Hub Repositorio

Se necesita tener una cuenta en Docker Hub para poder crear nuestro repositorio para nuestras imágenes. En este caso crearemos 2 repositorios uno para almacenar el front y el otro para el backend

Seguimos con la configuración de la segunda parte del Proyecto Parte II.

Espero que te pueda ser útil este tutorial , si es posible compártelo para que otros desarrolladores puedan realizarlo.

Si tienes algún duda ,comentario, puedes escribirme a mi LinkedIn.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Cristhian C. M.
Cristhian C. M.

Written by Cristhian C. M.

💯✔️☁️x2 AWS Certified (Solutions Architect, Developer) | OCA Java 8 | Software Engineer ✔️☁️

No responses yet

Write a response