Pide tu presupuesto ya!
3rd November 2023
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!
Antes de profundizar más, asegúrese de tener los componentes y la información necesarios para seguir este tutorial:
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:
curl) los últimos binarios k3s del https://get.k3s.io URL en silencio y siga las redirecciones si es necesario (-sfL).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.
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
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.

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

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.

ClusterIssuerDespué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

ClusterIssuer recurso para el clúster k2s3. 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.

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.

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

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.

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

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.

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.

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.

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.

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

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!
Leave a comment