Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Cloud Container Engine/ Guía del usuario/ Permisos/ Permisos de espacio de nombres (basados en Kubernetes RBAC)
Actualización más reciente 2024-09-10 GMT+08:00

Permisos de espacio de nombres (basados en Kubernetes RBAC)

Permisos de espacio de nombres (basados en Kubernetes RBAC)

Puede regular el acceso de los usuarios o los grupos de usuarios a los recursos de Kubernetes en un único espacio de nombres basado en sus roles de Kubernetes RBAC. La API de RBAC declara cuatro tipos de objetos de Kubernetes: Role, ClusterRole, RoleBinding y ClusterRoleBinding, que se describen a continuación:

  • Función: define un conjunto de reglas para acceder a los recursos de Kubernetes en un espacio de nombres.
  • RoleBinding: define la relación entre usuarios y roles.
  • ClusterRole: define un conjunto de reglas para acceder a los recursos de Kubernetes en un clúster (incluidos todos los espacios de nombres).
  • ClusterRoleBinding: define la relación entre los usuarios y los roles de clúster.

Role y ClusterRole especifican acciones que se pueden realizar en los recursos específicos. RoleBinding y ClusterRoleBinding vinculan roles a usuarios específicos, grupos de usuarios o ServiceAccounts. Ilustración:

Figura 1 Vinculación de roles

En la consola de CCE, puede asignar permisos a un usuario o grupo de usuarios para tener acceso a recursos en uno o varios espacios de nombres. De forma predeterminada, la consola de CCE proporciona el ClusterRoles siguiente:

  • view (solo lectura): permiso de solo lectura en la mayoría de los recursos de todos los espacios de nombres o seleccionados.
  • edit (desarrollo): permisos de lectura y escritura en la mayoría de los recursos en todos o en espacios de nombres seleccionados. Si este ClusterRole está configurado para todos los espacios de nombres, su capacidad es la misma que el permiso de O&M.
  • admin (O&M): permisos de lectura y escritura en la mayoría de los recursos de todos los espacios de nombres, y permisos de solo lectura en nodos, volúmenes de almacenamiento, espacios de nombres y gestión de cuotas.
  • cluster-admin (administrador): permisos de lectura y escritura en todos los recursos de todos los espacios de nombres.

Cluster Permissions (basados en IAM) y Namespace Permissions (basados en Kubernetes RBAC)

Los usuarios con diferentes permisos de clúster (asignados mediante IAM) tienen diferentes permisos de espacio de nombres (asignados mediante Kubernetes RBAC). Tabla 1 enumera los permisos de espacio de nombres de diferentes usuarios.

Tabla 1 Diferencias en los permisos de espacio de nombres

Usuario

Clústeres de v1.13 y posteriores

Usuario con los permisos de Tenant Administrator (por ejemplo, una cuenta)

Todos los permisos de espacio de nombres

Usuario de IAM con el rol CCE Administrator

Todos los permisos de espacio de nombres

Usuario de IAM con el rol CCE FullAccess o CCE ReadOnlyAccess

Requiere la autorización RBAC de Kubernetes.

Usuario de IAM con el rol Tenant Guest

Requiere la autorización RBAC de Kubernetes.

Precauciones

  • La autorización de RBAC de Kubernetes se puede usar para clústeres de v1.11.7-r2 y posteriores. Asegúrese de haber desplegado una versión de clúster compatible. Para obtener más información sobre la actualización de un clúster, consulte Actualización de sustitución/rodamiento (versión 1.13).
  • Después de crear un clúster de v1.11.7-r2 o posterior, CCE le asigna automáticamente el permiso de cluster-admin, lo que significa que tiene control total sobre todos los recursos de todos los espacios de nombres del clúster. El ID de un usuario federado cambia en cada inicio de sesión y cierre de sesión. Por lo tanto, el usuario con los permisos se muestra como eliminado. En este caso, no elimine los permisos. De lo contrario, la autenticación falla. Se recomienda conceder el permiso de administrador del clúster a un grupo de usuarios en CCE y agregar usuarios federados al grupo de usuarios.
  • Un usuario con el rol Security Administrator tiene todos los permisos de IAM excepto el cambio de rol. Por ejemplo, una cuenta del grupo de usuarios admin tiene esta función de forma predeterminada. Solo estos usuarios pueden asignar permisos en la página Permissions de la consola de CCE.

Configuración de permisos de espacio de nombres (en la consola)

Puede regular el acceso de los usuarios o los grupos de usuarios a los recursos de Kubernetes en un único espacio de nombres basado en sus roles de Kubernetes RBAC.

  1. Inicie sesión en la consola de CCE. En el panel de navegación, elija Permissions.
  2. Seleccione un clúster para el que desee agregar permisos en la lista desplegable de la derecha.
  3. Haga clic en Add Permissions en la esquina superior derecha.
  4. Confirme el nombre del clúster y seleccione el espacio de nombres para el que asignar permisos. Por ejemplo, seleccione All namespaces, el usuario o grupo de usuarios de destino y seleccione los permisos.

    Si no tiene permisos de IAM, no puede seleccionar usuarios o grupos de usuarios al configurar permisos para otros usuarios o grupos de usuarios. En este caso, puede introducir un ID de usuario o un ID de grupo de usuarios.

    Figura 2 Configuración de permisos de espacio de nombres

    Los permisos se pueden personalizar según sea necesario. Después de seleccionar Custom para Permission Type, haga clic en Add Custom Role a la derecha del parámetro Custom. En el cuadro de diálogo que se muestra, escriba un nombre y seleccione una regla. Una vez creada la regla personalizada, puede seleccionar un valor en el cuadro de lista desplegable Custom.

    Figura 3 Permiso personalizado

  5. Haga clic en OK.

Uso de kubectl para configurar permisos de espacio de nombres

Cuando se accede a un clúster mediante kubectl, CCE utiliza el archivo kubeconfig.json generado en el clúster para la autenticación. Este archivo contiene información del usuario, basada en la cual CCE determina qué recursos de Kubernetes puede acceder kubectl. Los permisos registrados en un archivo kubeconfig.json varían de usuario a usuario. Cluster Permissions (basados en IAM) y Namespace Permissions (basados en Kubernetes RBAC) muestra los permisos que tiene un usuario.

Además de cluster-admin, admin, edit, y view, puede definir Roles y RoleBindings para configurar los permisos para agregar, eliminar, modificar y consultar recursos, como pods, implementaciones y servicios, en el espacio de nombres.

El procedimiento para crear un Role es muy simple. Para ser específico, especifique un espacio de nombres y, a continuación, defina las reglas. Las reglas del siguiente ejemplo son permitir las operaciones GET y LIST en los pods en el espacio de nombres predeterminado.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default                          # Namespace
  name: role-example
rules:
- apiGroups: [""]
  resources: ["pods"]                         # The pod can be accessed.
  verbs: ["get", "list"]                      # The GET and LIST operations can be performed.
  • apiGroups indica el grupo de API al que pertenece el recurso.
  • resources indica los recursos que se pueden operar. Se admiten pods, Deployments, ConfigMaps y otros recursos de Kubernetes.
  • verbs indica las operaciones que se pueden realizar. get indica la consulta de un objeto específico, y list indica la lista de todos los objetos de un tipo determinado. Otras opciones de valor incluyen create, update y delete.

Para obtener más información, consulte Uso de la autorización RBAC.

Después de crear un Role, puede enlazar el Role a un usuario específico, que se denomina RoleBinding. Lo siguiente es un ejemplo.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: RoleBinding-example
  namespace: default
  annotations:
    CCE.com/IAM: 'true'
roleRef:
  kind: Role
  name: role-example
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: User
  name: 0c97ac3cb280f4d91fa7c0096739e1f8 # User ID of the user-example
  apiGroup: rbac.authorization.k8s.io

La sección subjects vincula un rol con un usuario de IAM para que el usuario de IAM pueda obtener los permisos definidos en el rol, como se muestra en la siguiente figura.

Figura 4 Un RoleBinding vincula el rol al usuario.

También puede especificar un grupo de usuarios en la sección subjects. En este caso, todos los usuarios del grupo de usuarios obtienen los permisos definidos en el rol.

subjects:
- kind: Group
  name: 0c96fad22880f32a3f84c009862af6f7    # User group ID
  apiGroup: rbac.authorization.k8s.io

Utilice el ejemplo de usuario de IAM para conectarse al clúster y obtener la información del pod. A continuación se muestra un ejemplo de la información de pod devuelta.

# kubectl get pod
NAME                                   READY   STATUS    RESTARTS   AGE
deployment-389584-2-6f6bd4c574-2n9rk   1/1     Running   0          4d7h
deployment-389584-2-6f6bd4c574-7s5qw   1/1     Running   0          4d7h
deployment-3895841-746b97b455-86g77    1/1     Running   0          4d7h
deployment-3895841-746b97b455-twvpn    1/1     Running   0          4d7h
nginx-658dff48ff-7rkph                 1/1     Running   0          4d9h
nginx-658dff48ff-njdhj                 1/1     Running   0          4d9h
# kubectl get pod nginx-658dff48ff-7rkph
NAME                     READY   STATUS    RESTARTS   AGE
nginx-658dff48ff-7rkph   1/1     Running   0          4d9h

Intente consultar Deployments y Services en el espacio de nombres. El resultado muestra que user-example no tiene los permisos necesarios. Intente consultar los pods en el espacio de nombres kube-system. El resultado muestra que user-example tampoco tiene los permisos necesarios. Esto indica que el usuario de IAM user-example solo tiene los permisos GET y LIST Pod en el espacio de nombres predeterminado, que es el mismo que se esperaba.

# kubectl get deploy
Error from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default"
# kubectl get svc
Error from server (Forbidden): services is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "services" in API group "" in the namespace "default"
# kubectl get pod --namespace=kube-system
Error from server (Forbidden): pods is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "pods" in API group "" in the namespace "kube-system"

Ejemplo: Asignación de todos los permisos de clúster (cluster-admin)

Puede usar el rol cluster-admin para asignar todos los permisos de un clúster. Este rol contiene los permisos para los recursos del clúster (como PV y StorageClasses).

Figura 5 Asignar todos los permisos de clúster (cluster-admin)

En el siguiente ejemplo de salida de kubectl, se ha creado un ClusterRoleBinding y enlaza el rol de cluster-admin al grupo de usuarios cce-role-group.

# kubectl get clusterrolebinding
NAME                                                              ROLE                           AGE
clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7   ClusterRole/cluster-admin      61s

# kubectl get clusterrolebinding clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 -oyaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    CCE.com/IAM: "true"
  creationTimestamp: "2021-06-23T09:15:22Z"
  name: clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7
  resourceVersion: "36659058"
  selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7
  uid: d6cd43e9-b4ca-4b56-bc52-e36346fc1320
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: 0c96fad22880f32a3f84c009862af6f7

Conéctese al clúster como usuario autorizado. Si se pueden consultar los PV y los StorageClasses, la configuración de permisos tiene efecto.

# kubectl get pv
No resources found
# kubectl get sc
NAME                PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
csi-disk            everest-csi-provisioner         Delete          Immediate              true                   75d
csi-disk-topology   everest-csi-provisioner         Delete          WaitForFirstConsumer   true                   75d
csi-nas             everest-csi-provisioner         Delete          Immediate              true                   75d
csi-obs             everest-csi-provisioner         Delete          Immediate              false                  75d
csi-sfsturbo        everest-csi-provisioner         Delete          Immediate              true                   75d

Ejemplo: Asignación de todos los permisos de espacio de nombres (admin)

admin tiene todos los permisos en los espacios de nombres. Puede otorgar este rol a un usuario o grupo de usuarios para gestionar uno o todos los espacios de nombres.

Figura 6 Asignar todos los permisos de espacio de nombres (admin)

En el siguiente ejemplo de salida de kubectl, se ha creado un RoleBinding, el rol de admin está enlazado al grupo de usuarios cce-role-group y el espacio de nombres de destino es el espacio de nombres predeterminado.

# kubectl get rolebinding
NAME                                                      ROLE                AGE
clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7   ClusterRole/admin   18s
# kubectl get rolebinding clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7 -oyaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  annotations:
    CCE.com/IAM: "true"
  creationTimestamp: "2021-06-24T01:30:08Z"
  name: clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7
  namespace: default
  resourceVersion: "36963685"
  selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/default/rolebindings/clusterrole_admin_group0c96fad22880f32a3f84c009862af6f7
  uid: 6c6f46a6-8584-47da-83f5-9eef1f7b75d6
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: 0c96fad22880f32a3f84c009862af6f7

Conéctese a un clúster como usuario autorizado. En este ejemplo, puede crear y consultar recursos en el espacio de nombres predeterminado, pero no puede consultar recursos en el espacio de nombres del kube-system o en los recursos del clúster.

# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
test-568d96f4f8-brdrp   1/1     Running   0          33m
test-568d96f4f8-cgjqp   1/1     Running   0          33m
# kubectl get pod -nkube-system
Error from server (Forbidden): pods is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "pods" in API group "" in the namespace "kube-system"
# kubectl get pv
Error from server (Forbidden): persistentvolumes is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "persistentvolumes" in API group "" at the cluster scope

Ejemplo: Asignación de permisos de espacio de nombres de solo lectura (view)

El rol de view tiene los permisos de solo lectura en un espacio de nombres. Puede asignar permisos a los usuarios para ver uno o varios espacios de nombres.

Figura 7 Asignación de permisos de espacio de nombres de solo lectura (view)

En el siguiente ejemplo de salida de kubectl, se ha creado un RoleBinding, el rol de view está enlazado al grupo de usuarios cce-role-group y el espacio de nombres de destino es el espacio de nombres predeterminado.

# kubectl get rolebinding
NAME                                                     ROLE               AGE
clusterrole_view_group0c96fad22880f32a3f84c009862af6f7   ClusterRole/view   7s

# kubectl get rolebinding clusterrole_view_group0c96fad22880f32a3f84c009862af6f7 -oyaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  annotations:
    CCE.com/IAM: "true"
  creationTimestamp: "2021-06-24T01:36:53Z"
  name: clusterrole_view_group0c96fad22880f32a3f84c009862af6f7
  namespace: default
  resourceVersion: "36965800"
  selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/default/rolebindings/clusterrole_view_group0c96fad22880f32a3f84c009862af6f7
  uid: b86e2507-e735-494c-be55-c41a0c4ef0dd
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: view
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: 0c96fad22880f32a3f84c009862af6f7

Connect to the cluster as an authorized user. En este ejemplo, puede consultar recursos en el espacio de nombres predeterminado, pero no puede crear recursos.

# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
test-568d96f4f8-brdrp   1/1     Running   0          40m
test-568d96f4f8-cgjqp   1/1     Running   0          40m
# kubectl run -i --tty --image tutum/dnsutils dnsutils --restart=Never --rm /bin/sh
Error from server (Forbidden): pods is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot create resource "pods" in API group "" in the namespace "default"

Ejemplo: Asignación de permisos para un objeto de recurso específico de Kubernetes

Puede asignar permisos a un objeto de recurso de Kubernetes específico, como pod, Deployment y Service. Para obtener más información, véase Uso de kubectl para configurar permisos de espacio de nombres.