Kubernetes para impostores III

Hoy día no hay web que se precie que no esté accesible por https salvo que tengas un motivo de peso, como lo tengo yo para esta web, para no ponerlo.

En este artículo veremos como poner certificados https a tus aplicaciones.

Necesitas instalar Kubernetes tal como explico en Kubernetes para impostores I en cualquier servidor público. Cualquier instancia que te crees en cualquier proveedor de internet te servirá y no te gastarás más de 20 céntimos en este experimento.

Debes conocer ...

cert-manager

cert-manager es un software que se instala en Kubernetes y te crea los certificados, los renueva, ... olvídate de webs caídas por certificados caducados.

Para ello de vez en cuando comprueba que los certificados no caduquen, se conecta a la autoridad certificadora para bajarse nuevos certificados, ... con esto ya te haces una idea de como funciona.

nip.io

nip.io es un servicio de DNS que devuelve la IP de tu servidor si la pones en el nombre dns, por ejemplo, para wordpress.1-2-3-4.nip.io te devolverá 1.2.3.4 tal que así:

$ nslookup wordpress.1-2-3-4.nip.io
Server:     127.0.0.53
Address:    127.0.0.53#53

Non-authoritative answer:
Name:   wordpress.1-2-3-4.nip.io
Address: 1.2.3.4

Si estás en el mundillo de la consultoría probablemente ya conozcas este servicio y si no lo conoces, te habrá costado más sobrevivir a tus clientes. ;-)

letsencrypt

letsencrypt es una autoridad certificadora patrocinada por un montón de empresas que junto con cert-manager te permite una gestión fácil de los certificados.

Y además, es gratis.

Certificados https

Vamos a usar letsencrypt con http01, lo que permite autenticar los dominios usando el protocolo http de forma automatizada.

Instalando cert-manager

Ejecuta esto en el kubernetes que acabas de instalar y tendrás cert-manager instalado:

kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm upgrade --install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --version v0.15.1

Configurando cert-manager

Este gestor soporta múltiples formas de obtener certificados, pero nosotros vamos a usar letsencrypt y este proveedor necesita un correo electrónico para configurar tu certificado así que te creas este fichero poniendo bien tu correo:

---
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # The ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: midireccion@de.correo
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-prod
    # Enable the HTTP-01 challenge provider
    solvers:
    - http01:
        ingress:
          class: nginx

Y lo aplicas:

kubectl apply -f cert-manager-issuer-letsencrypt-production.yaml

Este método solo funciona si tu servidor es accesible desde internet así que si estás en tu casa ni lo intentes. El proveedor de certificados que usaremos se va a intentar conectar a tu servidor para comprobar que el dominio para el que quieres el certificado está asociado a tu IP en el DNS, así que necesitas una ip pública con el nombre correctamente dado de alta en el dns.

Asegúrate de haber dado de alta correctamente el nombre en el dns o letsencrypt te baneará. Trasteando es muy fácil llegar a esos límites así que intenta hacerlo bien desde el principio y si te banean, cambia tu ip pública.

Instalando aplicaciones

Ahora vamos a por nuestro wordpress pero por https ( revisa esto ):

helm repo add bitnami https://charts.bitnami.com/bitnami
helm upgrade --install wordpress \
  --set ingress.enabled=true \
  --set ingress.tls=true \
  --set ingress.certManager=true \
  --set ingress.hostname=wordpress.1-2-3-4.nip.io \
  --set ingress.annotations."cert-manager\.io/cluster-issuer=letsencrypt-prod" \
  bitnami/wordpress

Como ves hemos usado nip.io para el dns. Recuerda cambiar 1-2-3-4 por la IP de tu instancia.

Si cuentas hasta 100 y accedes con el navegador, verás que ya te sale el candadito verde:

Hasta aquí ...

... hemos visto los mínimos que necesitas para, usando una Ubuntu con IP pública, poner un wordpress por https.

Ser capaz de seguir este manual es lo mínimo necesario para que pongas en tu currículum "conocimientos básicos de Kubernetes" así que, ponte a ello que no te llevará más de 2 horas si vas despacio ... y unos 20 centimillos de euro.