Autenticación por Medio de Certificados en Kubernetes con RKE
Introducción
En este laboratorio, los alumnos aprenderán a configurar la autenticación por medio de certificados en un clúster de Kubernetes administrado con RKE (Rancher Kubernetes Engine). Utilizaremos certificados TLS para autenticar a un usuario y proporcionar acceso seguro al clúster. Al final, se incluirán pasos para limpiar el entorno y eliminar los recursos creados.
Requisitos Previos
Un clúster de Kubernetes desplegado y funcionando con RKE1. kubectl configurado para interactuar con el clúster. Acceso a la máquina desde donde se administrará el clúster.
Laboratorio
- Generar Certificados TLS
Crear un Directorio para los Certificados:
mkdir ~/certscd ~/certs - Generar una Clave Privada y un Certificado de Firma de Certificados (CSR) para el Usuario:
openssl genrsa -out student.key 2048openssl req -new -key student.key -out student.csr -subj "/CN=student/O=group1" - Firmar el Certificado del Usuario con el Certificado del Clúster:
Utiliza los certificados del clúster para firmar el certificado del usuario. Estos certificados suelen estar en el nodo del maestro del clúster.
sudo cp /etc/kubernetes/ssl/kube-ca.pem .sudo cp /etc/kubernetes/ssl/kube-ca-key.pem .La salida del comando anterior debe ser similar a lo siguiente:sudo openssl x509 -req -in student.csr -CA kube-ca.pem -CAkey /etc/kubernetes/ssl/kube-ca-key.pem -CAcreateserial -out student.crt -days 365CAcreateserial -out student.crt -days 365 Certificate request self-signature ok subject=CN = student, O = group1 - Accese al Cluster de Kubernetes de forma temporal con el usuario Administrador
Crear un
export KUBECONFIG=$HOME/devcluster/kube_config_cluster.ymlPODy unServiciopara verificarlos posteriormente en elNamespacedefaultkubectl run nginx-pod --image=nginx --restart=NeverVerificar los recursos creados anteriormentekubectl expose pod nginx-pod --port=80 --target-port=80 --name=nginx-service --type=NodePortkubectl get podskubectl get svc - Configurar el Acceso del Usuario en Kubernetes
Crear un Contexto en kubectl para el Nuevo Usuario:
kubectl config set-credentials student --client-certificate=/home/student/certs/student.crt --client-key=/home/student/certs/student.keykubectl config set-context student-context --cluster=local --namespace=default --user=student - Crear un Role y RoleBinding para el Usuario:
Creamos un Role y RoleBinding para permitir al usuario acceso a ciertos recursos en el clúster.
cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: student-role rules: - apiGroups: [""] resources: ["pods", "services"] verbs: ["get", "list", "watch"] EOFcat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: student-role-binding namespace: default subjects: - kind: User name: student apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: student-role apiGroup: rbac.authorization.k8s.io EOF - Probar el Acceso con el Nuevo Usuario
Cambiar al Contexto del Nuevo Usuario:
kubectl config use-context student-context - Probar Acceso a los Recursos Permitidos:
kubectl get podsEstos comandos deberían ejecutarse correctamente.kubectl get services - Probar Acceso a Recursos No Permitidos:
La salida debe ser similar a la siguiente:
kubectl get nodesError from server (Forbidden): nodes is forbidden: User "student" cannot list resource "nodes" in API group "" at the cluster scope - Volver al Contexto del Administrador:
El comando anterior, cambia al Contexto del usuario Administrador, lo que proporcionará acceso completo a todos los recursos del Cluster de Kubernetes.
kubectl config use-context local - Probar nuevamente Acceso a Recursos con el usuario Administrador:
La salida debe ser similar a la siguiente:
kubectl get nodesNAME STATUS ROLES AGE VERSION student-0-aio Ready controlplane,etcd,worker 8d v1.28.9
Clean Up
- Eliminar los recursos creados de POD y Service
kubectl delete pod nginx-podkubectl delete service nginx-service - Eliminar Role y RoleBinding:
kubectl delete rolebinding student-role-binding -n defaultkubectl delete role student-role -n default - Eliminar los Certificados Generados:
rm -rf ~/certs - Eliminar el Contexto y Credenciales del Usuario en kubectl:
kubectl config delete-context student-contextkubectl config unset users.student - Volver al Contexto del Administrador:
kubectl config use-context local
Resumen
Este laboratorio ha demostrado cómo configurar la autenticación por medio de certificados en un clúster de Kubernetes administrado con RKE. Los alumnos generaron certificados TLS, configuraron kubectl para usar estos certificados, y probaron el acceso a los recursos del clúster. Al final, se realizaron pasos de limpieza para restaurar el entorno a su estado original. Estos conocimientos son fundamentales para asegurar que solo los usuarios autorizados puedan acceder y gestionar recursos en un clúster de Kubernetes.