Nov 13 2021

Renovar un certificado LetsEncrypt automáticamente en Kubernetes

Published by at 9:24 under Kubernetes

Instalar cert-manager

Cert-manager es un chart Helm que proporciona sus propios recursos que puede instalar en un clúster de Kubernetes. Ayuda en la automatización de certificado, su renovación y gestión. Es un valor agregado real cuando utiliza proveedores de certificados que ofrecen API para automatizar estos procesos. Además, es mejor renovar los certificados de LetsEncrypt automáticamente ya que solo son válidos por un período de 3 meses.
cert-manager está disponible en el repositorio Helm Jetstack, agréguelo a su lista de repositorios de esta manera:

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


Cert-manager se ejecuta en su propio namespace, así que créelo primero e instale el chart Helm cert-manager

kubectl create namespace cert-manager
helm install cert-manager \
     --namespace cert-manager jetstack/cert-manager \
     --set installCRDs=true

–set installCRDs=true dice a cert-manager que instale recursos personalizados como certificaterequests, certificates o clusterissuers.


Cluster Issuer LetsEncrypt

Un cluster issuer contendrá la información de un proveedor de certificados. Si desea obtener sus certificados SSL firmados por LetsEncrypt, deberá aplicar este archivo yaml al clúster de Kubernetes:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: it@company.xxx
    privateKeySecretRef:
      name: letsencrypt-prod
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
    - http01:
        ingress:
          class: public-iks-k8s-nginx

LetsEncrypt pertenece a la categoría de emisores ACME, lo que significa que los navegadores web confían en ellos. Proporciona un certificado después de verificar que es el propietario del dominio. La verificación se puede hacer de 2 formas: ya sea una entrada TXT de DNS o un challenge HTTP. Kubernetes sirve HTTP, por lo que la mayoría elegirá el challenge HTTP01. Esto se define en la sección de solvers.

La segunda información importante es la clase. cert-manager mirará los ingresos cuya clase coincida y les proporcionará un certificado SSL. Anotación de clase de ingress públicas de IBM Cloud se llama public-iks-k8s-nginx, por lo tanto, debe configurarlo en el clúster issuer. Verifique su ingress para que se adapte a sus propias necesidades.


Definición de Ingress

Ahora que tiene un clúster issuer y cert-manager está instalado, deberá indicarles a qué ingress deben emitir certificados. Esto se hace con las anotaciones del ingress.
Simplemente especifique el emisor del clúster en la anotación cert-manager.io/cluster-issuer.
Como se vio anteriormente, la anotación kubernetes.io/ingress.class se establece en public-iks-k8s-nginx en IKS. Ingrese lo que sea apropiado en su configuración.
Agregue acme.cert-manager.io/http01-edit-in-place dependiendo de si desea un ingress separada para el challenge HTTP o si es parte de la entrada existente.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  labels:
    name: app-ingress
  annotations:
    acme.cert-manager.io/http01-edit-in-place: "true"
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/ingress.class: public-iks-k8s-nginx
spec:
  tls:
  - hosts:
    - www.netexpertise.eu
    secretName: letsencrypt-netexpertise

  rules:
  - host: www.netexpertise.eu
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-backend-app
            port:
              number: 80


Renovar certificados LetsEncrypt

Cert-manager creará ingress, servicio y pod en su namespace que proporcionará una página web para el challenge HTTP. Desaparecerán tan pronto como el certificado LetsEncrypt se haya renovado y emitido en el secreto definido en secretName.

Si encuentra un problema, puede echar un vistazo a los registros de los diferentes pods en el namespace de cert-manager, así como en el estado del recurso de certificado. Un kubectl describe cert debe proporcionar toda la información necesaria.


No responses yet

Comments RSS

Leave a Reply