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.
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:
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
.
- Clúster de
Kubernetes
(p. Ej.,GKE
). -
Timón v3
. - Proveedor de DNS (por ejemplo,
Cloudflare
).
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.
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
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
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
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 este tutorial.
Añadir comentario