Bienvenido, me llamo Miguel y aquí les traigo este tutorial.
Índice
Usando cert-manager para administrar certificados TLS de Let’s Encrypt y ejecutando múltiples réplicas de Traefik v2
En mi publicación anterior, «Inicio rápido con Traefik v2 en Kubernetes», revisé una configuración rápida de 5 minutos de un extremo a otro de Traefik, Let’s Encrypt y Cloudflare para manejar las solicitudes HTTPS en Kubernetes. Si bien esa configuración con Traefik CRD es conveniente para crear y renovar certificados automáticamente a través de las definiciones de IngressRoute, se ejecuta con una sola instancia de Traefik, lo que significa que no tiene una alta disponibilidad. En otras palabras, Traefik se convierte en el único punto de falla para todo el tráfico de entrada a su clúster.
En Traefik v1, hubo soporte beta para clustering / modo HA utilizando una tienda KV (por ejemplo, Consul, etcd, etc). Sin embargo, Traefik v2 eliminó el soporte para almacenar certificados ACME / Let’s Encrypt en una tienda KV, citando errores con el algoritmo de consenso de balsa (N.º 4851, N.º 3487, N.º 5047, N.º 3833). La función de gestión automática de certificados se trasladó a TraefikEE, lo que permite a los usuarios de código abierto ejecutar una versión que no sea de alta disponibilidad o implementar una solución personalizada para la gestión de certificados.
La documentación de Traefik recomienda usar cert-manager como el controlador de certificados y señala soporte limitado para el CRD de ruta de ingreso:
Al utilizar Traefik Kubernetes CRD Provider, lamentablemente Cert-Manager no puede interactuar directamente con los CRD todavía, pero nuestro equipo está trabajando en esto. Una solución alternativa es permitir que el proveedor de Kubernetes Ingress permita que Cert-Manager cree objetos de entrada para completar los desafíos. Tenga en cuenta que esto aún requiere la intervención manual para crear los certificados a través de Cert-Manager, pero una vez creado, Cert-Manager mantendrá el certificado renovado.
Esta publicación explica cómo sortear esta limitación y ejecutar Traefik v2 en modo HA en Kubernetes. Usaré Cloudflare como mi proveedor de DNS y solucionador de desafíos ACME, pero siéntase libre de usar cualquier otro proveedor compatible con Let’s Encrypt.
Prerrequisitos
- Clúster de Kubernetes (p. Ej., GKE)
- Timón v3
- Proveedor de DNS (por ejemplo, Cloudflare)
Instalar Traefik
Implementaremos Traefik para el espacio de nombres de traefik
:
$ kubectl create namespace traefik
Ahora implementemos Traefik con 3 réplicas. Puedes ver los valores en traefik/traefik-values.yaml
:
Valores de timón para la configuración de Traefik HA
$ helm repo add traefik https://containous.github.io/traefik-helm-chart $ helm install -n traefik traefik traefik/traefik -f traefik/traefik-values.yaml
Espere a que surjan las implementaciones y tome nota de la IP del equilibrador de carga.
Instalar Cert-Manager
Cert-manager es una herramienta de código abierto para automatizar la emisión y renovación de certificados TLS:

Lo instalaremos en el espacio de nombres cert-manager
:
$ kubectl create namespace cert-manager
Añade el Repo de Jetstack Helm e instalar CRD:
$ helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v0.16.0 \ --set installCRDs=true
Espere a que aparezcan todos los pods de administrador de certificados:
$ kubectl get pods -n cert-manager -w
Implementar una aplicación
Por el bien de la demostración, implementaremos la aplicación whoami
en el espacio default
de nombres (ver debajo directorio whoami
para archivos de implementación, servicio e ingreso). Puede reemplazar esto con su aplicación o gráfico de Helm conocido (por ejemplo, Grafana, Kibana, etc.).
Implementación predeterminada de whoami, servicio, rutas de entrada
Reemplazar whoami.example.com
con su FQDN e implemente:
$ kubectl apply -f whoami
Crear certificados
Para emitir nuevos certificados, primero debemos definir un Emisor. En este ejemplo, usaré Cloudflare para el tipo de emisor ACME, usando el servidor provisional de Let’s Encrypt. También puedes encontrar otros configuraciones compatibles (Autofirmado, CA, Vault, Venafi y tipos de emisor externo) en la documentación.
Ejemplo de emisor de cert-manager
Configurar las secciones email
y solvers
en certs/issuer.yaml
. Para usar Cloudflare como DNS01 solucionador de desafíos, primero cree un nuevo token de API con la siguiente configuración:
Permisos:
Zone - DNS - Edit
Zone - Zone - Read
Recursos de zona:
Monte el token como secreto de Kubernetes:
$ kubectl create secret generic cloudflare-token --from-literal=dns-token=<my-api-token>
Finalmente, configure el certificado (modifique el commonName
, secretName
y dnsNames
según sea necesario en certs/whoami-cert.yaml
) y desplegar:
Certificado de ejemplo de aplicación whoami
$ kubectl apply -f certs
Configurar DNS
Compruebe si se ha generado el certificado:
$ kubectl describe certificate whoami-cert
También puede consultar los registros de depuración de Traefik para ver cómo se activa el certificado.
Finalmente, apunte el registro DNS a la dirección IP del Load Balancer para ver un sitio habilitado para TLS respaldado por HA Traefik + cert-manager. Opcionalmente, puede implementar el middleware de redireccionamiento HTTPS para que esté completo.
Ahora tenemos una implementación HA de Traefik en Kubernetes. La desventaja de usar cert-manager es que el usuario ahora debe recordar crear el certificado antes de implementar IngressRoute, pero lograr HA es más importante en producción para evitar tiempos de inactividad.
Gracias por leer.
Añadir comentario