Introducción
Este documento proporciona una guía paso a paso para el despliegue de aplicación web en Google Kubernetes Engine (GKE) utilizando GitLab CI/CD. El proceso abarca desde la configuración del archivo .gitlab-ci.yml
hasta la implementación en el clúster GKE.
Archivo .gitlab-ci.yml
Configuración Inicial
[simterm]stages:
– build-push
– deploy
image: docker:19.03.12
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_TLS_CERTDIR: «»
REGISTRY_HOSTNAME: gcr.io/${GCP_PROJECT_NAME}
DOCKER_IMAGE_NAME: ${CI_PROJECT_NAME}
services:
– docker:19.03.12-dind
[/simterm]
stages
: Define las etapas del pipeline CI/CD.image
: Versión de Docker utilizada en el runner de GitLab.variables
: Variables de entorno necesarias para el despliegue.services
: Configuración del servicio Docker.
Etapa de Build y Push
build-push:
stage: build-push
before_script:
– docker info
– echo «$SERVICE_ACCOUNT_KEY» > key.json
– docker login -u _json_key –password-stdin https://gcr.io < key.json
script:
– docker build –tag ${REGISTRY_HOSTNAME}/${DOCKER_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA} .
– docker push ${REGISTRY_HOSTNAME}/${DOCKER_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}
before_script
: Comandos a ejecutar antes de la ejecución del script.script
: Secuencia de comandos para construir y empujar la imagen Docker.
Etapa de Despliegue
[simterm]deploy:
stage: deploy
image: google/cloud-sdk
before_script:
– apt update -y && apt install gettext -y
script:
– echo «$SERVICE_ACCOUNT_KEY» > key.json
– gcloud auth activate-service-account –key-file=key.json
– gcloud config set project ${GCP_PROJECT_NAME}
– gcloud config set container/cluster ${GKE_CLUSTER_NAME}
– gcloud config set compute/zone us-central1
– gcloud container clusters get-credentials ${GKE_CLUSTER_NAME} –zone us-central1 –project ${GCP_PROJECT_NAME}
– cat k8s.yml | envsubst | kubectl apply -f –
[/simterm]
before_script
: Configuración previa al script de despliegue.script
: Secuencia de comandos para autenticarse y desplegar en GKE.
Archivo Dockerfile
[simterm]
FROM debian:buster
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html
EXPOSE 80
CMD [«nginx», «-g», «daemon off;»]
[/simterm]
- Configuración del Dockerfile para la imagen de Nginx.
Archivo k8s.yml
[simterm]
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-gke-cluster
labels:
app: samplewebsite1
spec:
replicas: 1
selector:
matchLabels:
app: samplewebsite1
template:
metadata:
labels:
app: samplewebsite1
spec:
containers:
– name: nginx-samplewebsite1
image: ${REGISTRY_HOSTNAME}/${DOCKER_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}
imagePullPolicy: Always
ports:
– containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
timeoutSeconds: 5
periodSeconds: 5
imagePullSecrets:
– name: gcr-secret
—
apiVersion: v1
kind: Service
metadata:
name: samplewebsite1-service
labels:
app: samplewebsite1
spec:
type: LoadBalancer
ports:
– port: 80
targetPort: 80
selector:
app: samplewebsite1
[/simterm]
- Configuración del manifiesto de Kubernetes para el despliegue y servicio.
Archivo index.html
[simterm]
<!DOCTYPE html>
<html>
<head>
<title>Desplegando un sitio web de muestra en GKE</title>
</head>
<body style=»text-align:center;background-color:rgb(255,255,255);font-weight:900;font-size:20px;font-family:Helvetica,Arial,sans-serif»>
<img src=»TU ENLACE DE LOGO»>
<h1>Mi sitio web de muestra</h1>
<h1>Gracias</h1>
<p>Este contenedor fue desplegado por: <div id=»date»></div></p>
<script>
var date = new Date();
document.getElementById(«date»).innerHTML=date.toLocaleString();
</script>
</body>
</html>
[/simterm]
- Contenido de la página web de muestra.
Configuración de Variables en GitLab
GCP_PROJECT_NAME
: Nombre de tu proyecto en Google Cloud.GKE_CLUSTER_NAME
: Nombre del clúster GKE.SERVICE_ACCOUNT_KEY
: Clave de la cuenta de servicio para la autenticación.
Configuración de Git
[simterm]
git config –global user.name «TU NOMBRE DE USUARIO EN GITLAB»
git config –global user.email «TU CORREO ELECTRÓNICO DE GITLAB»
cd carpeta_existente
git init –initial-branch=main
git remote add origin ENLACE_DE_TU_PROYECTO_GITLAB
git add .
git commit -m «Commit inicial»
git push origin main
[/simterm]
- Configuración inicial de Git para el proyecto.
Reglas del Firewall para GKE
Asegúrate de tener las reglas de firewall adecuadas para permitir el tráfico hacia tu clúster GKE. Sigue los siguientes pasos:
- Identifica los Puertos Necesarios: Identifica los puertos utilizados por tu aplicación.
- Accede a Google Cloud Console: Ve a la consola de Google Cloud y navega a tu proyecto.
- Abre las Reglas del Firewall: En el menú de navegación, selecciona «VPC network» y luego «Firewall».
- Verifica las Reglas Existentes: Comprueba si existen reglas que permitan el tráfico en los puertos necesarios.
- Crea una Nueva Regla de Firewall: Si no hay reglas adecuadas, crea una nueva regla especificando los puertos y las IPs necesarios.
- Revisión y Creación: Verifica la configuración y haz clic en «Create» para establecer la nueva regla.
Consideraciones Adicionales:
- Seguridad: Ten precaución al permitir tráfico desde todas las IPs (0.0.0.0/0). Considera restringir el acceso a IPs específicas.
- Etiquetas de Red: Si tu clúster GKE utiliza etiquetas de red, asegúrate de que las reglas de firewall se apliquen a esas etiquetas.
- Configuraciones GKE: Algunas configuraciones de GKE pueden crear reglas de firewall automáticamente. Consulta la documentación para obtener detalles específicos.
Una vez que las reglas del firewall estén configuradas correctamente, tu aplicación debería ser accesible a través de los puertos especificados. Ten en cuenta que los cambios en el firewall pueden demorar unos minutos en propagarse. ¡Listo para probar tu despliegue de aplicación web en GKE!
0 comentarios