Skip to content

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

  1. Generar Certificados TLS Crear un Directorio para los Certificados:
    mkdir ~/certs
    
    cd ~/certs
    
  2. Generar una Clave Privada y un Certificado de Firma de Certificados (CSR) para el Usuario:
    openssl genrsa -out student.key 2048
    
    openssl req -new -key student.key -out student.csr -subj "/CN=student/O=group1"
    
  3. 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 .
    
    sudo openssl x509 -req -in student.csr -CA kube-ca.pem -CAkey /etc/kubernetes/ssl/kube-ca-key.pem -CAcreateserial -out student.crt -days 365
    
    La salida del comando anterior debe ser similar a lo siguiente:
    CAcreateserial -out student.crt -days 365
    Certificate request self-signature ok
    subject=CN = student, O = group1
    
  4. Accese al Cluster de Kubernetes de forma temporal con el usuario Administrador
    export KUBECONFIG=$HOME/devcluster/kube_config_cluster.yml
    
    Crear un POD y un Servicio para verificarlos posteriormente en el Namespace default
    kubectl run nginx-pod --image=nginx --restart=Never
    
    kubectl expose pod nginx-pod --port=80 --target-port=80 --name=nginx-service --type=NodePort
    
    Verificar los recursos creados anteriormente
    kubectl get pods
    
    kubectl get svc
    
  5. 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.key
    
    kubectl config set-context student-context --cluster=local --namespace=default --user=student
    
  6. 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"]
    EOF
    
    cat <<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
    
  7. Probar el Acceso con el Nuevo Usuario Cambiar al Contexto del Nuevo Usuario:
    kubectl config use-context student-context
    
  8. Probar Acceso a los Recursos Permitidos:
    kubectl get pods
    
    kubectl get services
    
    Estos comandos deberían ejecutarse correctamente.
  9. Probar Acceso a Recursos No Permitidos:
    kubectl get nodes
    
    La salida debe ser similar a la siguiente:
    Error from server (Forbidden): nodes is forbidden: User "student" cannot list resource "nodes" in API group "" at the cluster scope
    
  10. Volver al Contexto del Administrador:
    kubectl config use-context local
    
    El comando anterior, cambia al Contexto del usuario Administrador, lo que proporcionará acceso completo a todos los recursos del Cluster de Kubernetes.
  11. Probar nuevamente Acceso a Recursos con el usuario Administrador:
    kubectl get nodes
    
    La salida debe ser similar a la siguiente:
    NAME            STATUS   ROLES                      AGE   VERSION
    student-0-aio   Ready    controlplane,etcd,worker   8d    v1.28.9
    

Clean Up

  1. Eliminar los recursos creados de POD y Service
    kubectl delete pod nginx-pod
    
    kubectl delete service nginx-service
    
  2. Eliminar Role y RoleBinding:
    kubectl delete rolebinding student-role-binding -n default
    
    kubectl delete role student-role -n default
    
  3. Eliminar los Certificados Generados:
    rm -rf ~/certs
    
  4. Eliminar el Contexto y Credenciales del Usuario en kubectl:
    kubectl config delete-context student-context
    
    kubectl config unset users.student
    
  5. 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.