Wrapper Utils Resources
Propósito y Alcance
Este proyecto, wrapper-utils-resources, tiene como propósito principal proporcionar las configuraciones y plantillas
necesarias para desplegar el gsuite-auth-wrapper en entornos Google Kubernetes Engine (GKE). El gsuite-auth-wrapper
actúa como un proxy de autenticación que permite asegurar aplicaciones mediante la autenticación con G Suite.
El alcance de este proyecto incluye:
- Definición de manifiestos de Kubernetes (Deployment, Service, ConfigMap) para el
gsuite-auth-wrapperutilizando plantillas ERB. - Gestión de configuraciones específicas por entorno (desarrollo, integración, producción) a través de archivos YAML.
- Integración con pipelines de Jenkins para el despliegue automatizado utilizando Krane.
Este proyecto no contiene el código fuente del gsuite-auth-wrapper en sí, sino los recursos para su despliegue y
configuración.
Arquitectura
El proyecto está diseñado para desplegar el gsuite-auth-wrapper como un componente dentro de un clúster de GKE. La
arquitectura se basa en:
- Google Kubernetes Engine (GKE): Plataforma de orquestación de contenedores donde se despliega el wrapper.
gsuite-auth-wrapper: Un contenedor Docker que maneja la autenticación con G Suite. Se despliega como un Pod en Kubernetes.- ConfigMaps: Para gestionar la configuración de la aplicación y del entorno.
- Secrets de Kubernetes: Para gestionar información sensible como las credenciales de la cuenta de servicio de G Suite.
- Service de Kubernetes: Para exponer el
gsuite-auth-wrapperdentro del clúster.
El deployment.yaml.erb define un Deployment que gestiona los Pods del gsuite-auth-wrapper y un Service de tipo
ClusterIP para la comunicación interna.
(Nota: Confluence puede requerir un plugin para renderizar diagramas Mermaid. Alternativamente, enlazar a una imagen del diagrama.)
Enlace a Diagrama de Arquitectura (si existe externamente)
Tecnologías y Dependencias
- Orquestación de Contenedores: Google Kubernetes Engine (GKE)
- Contenerización: Docker (para la imagen
gsuite_auth_wrapper) - Integración Continua/Despliegue Continuo (CI/CD): Jenkins
- Pipeline:
pipelineLatam("gke-krane-deploy") - Herramienta de despliegue: Krane
- Pipeline:
- Lenguaje de Plantillas: ERB (Embedded Ruby) para manifiestos de Kubernetes.
- Formato de Configuración: YAML
- Control de Versiones: Git (GitLab)
- Autenticación: G Suite
Configuración Local
Este proyecto consiste principalmente en archivos de configuración y plantillas para despliegue, por lo que no hay una "ejecución local" de una aplicación. La configuración local se centra en obtener y entender el código.
Prerrequisitos
- Git instalado.
- Acceso al repositorio del proyecto en GitLab.
- (Opcional) Ruby instalado si se desea pre-procesar localmente las plantillas ERB (normalmente lo hace el pipeline).
- (Opcional)
kubectlconfigurado si se desea interactuar con un clúster de GKE.
Pasos de Configuración
-
Clonar el repositorio: Sigue los siguientes pasos
-
Explorar la estructura del proyecto:
deploy/gke/deployment.yaml.erb: Plantilla principal del manifiesto de Kubernetes.deploy/env/: Contiene archivos YAML (dev.yaml,intg.yaml,prod.yaml) con configuraciones específicas por entorno.Jenkinsfile: Define el pipeline de despliegue.
Despliegue
El despliegue de este proyecto se realiza a través de un pipeline de Jenkins que utiliza Krane para aplicar los manifiestos de Kubernetes en el clúster GKE correspondiente.
Pipeline de Jenkins
El Jenkinsfile define el pipeline a utilizar:
#!/usr/bin/env groovy
pipelineLatam("gke-krane-deploy")
Este pipeline se encarga de:
- Obtener el código fuente.
- Procesar la plantilla
deployment.yaml.erbcon las variables de entorno y del pipeline (ej.<%= environment %>,<%= git_commit %>). - Aplicar los manifiestos generados al clúster GKE utilizando Krane.
Configuración por Entorno
Los archivos en deploy/env/ especifican la versión de la imagen gsuite_auth_wrapper para cada entorno:
deploy/env/dev.yaml:gsuite_auth_wrapper: us-docker.pkg.dev/pipeline-corporativo/application-develop/ltmdev/gsuite-auth-wrapper:12deploy/env/intg.yaml:gsuite_auth_wrapper: us-docker.pkg.dev/pipeline-corporativo/application-develop/ltmdev/gsuite-auth-wrapper:12deploy/env/prod.yaml:gsuite_auth_wrapper: us-docker.pkg.dev/pipeline-corporativo/component-images/gsuite-auth-wrapper:201
Estas configuraciones son utilizadas por el pipeline para seleccionar la imagen correcta del gsuite_auth_wrapper
durante el despliegue.
Endpoints de la API
Este proyecto en sí no define una API. Despliega el gsuite-auth-wrapper, el cual expone una interfaz para la
autenticación. El servicio de Kubernetes creado por este proyecto es:
- Nombre del Servicio:
gsuite-auth-wrapper-acl - Tipo:
ClusterIP - Puerto del Servicio:
80 - Puerto del Contenedor (targetPort):
8080
Cualquier API expuesta por el gsuite-auth-wrapper será accesible a través de este servicio en el puerto 8080
dentro del clúster. Para detalles específicos de la API del gsuite-auth-wrapper, se debe consultar su documentación
particular.
Componentes Específicos
gsuite-auth-wrapper
Este es el componente principal que se despliega.
- Configuración General: Definida en
deploy/gke/deployment.yaml.erb. - Imagen Docker: Especificada por entorno en los archivos
deploy/env/*.yaml. Ejemplo:us-docker.pkg.dev/pipeline-corporativo/application-develop/ltmdev/gsuite-auth-wrapper:12 - Variables de Entorno:
ENVIRONMENT: Entorno actual (e.g.,dev,intg,prod).APPLICATION: Nombre de la aplicación propietaria (inyectado como<%= owner_name %>).IS_PROD_DEPLOY: Booleano indicando si es un despliegue a producción.SERVICE_ACCOUNT: ID de la cuenta de servicio de G Suite (desde secretgsuite-account-id).SERVICE_USER: Usuario de la cuenta de servicio de G Suite (desde secretgsuite-account-user).SERVICE_PRIVATE_KEY: Ruta al archivo de clave privada de la cuenta de servicio (/secrets/gsuite/gsuite-account).
- Montaje de Secretos:
- Se monta el secret de Kubernetes
gsuite-accounten/secrets/gsuitedentro del contenedor, que debe contener la clavegsuite-accountcon el JSON de la clave privada.
- Se monta el secret de Kubernetes
- Puertos: Expone el puerto
8080para tráfico HTTP.
Fragmento del deployment.yaml.erb para el contenedor:
containers:
- name: gsuite-auth
image: "<%= gsuite_auth_wrapper %>" # Variable de entorno
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: "utils-<%= environment %>-configmap"
ports:
- containerPort: 8080
name: http
env:
- name: SERVICE_ACCOUNT
valueFrom:
secretKeyRef:
name: gsuite-account-id
key: gsuite-account-id
# ... otras variables ...
volumeMounts:
- name: gsuite-account
mountPath: /secrets/gsuite
readOnly: true
Configuración de Deployment (ERB)
El archivo deploy/gke/deployment.yaml.erb es una plantilla Ruby ERB que genera los manifiestos de Kubernetes. Utiliza
variables inyectadas por el pipeline de despliegue, como:
<%= environment %>: El entorno de despliegue (dev, intg, prod).<%= owner_name %>: Nombre del propietario o aplicación.<%= git_commit %>: Hash del commit de Git.<%= build_id %>: ID de la construcción de Jenkins.<%= gsuite_auth_wrapper %>: URL de la imagen Docker del wrapper.<%= is_prod_deploy %>: Booleano indicando si es un despliegue a producción.
Pruebas
Este proyecto se enfoca en la infraestructura como código para el despliegue del gsuite-auth-wrapper. Las pruebas
específicas para este proyecto se centrarían en:
- Validación de plantillas ERB: Asegurar que las plantillas generan YAML válido.
- Pruebas de despliegue (Dry-run): Verificar que
krane deploypuede interpretar correctamente los manifiestos. - Pruebas de integración post-despliegue: Verificar que el
gsuite-auth-wrapperse despliega correctamente y es accesible en el clúster.
Las pruebas funcionales del gsuite-auth-wrapper en sí mismo están fuera del alcance de este proyecto y deben ser
cubiertas por el equipo desarrollador de dicho wrapper.
Actualmente, no hay scripts de prueba automatizados incluidos en este repositorio.
Consideraciones de Seguridad
- Gestión de Credenciales: Las credenciales de la cuenta de servicio de G Suite (
gsuite-account,gsuite-account-id,gsuite-account-user) deben ser gestionadas de forma segura como Secrets de Kubernetes. Nunca deben almacenarse directamente en el repositorio Git. - Tokens de Acceso: Evitar comitear tokens de acceso personal (PAT) o claves API en archivos de configuración del
repositorio (como
.git/config). Estos deben ser gestionados a través de variables de entorno del sistema de CI/CD o configuraciones locales seguras. - Imágenes Docker: Utilizar imágenes de fuentes confiables y versiones específicas (evitar
latest). Las imágenes se obtienen deus-docker.pkg.dev, un registro privado de Google Cloud, lo cual es una buena práctica. - Principio de Menor Privilegio: La cuenta de servicio de G Suite utilizada por el wrapper debe tener solo los permisos estrictamente necesarios.
- Network Policies: Considerar la implementación de Network Policies en Kubernetes para restringir el tráfico hacia
y desde los pods del
gsuite-auth-wrapper.