ClusterRoleBinding需要名称空间

时间:2019-11-15 12:13:22

标签: kubernetes rbac

我有以下内容:

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

但是它抛出: The ClusterRoleBinding "SomeClusterRoleBinding" is invalid: subjects[0].namespace: Required value

我认为"Cluster"RoleBinding的要点是它不仅限于单个名称空间。有人可以解释吗?

Kubernetes版本1.13.12 Kubectl版本v1.16.2 谢谢。

4 个答案:

答案 0 :(得分:1)

一个kubernetes服务帐户的作用域是一个命名空间。如果在创建服务帐户时未指定名称空间,则会在“默认”名称空间中创建服务帐户。

这使您可以在不同的名称空间中创建具有相同名称的服务帐户。即,创建名称空间时,所有名称空间都有一个名为“默认”的服务帐户。

要在命名空间中创建服务帐户,请执行以下操作:

kubectl create serviceaccount my-sa -n my-namespace

您必须在此处输入主题的名称空间是指“服务帐户所在的位置”,而不是“此群集角色绑定将资源访问绑定到的名称空间”。

答案 1 :(得分:0)

确实,是的,ClusterRoleBinding不应绑定到名称空间,而应  我认为主题可能会被束缚或束缚(这就是错误的意思)。您可以通过检查特定版本的Kubernetes API规范来调试它。

例如,在主题名称空间上的here上写着:If the object kind is non-namespace, such as "User" or "Group", and this value is not empty the Authorizer should report an error.

答案 2 :(得分:0)

ClusterRole在群集范围内的方面是规则中的资源在群集范围内。例如,您可以使用ClusterRole使主题可以访问所有名称空间中的所有Pod。使用角色,您只能授予主题访问特定命名空间中Pod的权限。

ClusterRoleBinding的整个群集范围方面不适用于绑定的主题。在您的示例中,您无法为所有名称空间中具有特定名称的所有服务帐户创建绑定。

答案 3 :(得分:0)

在创建ServiceAccount时不需要设置名称空间,这里的情况是在创建ClusterRoleBinding来选择服务帐户时,您需要指定服务帐户的名称空间。

  

ServiceAccounts是命名空间范围的主题,因此当您引用   它们,您必须指定服务帐户的名称空间   要绑定。 Source

例如,您可以在创建ClusterRoleBinding时使用默认名称空间。

这样做,您没有将ClusterRoleBinding绑定到任何名称空间,如本例所示。

$ kubectl get clusterrolebinding.rbac.authorization.k8s.io/tiller -o yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRoleBinding","metadata":{"annotations":{},"name":"tiller"},"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"ClusterRole","name":"cluster-admin"},"subjects":[{"kind":"ServiceAccount","name":"tiller","namespace":"kube-system"}]}
  creationTimestamp: "2019-11-18T13:47:59Z"
  name: tiller
  resourceVersion: "66715"
  selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/tiller
  uid: 085ed826-0a0a-11ea-a665-42010a8000f7
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system