¿Cómo aprovisionar certificados SSL con kubernetes?

Michel Betancourt
nemobile
3 min readJun 27, 2019

--

Buenas, hoy vengo a hablarles sobre como pueden configurar un cluster de kubernetes para que genere y renueve automáticamente certificados de SSL al mas puro estilo “Configura y Olvida”, así una vez hayas terminado de leer y seguido los pasos no tendrás que preocuparte por tus certificados nunca mas 😎.

Requerimientos:

  • Kubernetes
  • Kubectl
  • Helm
  • Ingress controller

Configurando tu equipo

Se asumirá que ya se tiene un cluster de kubernetes funcionando y un controlador de ingress ya configurado para este ejemplo supondremos que se hace uso de GKE.

Para seguir este tutorial es necesario tener instalada y funcionando kubectl en mi caso uso una distribución basada en Arch linux así que basta con ejecutar en un terminal sudo pacman -Syu kubectl. En caso que poseas otra distribución o utilices Windows puedes usar el siguiente enlace para instalarlo en tu equipo Install Kubectl.

El siguiente paso es la instalación del “Gestor de paquetes” de kubernetes para eso corremos el siguiente comando

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh

de nuevo si no puedes o tienes problemas con tu SO puedes usar el siguiente enlace Install Helm. Una vez instalado hace falta instalarlo en el cluster para eso se corre el siguiente comando helm inity con esto damos por finalizado la instalación de helm.

Lo siguiente en la lista es agregar el repositorio de jetstack (donde esta cert manager) es tan sencillo como correr

helm repo add jetstack https://charts.jetstack.io

Instalando Cert Manager

Una vez culminados los pasos de helm pasamos a la siguiente fase.. instalar cert-manager, lo haremos desde los repositorios de jetstack para eso corremos en la terminal

helm install — name cert-manager — namespace cert-manager — set ingressShim.defaultIssuerName=letsencrypt-prod — set i
ngressShim.defaultIssuerKind=ClusterIssuer jetstack/cert-manager

y eso al finalizar nos mostrará una salida similar a

cert-manager instalado correctamente

Luego podemos correr kubectl get crdPara comprobar que se crearon los CRD de certmanager

Custom Resource Definitions (CRDs)

El siguiente paso es generar un ClusterIssuer que permite crear los certificados, para eso crearemos uno que utilice el servicio de Let’s Encrypt

Copiamos el contenido de arriba en un archivo y en la terminal ejecutamos kubectl create -n cert-manager -f nombre_fichero y listo, luego de ejecutado el comando tenemos instalado y configurado Cert-Manager, deben tener en cuenta que Let’s Encrypt viene con límites de peticiones, este es el servidor de producción y tiene fuertes restricciones, si deseas usarlo para hacer pruebas te recomiendo usar el de Staging que posee unos límites menos severos, para más información Aquí.

Ok.. y ahora ¿cómo lo utilizo?

Sencillo solo es necesario crear un registro en Ingress y en la parte de anotaciones colocar lo siguiente kubernetes.io/tls-acme: “true" ademas de se tiene que configurar para que utilice TLS y establecer un nombre en secret para guardar el certificado (no es necesario que existan de antemano el secret cert-manager se encarga de crearlo) y listo ya tienes certificados y renovaciones sin esfuerzo.

Si quieren pueden seguirme en Twitter 😉, suelo publicar contenido relacionado al desarrollo, tecnología y juegos. Adiós..👋

--

--