Introducció
El Control d'Accés Basat en Rols (RBAC) és un mecanisme de seguretat en Kubernetes que permet gestionar l'accés als recursos del clúster basant-se en els rols assignats als usuaris. RBAC és essencial per assegurar que només els usuaris autoritzats puguin realitzar accions específiques dins del clúster.
Conceptes Clau
- Role: Defineix un conjunt de permisos dins d'un namespace específic.
- ClusterRole: Defineix un conjunt de permisos a nivell de clúster.
- RoleBinding: Assigna un Role a un usuari o grup dins d'un namespace.
- ClusterRoleBinding: Assigna un ClusterRole a un usuari o grup a nivell de clúster.
Components de RBAC
Role
Un Role defineix els permisos dins d'un namespace específic. A continuació es mostra un exemple de Role que permet llistar i obtenir pods dins d'un namespace:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list"]
ClusterRole
Un ClusterRole defineix permisos a nivell de clúster. A continuació es mostra un exemple de ClusterRole que permet llistar i obtenir nodes:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: node-reader rules: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"]
RoleBinding
Un RoleBinding assigna un Role a un usuari o grup dins d'un namespace. A continuació es mostra un exemple de RoleBinding que assigna el Role pod-reader
a l'usuari johndoe
dins del namespace default
:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods namespace: default subjects: - kind: User name: johndoe apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io
ClusterRoleBinding
Un ClusterRoleBinding assigna un ClusterRole a un usuari o grup a nivell de clúster. A continuació es mostra un exemple de ClusterRoleBinding que assigna el ClusterRole node-reader
a l'usuari johndoe
:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: read-nodes subjects: - kind: User name: johndoe apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: node-reader apiGroup: rbac.authorization.k8s.io
Exemples Pràctics
Crear un Role i RoleBinding
-
Crear un Role: Crea un fitxer
role.yaml
amb el següent contingut:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list"]
Aplica el Role:
kubectl apply -f role.yaml
-
Crear un RoleBinding: Crea un fitxer
rolebinding.yaml
amb el següent contingut:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods namespace: default subjects: - kind: User name: johndoe apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io
Aplica el RoleBinding:
kubectl apply -f rolebinding.yaml
Crear un ClusterRole i ClusterRoleBinding
-
Crear un ClusterRole: Crea un fitxer
clusterrole.yaml
amb el següent contingut:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: node-reader rules: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"]
Aplica el ClusterRole:
kubectl apply -f clusterrole.yaml
-
Crear un ClusterRoleBinding: Crea un fitxer
clusterrolebinding.yaml
amb el següent contingut:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: read-nodes subjects: - kind: User name: johndoe apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: node-reader apiGroup: rbac.authorization.k8s.io
Aplica el ClusterRoleBinding:
kubectl apply -f clusterrolebinding.yaml
Exercicis Pràctics
Exercici 1: Crear un Role i RoleBinding
- Crea un Role anomenat
service-reader
dins del namespacedefault
que permeti llistar i obtenir serveis (services
). - Crea un RoleBinding anomenat
read-services
que assigni el Roleservice-reader
a l'usuarijanedoe
.
Solució
-
Role
service-reader
:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: service-reader rules: - apiGroups: [""] resources: ["services"] verbs: ["get", "list"]
Aplica el Role:
kubectl apply -f service-reader.yaml
-
RoleBinding
read-services
:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-services namespace: default subjects: - kind: User name: janedoe apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: service-reader apiGroup: rbac.authorization.k8s.io
Aplica el RoleBinding:
kubectl apply -f read-services.yaml
Errors Comuns i Consells
-
Error: "User 'system:anonymous' cannot get resource 'pods' in API group '' in the namespace 'default'": Això indica que l'usuari no té els permisos necessaris. Assegura't que el Role i RoleBinding estan correctament configurats.
-
Consell: Utilitza
kubectl auth can-i
per verificar si un usuari té els permisos necessaris. Per exemple:kubectl auth can-i get pods --namespace=default
Conclusió
RBAC és una eina poderosa per gestionar l'accés als recursos dins d'un clúster de Kubernetes. Comprendre com crear i assignar Roles i ClusterRoles és essencial per mantenir la seguretat i l'ordre en el teu entorn de Kubernetes. Amb els exemples i exercicis proporcionats, hauríeu de tenir una bona base per començar a utilitzar RBAC en els vostres propis clústers.
Curs de Kubernetes
Mòdul 1: Introducció a Kubernetes
- Què és Kubernetes?
- Arquitectura de Kubernetes
- Conceptes i Terminologia Clau
- Configuració d'un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Mòdul 2: Components Bàsics de Kubernetes
Mòdul 3: Gestió de Configuració i Secrets
Mòdul 4: Xarxes en Kubernetes
Mòdul 5: Emmagatzematge en Kubernetes
Mòdul 6: Conceptes Avançats de Kubernetes
Mòdul 7: Monitorització i Registre
- Monitorització amb Prometheus
- Registre amb Elasticsearch, Fluentd i Kibana (EFK)
- Controls de Salut i Probes
- Servidor de Mètriques
Mòdul 8: Seguretat en Kubernetes
- Control d'Accés Basat en Rols (RBAC)
- Polítiques de Seguretat de Pods
- Seguretat de Xarxa
- Seguretat d'Imatges
Mòdul 9: Escalabilitat i Rendiment
- Autoscalat Horitzontal de Pods
- Autoscalat Vertical de Pods
- Autoscalat de Clúster
- Optimització del Rendiment
Mòdul 10: Ecosistema i Eines de Kubernetes
Mòdul 11: Estudis de Cas i Aplicacions del Món Real
- Desplegament d'una Aplicació Web
- CI/CD amb Kubernetes
- Execució d'Aplicacions Stateful
- Gestió Multi-Clúster