Pide tu presupuesto ya!

Usando Traefik y Letsencrypt con k3s Kubernetes

Lidiar con las complejidades de administrar certificados, enrutar y proteger sus aplicaciones es una lucha común y puede ser un verdadero dolor de cabeza. La buena noticia es que existe una manera de sortear estas complejidades: Traefik y LetsEncrypt con k3s Kubernetes.

En este tutorial, aprenderá cómo este trío puede ayudar a optimizar las operaciones y garantizar una comunicación segura mientras administra certificados sin esfuerzo.

¡Siga leyendo y comience a crear una base sólida para operaciones seguras y eficientes!

Requisitos previos

Antes de profundizar más, asegúrese de tener los componentes y la información necesarios para seguir este tutorial:

  • Un nombre de dominio listo al que desea que acceda su clúster a través de HTTPS: este tutorial utiliza thriveread.sitio.
  • A registro DNS de dominio A apuntando a su dirección IP.
  • Un servidor remoto que funcione: esta guía usa Ubuntu 22.00 LTS, pero puedes usar AWS EC2 para crear un K3 grupo.
  • kubectl instalado y configurado en su servidor.
  • Traefik instalado en su clúster k3s.

Instalación de un clúster k3s

Saliendo del final de su lista de verificación de requisitos previos, es hora de sumergirse en el meollo del asunto: instalar un clúster k3s. Este proceso es crucial para aprovechar eficazmente el poder de Traefik y Let’s Encrypt.

Diseñar el acceso a la producción de k3s con certificados TLS válidos genera confianza en quien accede a sus servicios al mejorar SSL/TLS desde su instalación de k3s.

Para instalar un clúster k3s, siga estos pasos:

Abra una terminal en su servidor y ejecute el siguiente comando para realizar lo siguiente:

  • Descargar (curl) los últimos binarios k3s del https://get.k3s.io URL en silencio y siga las redirecciones si es necesario (-sfL).
  • Establecer una variable de entorno (INSTALL_K3S_EXEC), especificando la dirección SERVER_IP para la cual se deben generar los certificados TSL (--tls-san). Por lo tanto, asegúrese de reemplazar SERVER_IP con la dirección IP de su servidor.

    De esta manera, la dirección IP de su servidor se agrega como Nombre alternativo del sujeto (SAN)para que k3s pueda comunicarse de forma segura a través de TLS utilizando la dirección IP de su servidor.

  • Ejecutar comandos de shell (sh) que hacen que el shell lea comandos de la entrada estándar (-s) y especifique el modo de permisos para el archivo kubeconfig generado (--write-kubeconfig-mode).

    En este caso, el comando de shell establece el modo en 644que configura el archivo para que el propietario pueda leerlo y escribirlo y solo otros puedan leerlo.

En resumen, este comando instala e inicia inmediatamente un clúster k3s.

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--tls-san SERVER_IP" sh -s - --write-kubeconfig-mode 644
Instalación de un clúster k3s

A continuación, ejecute cada kubectl comando a continuación para obtener todos los nodos de su clúster y una descripción general de la configuración de su clúster.

# List all nodes in the cluster
kubectl get nodes
# View the cluster's configuration
kubectl cluster-info

El siguiente resultado, donde se ve un maestro nodo en Listo estado, confirma que su clúster k3s está correctamente instalado y listo para ejecutar su carga de trabajo.

En este punto, su nombre de dominio envía tráfico a su servidor.

Comprobando si el clúster k3s se está ejecutando
Comprobando si el clúster k3s se está ejecutando

Configurar un Cert-Manager con k3s

Con su clúster k3s en ejecución, se requiere una forma de manejar los certificados sin problemas. Un administrador de certificados utiliza emisores de certificados como Let’s Encrypt para agregar certificados a su clúster de Kubernetes.

Imagine que sus aplicaciones necesitan comunicarse de forma segura a través de Internet. En tales casos, entran en juego los certificados SSL.

Para configurar un administrador de certificados para conexiones seguras, proceda con lo siguiente:

1. Ejecute el siguiente comando para create un kubernetes namespace llamado cert-manager (arbitrario) que utilizará para gestionar los certificados generados.

Si tiene éxito, la creación de un espacio de nombres no produce resultados en el terminal, lo cual se aplica a lo largo de este tutorial.

kubectl create namespace cert-manager

💡 Tenga en cuenta que también puede obtener un administrador de certificados utilizando gráficos de Helm.

2. A continuación, ejecute el kubectl apply comando para crear definiciones de recursos personalizados (CRD) e implementar el administrador de certificados y sus componentes en su clúster k3s.

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml
Implementación del administrador de certificados y sus componentes en el clúster k3s
Implementación del administrador de certificados y sus componentes en el clúster k3s

3. Finalmente, ejecute el siguiente comando para consultar su clúster k3s y get una lista de todos los pods en el cert-manager espacio de nombres.

kubectl get pods --namespace cert-manager

El Correr El estado a continuación verifica que el administrador de certificados implementado se ejecute como se esperaba.

Verificación de los pods del administrador de certificados
Verificación de los pods del administrador de certificados

Garantizar renovaciones de certificados sin problemas con un ClusterIssuer

Después de sentar las bases para una comunicación segura con su administrador de certificados, necesita un puente entre su administrador de certificados y su clúster k3s: un ClusterIssuer. Este puente garantiza que sus certificados se emitan y renueven sin problemas.

En este ejemplo, utiliza el Emisor ACME servidor para generar claves de administrador de certificados HTTP01 (Solucionador de ingreso) validación de desafío.

Para garantizar renovaciones de certificados sin problemas, siga los pasos a continuación:

1. Crea un certificados.yml archivo con su editor preferido (es decir, Visual Studio Code), complete la siguiente configuración y guarde y cierre el archivo.

Esta configuración establece una ClusterIssuer llamado letsencrypt-certificate asociado con una cuenta de Let’s Encrypt.

Además, esta configuración define los ajustes para la emisión de certificados. Estas configuraciones incluyen cómo manejar desafíos para la validación a través de un controlador de Ingress (traefik).

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  # Name your ClusterIssuer resource
  name: letsencrypt-certificate
  # Add the cert-manager namespace you created earlier
  namespace: cert-manager
spec:
  acme:
    # Let's Encrypt ACME server (The server URL)
    server: https://acme-v02.api.letsencrypt.org/directory
    # Replace this with your email to be associated with the Let's Encrypt account
    email: [email protected]
    privateKeySecretRef:
      # Name a secret key you'll use on Ingress to access ClusterIssuer
      # This key's name tells ClusterIssuer where the private key is stored
      name: example.letsencrypt.key.tls
    solvers:
    - selector: {}
      # Add http01 challenge for key validation
      http01:
        ingress:
          # Specify the Ingress controller that will use the HTTP01 challenges
          class: traefik

2. A continuación, ejecute lo siguiente kubectl apply comando para desplegar el ClusterIssuer recurso en su certs.yml archivo de configuración a su clúster k3s.

kubectl apply -f certs.yml
Implementación de un recurso ClusterIssuer en el clúster k2s
Implementar un ClusterIssuer recurso para el clúster k2s

3. Una vez implementado, ejecute el siguiente comando para recuperar (describe) información detallada sobre su ClusterIssuer recurso (letsencrypt-certificate).

kubectl describe clusterissuer letsencrypt-certificate

Si se implementa con éxito, su ClusterIssuer habrá aplicado correctamente las claves de certificado y el servidor ACME ListoComo se muestra abajo.

Comprobación de un ClusterIssuer implementado
Comprobación de un ClusterIssuer implementado

4. Ahora, ejecute el siguiente comando para recuperar una lista de CRD relacionados con el cert-manager.

El siguiente resultado demuestra que los CRD para cert-manager se han configurado correctamente y son accesibles desde su clúster k3s. Esta configuración es un requisito previo esencial para que su administrador de certificados administre los certificados TLS correctamente.

Verificar que los CRD para cert-manager sean accesibles dentro del clúster k3s
Verificar que los CRD para cert-manager sean accesibles dentro del clúster k3s

Configuración de su clúster k3s con Traefik y Cert-Manager

Como desplegar un ClusterIssuer Para las renovaciones de certificados, una gestión de certificados segura y fluida es igualmente crucial. Configurar Traefik para enrutamiento y administrador de certificados es fundamental para una configuración de Kubernetes sólida y segura.

A estas alturas, tiene LetsEncrypt listo para exponer su controlador de Ingress y entregar tráfico seguro de Kubernetes a su clúster. Pero imagina tener una sinfonía de herramientas perfectamente orquestada funcionando armoniosamente en tu grupo k3s: ¡pura comodidad!

Para configurar su clúster k3s con Traefik y cert-manager, debe crear una implementación y un servicio para su aplicación usando NGINX de la siguiente manera:

1. Ejecute el siguiente comando para create a namespace llamado deployment (arbitrario) para su aplicación.

kubectl create namespace deployment

2. A continuación, cree un implementación.yml archivo, agregue las siguientes configuraciones, guarde el archivo y cierre el editor.

Estas configuraciones crean una Deployment y un Service para ejecutar y exponer su contenedor NGINX.

# Define a Deployment resource
apiVersion: apps/v1
kind: Deployment
metadata:
  # Name of the Deployment resource
  name: nginx-dep
spec:
  # Create one replica of the pod
  replicas: 1
  selector:
    # Label used to select pods controlled by this Deployment
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        # Label applied to pods created by this Deployment
        app: nginx
    spec:
      containers:
      - name: nginx
        # Use the latest NGINX image
        image: nginx:latest
        ports:
        - containerPort: 80

# Define a Service resource
---
apiVersion: v1
kind: Service
metadata:
  # Name of the Service resource
  name: nginx-srv
spec:
  selector:
    # Label used to select pods that this service applies to
    app: nginx
  ports:
    - protocol: TCP
      # Service listens on port 80
      port: 80
      # Forward traffic to pods on port 80
      targetPort: 80
  # Type of the Service (ClusterIP in this case)
  type: Cluster

3. Ahora, ejecute el siguiente comando para apply las configuraciones definidas en el deployment.yml archivo, que crea y expone su contenedor NGINX.

kubectl apply -f deployment.yml
Crear una implementación de Kubernetes
Crear una implementación de Kubernetes

4. Una vez creado, invoque cada comando a continuación para recuperar (get) información sobre sus recursos de Kubernetes, que son deployment (nginx-dep) y service (nginx-srv).

kubectl get deployment nginx-dep
kubectl get service nginx-srv

El siguiente resultado confirma que sus recursos NGINX se han creado correctamente.

Comprobación de los recursos de servicio e implementación de Kubernetes
Comprobación de los recursos de servicio e implementación de Kubernetes

5. Crea un ingreso.yml , complete la siguiente configuración, guarde el archivo y cierre el editor. Esta configuración agrega Let’s Encrypt al controlador Traefik Ingress.

Asegúrese de reemplazar lo siguiente con el suyo propio en consecuencia:

  • letsencrypt-certificate – El nombre del recurso ClusterIssuer.
  • example.letsencrypt.key.tls – El secretName agregado como privateKeySecretRef nombre en su ClusterIssuer.
  • domain_name – El nombre de dominio que utilizó para acceder a su servidor k3s a través de la dirección IP.
  • nginx-srv – El nombre del servicio para exponer su contenedor NGINX.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
# Name the Ingress resource
  name: nginx-ingress
  annotations:
    # Use Traefik as the Ingress controller
    kubernetes.io/ingress.class: traefik
    # Add Cert-Manager SSL certificates as the name of the ClusterIssuer resource
    cert-manager.io/cluster-issuer: letsencrypt-certificate
spec:
  # TLS configuration for HTTPS
  tls:
    # TLS secretName used on ClusterIssuer
    - secretName: example.letsencrypt.key.tls
      hosts:
        # Replace with your domain name
        - domain_name
  # Create Ingress routing rules
  rules:
  # Replace with your domain name
  - host: domain_name
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
           # Name of your service resource
            name: nginx-srv
            port:
             # Port number to forward traffic to
              number: 80

6. Ahora, ejecute el siguiente comando para apply las configuraciones definidas en el ingress.yml archivo, que implementa el controlador de Ingress.

kubectl apply -f ingress.yml
Implementación del controlador de Ingress
Implementación del controlador de Ingress

7. Después de la implementación, ejecute el siguiente comando para recuperar (get) una lista de ingress recursos en su clúster k3s.

El siguiente resultado indica que los recursos de Ingress se han creado correctamente.

Comprobando un ingreso en ejecución
Comprobando un ingreso en ejecución

8. A continuación, ejecute el siguiente comando para ver (describe) información detallada sobre lo especificado certificate recurso.

Este comando es útil para inspeccionar el estado y los detalles de los certificados dentro de su clúster k3s.

kubectl describe certificate

Como se muestra a continuación, Let’s Encrypt verifica que el certificado TLS se haya aplicado correctamente a su Ingress.

Comprobando si Let's Encrypt funciona dentro de Ingress
Comprobando si Let’s Encrypt funciona dentro de Ingress

Al mismo tiempo, el Estado y Eventos Las secciones confirman que el administrador de certificados se emitió correctamente y está listo para enrutar el tráfico a su clúster k3s de forma segura.

Verificar que el administrador de certificados esté listo para enrutar el tráfico al clúster k3s
Verificar que el administrador de certificados esté listo para enrutar el tráfico al clúster k3s

9. Dirígete a tu nombre de dominio y verifica si se implementó un certificado válido en tu clúster.

Si todo funciona bien, puede acceder a su clúster a través de conexiones HTTPS seguras con un certificado válido de Let’s Encrypt, como se muestra a continuación.

Acceder a K3 a través de HTTPS seguro
Acceder a K3 a través de HTTPS seguro

10. Finalmente, expanda La conexión es segura, y podrá verificar que el certificado sea válido de la siguiente manera.

Verificar que la conexión sea segura a través de HTTPS
Verificar que la conexión sea segura a través de HTTPS

Conclusión

Acaba de completar un emocionante viaje a través de las complejidades de configurar un entorno de Kubernetes sólido y seguro con Traefik y Let’s Encrypt con k3s Kubernetes. Desde instalar el clúster k3s hasta configurar un administrador de certificados y garantizar renovaciones de certificados sin problemas con un ClusterIssuer.

Ahora, armado con este nuevo conocimiento, hay infinitas posibilidades para explorar. ¿Por qué no considerar ajustando sus configuraciones para adaptarse a los requisitos específicos del proyecto? ¿O profundizar más y elevar la seguridad de Kubernetes manteniendo seguros los secretos de Kubernetes?

¡El cielo es el límite y tus habilidades recién adquiridas son la plataforma de lanzamiento hacia aventuras de Kubernetes aún más emocionantes!

Written by

Leave a comment