Kubernetes ClusterRoleBinding需要命名空间

Kubernetes ClusterRoleBinding需要命名空间,kubernetes,rbac,Kubernetes,Rbac,我有以下资料: apiVersion: v1 kind: ServiceAccount metadata: name: SomeServiceAccount 但它抛出: ClusterRoleBinding“SomeClusterRoleBinding”无效:主题[0]。命名空间:必需值 我认为“集群”角色绑定的全部要点在于它不局限于单个名称空间。有人能解释吗 Kubernetes版本1.13.12 Kubectl版本v1.16.2 谢谢。事实上,你是对的,ClusterRoleBindi

我有以下资料:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: SomeServiceAccount
但它抛出:
ClusterRoleBinding“SomeClusterRoleBinding”无效:主题[0]。命名空间:必需值

我认为
“集群”角色绑定的全部要点在于它不局限于单个名称空间。有人能解释吗

Kubernetes版本
1.13.12
Kubectl版本
v1.16.2

谢谢。

事实上,你是对的,ClusterRoleBinding不应该绑定到名称空间,而是 我认为主题可能是并列的或不并列的(这就是错误所说的)。您可以通过检查特定版本的Kubernetes API规范来调试它


例如,在主题的名称空间上,它表示:
如果对象类型是非名称空间,例如“用户”或“组”,并且该值不为空,则授权人应报告错误。

ClusterRole的群集范围方面是规则中的资源是群集范围的。例如,您可以使用ClusterRole为主题提供对所有名称空间中所有POD的访问权限。对于角色,您只能让主题访问特定名称空间中的pod


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

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

ServiceAccounts是命名空间范围的主题,因此当您引用 对于这些帐户,您必须指定您所使用的服务帐户的名称空间 我想绑定

例如,在创建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
通过这样做,您不会将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

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

这允许您在不同的名称空间中创建具有相同名称的服务帐户。i、 e.创建名称空间时,所有名称空间都有一个名为“default”的服务帐户

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

kubectl create serviceaccount my-sa -n my-namespace
您必须放在主题中的名称空间指的是“服务帐户所在的位置”,而不是“此群集角色绑定将资源访问绑定到的名称空间”

kubectl create serviceaccount my-sa -n my-namespace