Despliegue de WordPress en Kubernetes (quesoscarranco.com.mx)
1. Resumen Ejecutivo
Este documento describe la arquitectura de despliegue para el sitio web Carranco basado en WordPress sobre un clúster de Kubernetes (GKE). La solución utiliza servicios administrados de Google Cloud Platform (GCP) como Cloud Filestore para el almacenamiento persistente compartido y una base de datos externa para la persistencia de datos. El acceso se gestiona a través de un Cloud Load Balancer (GCE Ingress) con certificados SSL gestionados y redirecci ón forzada a HTTPS.
Esta arquitectura está diseñada específicamente para alta disponibilidad de archivos mediante almacenamiento NFS administrado, permitiendo el escalado horizontal de la capa de aplicación sin pérdida de consistencia en el contenido de WordPress (wp-content).
2. Repositorio de Código Fuente
El código fuente de este despliegue y sus manifiestos se encuentran gestionados en el siguiente repositorio institucional: https://hub-gitlab.alpura.com/wordpress/alpura-gcp-wordpress.git
3. Objetivo del Documento
Definir y documentar la arquitectura técnica de alto nivel (HLD) del despliegue de WordPress, asegurando que los equipos de SRE, DevOps y Arquitectura comprendan la interacción entre los recursos de Kubernetes y las dependencias externas.
4. Alcance
El análisis abarca los siguientes recursos definidos en los manifiestos YAML:
- Workloads:
Deployment,Job,Pod. - Red y Exposición:
Service,Ingress,FrontendConfig,BackendConfig. - Configuración y Secretos:
ConfigMap,Secret. - Almacenamiento:
PersistentVolume,PersistentVolumeClaim. - Organización:
Namespace.
5. Supuestos y Limitaciones
- Base de Datos: Se asume que la base de datos MySQL/MariaDB está pre-configurada y es accesible en la IP
172.18.17.11vía puerto3306. - Infraestructura GCP: Se asume la existencia de una instancia de Filestore en la red VPC y una IP estática global denominada
algcpwpcarranco. - Certificados: El certificado SSL
algcpcloudflarequesoscarrancodebe estar previamente aprovisionado en Google Cloud Certificate Manager.
6. Vista General de la Arquitectura
La arquitectura sigue un patrón de aplicación web de 3 capas en Kubernetes:
- Capa de Exposición: Google Cloud Load Balancer (GCE Ingress) con redirección HTTPS.
- Capa de Aplicación: WordPress 6.9.1 corriendo sobre PHP 8.2 y Apache.
- Capa de Datos: Cloud Filestore para archivos y Base de Datos externa.
6.1 Diagrama General de Arquitectura En Mermaid
7. Inventario de Componentes
| Tipo de Recurso | Nombre | Namespace | Propósito |
|---|---|---|---|
| Namespace | wp-carranco | N/A | Aislamiento lógico del proyecto. |
| Deployment | wp | wp-carranco | Workload principal de WordPress. |
| Service | wp | wp-carranco | Exposición interna (ClusterIP). |
| Ingress | wp | wp-carranco | Exposición externa (Host: quesoscarranco.com.mx). |
| FrontendConfig | wpcarranco-frontendconfig | wp-carranco | HTTPS Redirect (MOVED_PERMANENTLY_DEFAULT). |
| BackendConfig | wpcarranco-backendconfig | wp-carranco | Timeout de backend: 3600s. |
| PV | filestore-wp-data-pv | N/A | Almacenamiento NFS (172.18.18.2:/filestralpprod/wp-carranco). |
| PVC | wp-data | wp-carranco | Solicitud de 50Gi RWX. |
| ConfigMap | wp-php-config | wp-carranco | Configuración de PHP (uploads.ini). |
| Secret | wp-db-secret | wp-carranco | Credenciales DB. |
| Secret | wp-admin-secret | wp-carranco | Credenciales iniciales WP Admin. |
8. Configuración Detallada (Específica)
8.1 WordPress Deployment (30-deployment.yaml)
El deployment utiliza la imagen wordpress:6.9.1-php8.2-apache.
Variables de Entorno y Lógica de Proxy
Se inyecta un bloque de código PHP en WORDPRESS_CONFIG_EXTRA para asegurar la compatibilidad con el Load Balancer de Google:
if (!defined('WP_HOME')) {
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
}
if (!defined('WP_SITEURL')) {
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
}
if (!defined('FORCE_SSL_ADMIN')) {
define('FORCE_SSL_ADMIN', true);
}
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
define('DISALLOW_FILE_EDIT', true);
define('AUTOMATIC_UPDATER_DISABLED', true);
define('WP_DEBUG', false);
Recursos de Computación
- Requests: CPU:
1, Memoria:4Gi. - Limits: CPU:
2, Memoria:6Gi.
Health Checks (Probes)
- Startup Probe: Path
/wp-admin/install.php, port 80,failureThreshold: 60,periodSeconds: 5. - Readiness Probe: Path
/wp-admin/install.php, port 80,initialDelaySeconds: 20,failureThreshold: 6. - Liveness Probe: Path
/wp-admin/install.php, port 80,initialDelaySeconds: 60,failureThreshold: 6.
8.2 Configuración PHP (31-configmap-php.yaml)
La configuración de PHP está optimizada para manejar archivos de gran tamaño y tiempos de ejecución prolongados.
Archivo uploads.ini:
file_uploads = Onupload_max_filesize = 4Gpost_max_size = 4Gmax_execution_time = 3600max_input_time = 3600memory_limit = 5G
8.3 Red y Exposición (40-service.yaml, 50-ingress...)
- IP Estática:
algcpwpcarranco. - Certificado:
algcpcloudflarequesoscarranco. - Dominio:
quesoscarranco.com.mx. - Backend Timeout:
3600s(Configurado enBackendConfig).
9. Almacenamiento y Persistencia
Se utiliza Google Cloud Filestore para permitir que múltiples instancias de WordPress compartan el mismo directorio /wp-content.
- Servidor NFS:
172.18.18.2. - Path:
/filestralpprod/wp-carranco. - Mount Options:
vers=3,proto=tcp. - Mount Path:
/var/www/html/wp-content.
10. Herramientas Auxiliares (WP-CLI)
Se han detectado dos herramientas para mantenimiento manual y automatizado:
10.1 Job de Search-Replace (wp-cli-job.yaml)
Este Job reemplaza URLs en la base de datos, útil para migraciones.
- Comando:
wp search-replace 'https://wp.alpura.com' 'https://alpura.com' --all-tables --skip-columns=guid --allow-rootwp cache flush --allow-rootwp rewrite flush --allow-root
10.2 Pod de Reparación Manual (wp-cli-fix.yaml)
Este pod descarga WP-CLI dinámicamente y ejecuta un script de validación.
Atención: Este pod y el job de CLI están configurados en el namespace wp-alpura por error en los manifiestos suministrados. Deben moverse a wp-carranco.
11. Gestión de Secretos
Los secretos están definidos en formato stringData en los YAML (10-secrets.yaml). En producción, estos valores deben ser inyectados mediante un gestor de secretos seguro.
- wp-db-secret: Host:
172.18.17.11, DB:wp_carranco, User:wp_alpura_user. - wp-admin-secret: Admin:
admin, Email:arquitectura@alpura.com.
12. Riesgos Técnicos Detectados
- Namespace Mismatch: CLI Jobs en
wp-alpuraen lugar dewp-carranco. - SPOF: Solo 1 réplica configurada en el Deployment.
- Seguridad: Secretos expuestos en texto plano en los manifiestos.
- Health Checks: El uso de
/wp-admin/install.phppara todas las probes puede no ser preciso una vez que el sitio está completamente configurado e instalado.
13. Recomendaciones
- Unificar Namespace: Mover todos los recursos a
wp-carranco. - Escalado: Incrementar réplicas a
2para HA. - Seguridad: Implementar GCP Secret Manager.
- Monitoreo: Cambiar las probes a un endpoint que valide la conexión a la DB una vez instalado.
14. Conclusión
La arquitectura aprovecha componentes nativos de GCP para ofrecer una solución robusta y lista para escalar. La inclusión de optimizaciones específicas de PHP y lógica de proxy en WordPress asegura una operación fluida detrás del Cloud Load Balancer.