web-dev-qa-db-fra.com

ClusterRoleBinding nécessite un espace de noms

J'ai ce qui suit:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: SomeServiceAccount
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: SomeClusterRole
rules:
  - apiGroups:
      - "myapi.com"
    resources:
      - 'myapi-resources'
    verbs:
      - '*'
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: SomeClusterRoleBinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: SomeClusterRole
subjects:
  - kind: ServiceAccount
    name: SomeServiceAccount

Mais ça jette: The ClusterRoleBinding "SomeClusterRoleBinding" is invalid: subjects[0].namespace: Required value

Je pensais que tout l'intérêt de "Cluster"RoleBinding est qu'il n'est pas limité à un seul espace de noms. N'importe qui peut expliquer cela?

Version de Kubernetes 1.13.12 Version Kubectl v1.16.2 Merci.

5
fardin

L'aspect à l'échelle du cluster d'un ClusterRole est que les ressources dans les règles sont à l'échelle du cluster. Par exemple, vous pouvez utiliser un ClusterRole pour donner à un sujet un accès à tous les pods dans tous les espaces de noms. Avec un rôle, vous ne pouvez donner à un sujet que l'accès aux pods dans des espaces de noms spécifiques.

L'aspect à l'échelle du cluster d'un ClusterRoleBinding ne s'applique en aucune façon aux sujets de la liaison. Dans votre exemple, vous ne pouvez pas créer une liaison pour tous les comptes de service avec un nom particulier dans tous les espaces de noms.

0

Un compte de service kubernetes est limité à un espace de noms. Si vous ne spécifiez pas l'espace de noms lors de la création du compte de service, votre compte de service est créé dans l'espace de noms "par défaut".

Cela vous permet de créer des comptes de service avec le même nom dans différents espaces de noms. c'est-à-dire que tous les espaces de noms ont un compte de service nommé "par défaut" lorsque l'espace de noms est créé.

Pour créer un compte de service dans un espace de noms:

kubectl create serviceaccount my-sa -n my-namespace

Les espaces de noms que vous devez mettre dans le sujet ici font référence à "où se trouve le compte de service" et non "à quels espaces de noms cette liaison de rôle de cluster lie l'accès aux ressources".

0
Mit Suthar

En effet, vous avez raison, le ClusterRoleBinding ne doit pas être lié à un espace de noms, mais je pense que le sujet peut être lié ou non (c'est ce que l'erreur dit). Vous pouvez déboguer cela en vérifiant les spécifications de l'API Kubernetes pour votre version spécifique.

Par exemple ici , sur l'espace de noms du sujet, il dit: If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error.

0
Cosmin Ioniță