RBAC
Para dominar RBAC, solo necesitas responder dos preguntas: ¿Qué quieres permitir? (Permiso) y ¿Dónde aplica? (Alcance/Scope).
Los Permisos
Definen qué acciones (verbs como get, list, create, delete) se pueden realizar sobre qué recursos (resources como pods, services, deployments).
-
Role:
-
Alcance: Local (Restringido a un solo Namespace).
-
Uso: Sirve para dar permisos sobre recursos que viven en un namespace específico (ej. crear pods en el namespace
dev). -
ClusterRole:
-
Alcance: Global (Todo el clúster).
-
Uso: Sirve para dos cosas:
-
Dar permisos sobre recursos que no pertenecen a ningún namespace (ej.
nodes,persistentvolumes). -
Crear un rol genérico que quieres reutilizar en múltiples namespaces (ej. un rol de "solo lectura" para todo).
-
Las Asignaciones
Conectan el permiso (Role/ClusterRole) con el sujeto (User, Group, o ServiceAccount).
-
RoleBinding:
-
Alcance: Local (Aplica en un solo Namespace).
-
Efecto: Le da a un usuario los permisos de un
Roledentro de ese namespace específico. ¡No podrá hacer nada fuera de él! -
ClusterRoleBinding:
-
Alcance: Global (Todo el clúster).
-
Efecto: Le da a un usuario los permisos de un
ClusterRoleen absolutamente todos los namespaces y sobre los recursos a nivel de clúster. Es el permiso definitivo (ej. Administrador del clúster).
El Truco de Examen
En las certificaciones y en la vida real, hay una combinación que confunde a muchos, pero que es brillante: Usar un RoleBinding para asignar un ClusterRole.
-
¿Qué pasa si haces esto? El usuario obtiene los permisos definidos en el ClusterRole (ej. poder ver pods, servicios, deployments), PERO solo podrá usarlos dentro del Namespace donde creaste el
RoleBinding. -
¿Por qué hacerlo? ¡Para no repetir código! En lugar de crear 50
Rolesidénticos de "solo lectura" en 50 namespaces distintos, creas un soloClusterRolegenérico llamadoview, y luego creas unRoleBindingen cada namespace para diferentes usuarios.
Matriz de Batalla (Memoriza esto)
🚀 Tips de Velocidad (Modo Examen / Práctica)En un examen (CKA/CKAD/CKS) el tiempo es oro. NUNCA escribas estos YAMLs a mano desde cero. Usa la línea de comandos imperativa:1. Crear un Role rápidamente:Bashkubectl create role pod-reader --verb=get,list,watch --resource=pods -n desarrollo 1. Crear un RoleBinding rápidamente:Bashkubectl create rolebinding juan-reader --role=pod-reader --user=juan -n desarrollo 2. El Comando Mágico de Auditoría (auth can-i):Para comprobar si hiciste bien tu trabajo, no necesitas cambiar de contexto. Pregúntale a Kubernetes si el usuario tiene permiso:Bash# ¿Puede Juan listar pods en el namespace desarrollo? kubectl auth can-i list pods --as=juan -n desarrollo