GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo instalar Kubernetes Cert-Manager y configurar Let's Encrypt

Cert-Manager automatiza el aprovisionamiento de certificados dentro de los clústeres de Kubernetes. Proporciona un conjunto de recursos personalizados para emitir certificados y adjuntarlos a los servicios.

Uno de los casos de uso más comunes es proteger las aplicaciones web y las API con certificados SSL de Let's Encrypt. Aquí se explica cómo agregar Cert-Manager a su clúster, configurar un emisor de certificados de Let's Encrypt y adquirir un certificado para Pods expuestos a través de un Ingress.

Instalando Cert-Manager

Cert-Manager es más fácil de instalar usando Helm. Helm es un administrador de paquetes de Kubernetes que le permite agregar aplicaciones a su clúster utilizando repositorios de gráficos prediseñados. Asegúrese de tener Helm instalado y configurado con una conexión a su clúster de Kubernetes.

Comience agregando el repositorio de Jetstack a su instalación de Helm. Jetstack desarrolló originalmente Cert-Manager antes de que fuera donado a CNCF.

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

Ahora instale Cert-Manager en su clúster:

helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.5.3 --set installCRDs=true

Reemplace el número de versión que se muestra arriba con la última versión que se muestra en la documentación de Cert-Manager.

El comando instalará Cert-Manager en un nuevo espacio de nombres de Kubernetes llamado cert-manager . Los installCRDs La configuración agregará los recursos personalizados de Kubernetes de Cert-Manager durante la instalación. Esto solo funciona con la versión 3.2 de Helm y posteriores; si está utilizando una versión anterior, debe agregar manualmente las definiciones de recursos con Kubectl:

kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.crds.yaml

Agregar el complemento de Kubectl

Cert-Manager tiene un complemento de Kubectl que simplifica algunas tareas de administración comunes. También le permite verificar si Cert-Manager está activo y listo para atender solicitudes.

Instale el complemento descargando su archivo y extrayéndolo al directorio correcto:

curl -L -o kubectl-cert-manager.tar.gz https://github.com/jetstack/cert-manager/releases/latest/download/kubectl-cert_manager-linux-amd64.tar.gz
tar xzf kubectl-cert-manager.tar.gz
sudo mv kubectl-cert_manager /usr/local/bin

Ahora use el complemento para verificar que su instalación de Cert-Manager esté funcionando:

kubectl cert-manager check api

Debería ver el siguiente resultado:

The cert-manager API is ready

Ahora está listo para agregar un emisor para obtener certificados de Let's Encrypt.

Creación de un emisor de certificados

Los emisores y los emisores de clúster son recursos que suministran certificados a su clúster. La instalación básica de Cert-Manager creada hasta ahora no puede emitir certificados. Agregar un emisor que esté configurado para usar Let's Encrypt le permite adquirir de forma dinámica nuevos certificados para los servicios en su clúster.

Cree un archivo YAML en su directorio de trabajo y asígnele el nombre issuer.yml . Agrega el siguiente contenido:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-staging
    solvers:
      - http01:
          ingress:
            class: nginx

Debe reemplazar la dirección de correo electrónico con su propio correo electrónico de contacto. Esto se incluirá en sus certificados. Let's Encrypt también puede enviarle un correo electrónico a la dirección si necesita enviarle alertas sobre sus certificados.

Estamos creando un ClusterIssuer ya que están disponibles para todos los recursos de su clúster, independientemente del espacio de nombres. Un Issuer estándar es un recurso de espacio de nombres que solo puede suministrar certificados dentro de su propio espacio de nombres.

Nuestra configuración de emisor le indica a Cert-Manager que obtenga certificados del servidor de ensayo de Let's Encrypt. Es una buena idea usar el entorno de prueba mientras configura su integración para evitar alcanzar los estrictos límites de tasa de producción de Let's Encrypt.

Usa kubectl para agregar el emisor a su clúster:

kubectl create -f issuer.yml

Obteniendo un Certificado

Ahora puede usar su emisor para adquirir un certificado para un servicio expuesto a través de un recurso de Ingress. Cert-Manager monitorea automáticamente los recursos de Ingress y crea certificados usando la configuración en sus tls campo. Solo necesita agregar una anotación que nombre el emisor o el emisor del clúster que desea usar.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: wordpress:latest
          ports:
            - containerPort: 80
 
---

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    port: 80
 
---

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-staging
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            backend:
              serviceName: my-service
              servicePort: 80
  tls:
    - hosts:
      - example.com

Este archivo YAML define un pod, un servicio y un ingreso que expone el servicio. Asume el uso de nginx-ingress como controlador de entrada. El Pod ejecuta un contenedor de WordPress al que se podrá acceder a través de HTTPS en example.com .

La presencia de cert-manager.io/cluster-issuer Cert-Manager detectará la anotación en el recurso Ingress. Usará el letsencrypt-staging emisor de clúster creado anteriormente para adquirir un certificado que cubra los nombres de host definidos en tls.hosts de Ingress campo.

Uso de Let's Encrypt en producción

Una vez que haya adquirido con éxito un certificado provisional, puede migrar a los servidores de producción de Let's Encrypt. Los certificados provisionales son válidos, pero los navegadores no confían en ellos, por lo que debe obtener un reemplazo de producción antes de poner su sitio en funcionamiento.

Es mejor agregar un emisor de clúster separado para el servidor de producción. Luego puede hacer referencia al emisor apropiado en cada uno de sus recursos de Ingress, dependiendo de si están listos para la producción.

Copie la configuración del emisor que se muestra arriba y cambie el name campos a letsencrypt-production . A continuación, reemplace la URL del servidor con el valor que se muestra a continuación:

https://acme-v02.api.letsencrypt.org/directory

Cree el nuevo emisor en su clúster:

kubectl create -f issuer-production.yml

Actualice su recurso de Ingress para solicitar un certificado de producción cambiando el valor de cert-manager.io/cluster-issuer anotación a letsencrypt-production (o el nombre que le asignó a su propio emisor de producción). Usa kubectl para aplicar el cambio:

kubectl apply -f my-ingress.yaml

Ahora debería tener habilitado HTTPS en pleno funcionamiento para su recurso de Ingress. Cert-Manager administrará automáticamente sus certificados y los renovará antes de que caduquen.

Actualización del administrador de certificados

Las versiones de Cert-Manager suelen admitir actualizaciones en el lugar con Helm:

helm repo update
helm upgrade --version <new version> cert-manager jetstack/cert-manager

Los certificados permanecen disponibles durante las actualizaciones, pero el proceso de renovación se detendrá.

Aunque las actualizaciones ahora son normalmente sencillas, siempre debe revisar las notas de la versión para identificar los posibles cambios que debe realizar. Esto es particularmente importante si está actualizando Kubernetes o pasando por varias versiones de Cert-Manager. Si todavía usa una versión anterior de Kubernetes, es posible que tenga una versión obsoleta de Cert-Manager que requiera una intervención manual significativa para actualizarla.

Resumen

Let's Encrypt se agrega fácilmente a un clúster de Kubernetes mediante Cert-Manager. Debe instalar Cert-Manager con Helm, crear un emisor que use la API Let's Encrypt y luego hacer referencia a ese emisor en sus recursos de Ingress.

Puede proporcionar Cert-Manager con su propia configuración para casos de uso más avanzados. Puede especificar la vigencia de un certificado (utilice cert-manager.io/duration anotación de ingreso), declare manualmente el nombre común del certificado (cert-manager.io/common-name ), y use desafíos de DNS en lugar de HTTP. La última opción puede ser útil en escenarios específicos, como cuando desea adquirir un certificado comodín.

El uso directo para proteger las aplicaciones web y las API debería funcionar tal como está utilizando los recursos que se muestran arriba. La verificación HTTP funciona mediante la manipulación del controlador Ingress para proporcionar un .well-known temporal. URL a la que puede acceder Let's Encrypt. Si su dominio proporciona el valor correcto en esa URL, Let's Encrypt confía en que tiene el control y emite el certificado.


Docker
  1. Cómo instalar y configurar Ansible en Windows

  2. Cómo instalar y configurar Nginx en CentOS 7

  3. Cómo instalar y configurar Redis en Ubuntu 18.04

  4. Cómo instalar y configurar Monit.

  5. Cómo instalar y configurar Monit.

Cómo instalar y configurar Redmine en Debian 9

Cómo instalar y configurar Kubernetes (k8s) en Ubuntu 18.04 LTS

Cómo instalar y configurar Kubernetes y Docker en Ubuntu 18.04 LTS

Cómo instalar y configurar Kubernetes en Ubuntu

Cómo instalar Let's Encrypt en Nginx

Cómo instalar y configurar Grafana