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

  1. 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
    
  2. 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

  1. 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
    
  2. 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

  1. Crea un Role anomenat service-reader dins del namespace default que permeti llistar i obtenir serveis (services).
  2. Crea un RoleBinding anomenat read-services que assigni el Role service-reader a l'usuari janedoe.

Solució

  1. 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
    
  2. 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

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

Mòdul 8: Seguretat en Kubernetes

Mòdul 9: Escalabilitat i Rendiment

Mòdul 10: Ecosistema i Eines de Kubernetes

Mòdul 11: Estudis de Cas i Aplicacions del Món Real

Mòdul 12: Preparació per a la Certificació de Kubernetes

© Copyright 2024. Tots els drets reservats