Skip to main content

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.

info

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

info

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.11 vía puerto 3306.
  • 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 algcpcloudflarequesoscarranco debe 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:

  1. Capa de Exposición: Google Cloud Load Balancer (GCE Ingress) con redirección HTTPS.
  2. Capa de Aplicación: WordPress 6.9.1 corriendo sobre PHP 8.2 y Apache.
  3. 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 RecursoNombreNamespacePropósito
Namespacewp-carrancoN/AAislamiento lógico del proyecto.
Deploymentwpwp-carrancoWorkload principal de WordPress.
Servicewpwp-carrancoExposición interna (ClusterIP).
Ingresswpwp-carrancoExposición externa (Host: quesoscarranco.com.mx).
FrontendConfigwpcarranco-frontendconfigwp-carrancoHTTPS Redirect (MOVED_PERMANENTLY_DEFAULT).
BackendConfigwpcarranco-backendconfigwp-carrancoTimeout de backend: 3600s.
PVfilestore-wp-data-pvN/AAlmacenamiento NFS (172.18.18.2:/filestralpprod/wp-carranco).
PVCwp-datawp-carrancoSolicitud de 50Gi RWX.
ConfigMapwp-php-configwp-carrancoConfiguración de PHP (uploads.ini).
Secretwp-db-secretwp-carrancoCredenciales DB.
Secretwp-admin-secretwp-carrancoCredenciales iniciales WP Admin.

8. Configuración Detallada (Específica)

8.1 WordPress Deployment (30-deployment.yaml)

note

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)

tip

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 = On
  • upload_max_filesize = 4G
  • post_max_size = 4G
  • max_execution_time = 3600
  • max_input_time = 3600
  • memory_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 en BackendConfig).

9. Almacenamiento y Persistencia

info

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)

note

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-root
    wp cache flush --allow-root
    wp 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.

danger

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

warning

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

  1. Namespace Mismatch: CLI Jobs en wp-alpura en lugar de wp-carranco.
  2. SPOF: Solo 1 réplica configurada en el Deployment.
  3. Seguridad: Secretos expuestos en texto plano en los manifiestos.
  4. Health Checks: El uso de /wp-admin/install.php para todas las probes puede no ser preciso una vez que el sitio está completamente configurado e instalado.

13. Recomendaciones

  1. Unificar Namespace: Mover todos los recursos a wp-carranco.
  2. Escalado: Incrementar réplicas a 2 para HA.
  3. Seguridad: Implementar GCP Secret Manager.
  4. 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.