Control de acceso basado en roles en Kubernetes

KubernetesKubernetesIntermediate
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En un clúster de Kubernetes, el Control de Acceso Basado en Roles (Role-Based Access Control, RBAC) se utiliza para controlar el acceso a los recursos y operaciones dentro del clúster. El RBAC permite a los administradores de clúster definir roles y permisos para usuarios, grupos y cuentas de servicio para controlar el acceso a los recursos y operaciones dentro del clúster. En este laboratorio, aprenderá cómo utilizar el RBAC para controlar el acceso a los recursos en un clúster de Kubernetes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") subgraph Lab Skills kubernetes/initialization -.-> lab-9203{{"Control de acceso basado en roles en Kubernetes"}} kubernetes/get -.-> lab-9203{{"Control de acceso basado en roles en Kubernetes"}} kubernetes/create -.-> lab-9203{{"Control de acceso basado en roles en Kubernetes"}} kubernetes/delete -.-> lab-9203{{"Control de acceso basado en roles en Kubernetes"}} kubernetes/apply -.-> lab-9203{{"Control de acceso basado en roles en Kubernetes"}} end

Iniciar el clúster de Minikube

Antes de crear recursos, necesitas un clúster de Kubernetes en ejecución. Minikube es un entorno ligero de Kubernetes que se ejecuta en tu máquina local.

  1. Navegar a tu directorio de trabajo:

    Abre la terminal y navega hasta la carpeta de proyecto predeterminada:

    cd /home/labex/project
  2. Iniciar Minikube:

    Inicia Minikube para inicializar un clúster de Kubernetes:

    minikube start
    • Este comando configura un clúster de Kubernetes de un solo nodo en tu máquina local.
    • Minikube puede tardar unos minutos en iniciar, dependiendo del rendimiento de tu sistema.
  3. Verificar que Minikube esté en ejecución:

    Comprueba el estado del clúster de Minikube:

    minikube status
    • Busca componentes como kubelet y apiserver listados como Running (En ejecución).
    • Si el clúster no está en ejecución, vuelve a ejecutar minikube start.

Si encuentras problemas al iniciar Minikube, utiliza minikube delete para restablecer el entorno si es necesario.

Crear un espacio de nombres (Namespace)

Crea un nuevo espacio de nombres llamado myapp utilizando el siguiente comando:

kubectl create namespace myapp

Crear un Rol (Role)

Crea un nuevo Rol llamado myapp-reader en el espacio de nombres (namespace) myapp que permita a los usuarios leer pods y servicios en el espacio de nombres utilizando el siguiente archivo YAML llamado myapp-reader-role.yaml:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: myapp
  name: myapp-reader
rules:
  - apiGroups: [""]
    resources: ["pods", "services"]
    verbs: ["get", "watch", "list"]

Este Rol permite a los usuarios leer (obtener, monitorear y listar) pods y servicios en el espacio de nombres myapp.

Crea el Rol utilizando el siguiente comando:

kubectl apply -f myapp-reader-role.yaml

Crear una Vinculación de Rol (Role Binding)

Crea una Vinculación de Rol que asocie el Rol myapp-reader a un usuario o grupo en el espacio de nombres (namespace) myapp. Por ejemplo, para asociar el Rol myapp-reader al usuario developer en el espacio de nombres myapp, crea el siguiente archivo YAML llamado myapp-reader-binding.yaml:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: myapp-reader-binding
  namespace: myapp
subjects:
  - kind: User
    name: developer
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: myapp-reader
  apiGroup: rbac.authorization.k8s.io

Esta Vinculación de Rol asocia el Rol myapp-reader al usuario developer en el espacio de nombres myapp.

Crea la Vinculación de Rol utilizando el siguiente comando:

kubectl apply -f myapp-reader-binding.yaml

Probar el acceso

Prueba el acceso al espacio de nombres (namespace) myapp intentando obtener la lista de pods en el espacio de nombres utilizando el siguiente comando:

kubectl get pods -n myapp --as developer

Deberías ver un mensaje que indique que no hay recursos en el espacio de nombres myapp, porque es posible que no tengas pods en tu clúster. Cuando termines con el laboratorio, utiliza este comando y deberías ver una lista de pods en el espacio de nombres myapp.

Prueba el acceso al espacio de nombres default intentando obtener la lista de pods en el espacio de nombres utilizando el siguiente comando:

kubectl get pods --as developer

Deberías ver un mensaje de error que indique que no tienes acceso al espacio de nombres default.

Crear un Rol de clúster (ClusterRole)

Crea un nuevo Rol de clúster llamado myapp-admin que permita a los usuarios crear, eliminar y actualizar pods y servicios en todos los espacios de nombres (namespaces) utilizando el siguiente archivo YAML llamado myapp-admin-clusterrole.yaml:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: myapp-admin
rules:
  - apiGroups: [""]
    resources: ["pods", "services"]
    verbs: ["get", "list", "watch", "create", "update", "delete"]

Este Rol de clúster permite a los usuarios realizar todas las operaciones (obtener, listar, monitorear, crear, actualizar y eliminar) en pods y servicios en todos los espacios de nombres.

Crea el Rol de clúster utilizando el siguiente comando:

kubectl apply -f myapp-admin-clusterrole.yaml

Crear una Vinculación de Rol de clúster (ClusterRole Binding)

Crea una Vinculación de Rol de clúster que asocie el Rol de clúster myapp-admin a un usuario o grupo en el clúster. Por ejemplo, para asociar el Rol de clúster myapp-admin al usuario cluster-admin, crea el siguiente archivo YAML llamado myapp-admin-binding.yaml:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: myapp-admin-binding
subjects:
  - kind: User
    name: cluster-admin
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: myapp-admin
  apiGroup: rbac.authorization.k8s.io

Esta Vinculación de Rol de clúster asocia el Rol de clúster myapp-admin al usuario cluster-admin.

Crea la Vinculación de Rol de clúster utilizando el siguiente comando:

kubectl apply -f myapp-admin-binding.yaml

Probar el acceso

Prueba el acceso para crear un pod en el espacio de nombres (namespace) myapp creando un pod utilizando el siguiente archivo YAML llamado myapp-pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  namespace: myapp
spec:
  containers:
    - name: myapp-container
      image: nginx
      ports:
        - containerPort: 80

Crea el pod utilizando el siguiente comando:

kubectl apply -f myapp-pod.yaml --as cluster-admin

Deberías ver un mensaje que indique que el pod se ha creado.

Prueba el acceso para crear un despliegue (deployment) en el espacio de nombres myapp creando un despliegue utilizando el siguiente archivo YAML myapp-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  namespace: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp-deployment
  template:
    metadata:
      labels:
        app: myapp-deployment
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

Crea el pod utilizando el siguiente comando:

kubectl apply -f myapp-deployment.yaml --as cluster-admin

Deberías ver un mensaje de error que indique que no tienes acceso para crear un despliegue en el espacio de nombres myapp.

Resumen

En este laboratorio, aprendiste cómo utilizar el Control de Acceso Basado en Roles (Role-Based Access Control, RBAC) en Kubernetes para controlar el acceso a recursos y operaciones dentro del clúster. Creaste un espacio de nombres (namespace), un Rol (Role) y una Vinculación de Rol (Role Binding) para controlar el acceso a recursos en un espacio de nombres específico. También creaste un Rol de clúster (ClusterRole) y una Vinculación de Rol de clúster (ClusterRole Binding) para controlar el acceso a recursos en todos los espacios de nombres. Al final de este laboratorio, deberías tener una buena comprensión de cómo utilizar RBAC para controlar el acceso a recursos y operaciones en un clúster de Kubernetes.