要为 ServiceAccount 授权访问 Kind CustomResourceDefinition,您可以使用 Kubernetes RBAC(基于角色的访问控制)来创建一个 ClusterRole,然后将其绑定到您的 ServiceAccount 上。
下面是一个示例 YAML 文件,演示如何为名称为 my-serviceaccount
的 ServiceAccount 分配对自定义资源定义 my-crd.example.com
的访问权限:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: my-clusterrole
rules:
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
resourceNames:
- my-crd.example.com # 指定 CRD 名称,这里是 "my-crd.example.com"
verbs:
- get
- list
- watch
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: my-rolebinding
subjects:
- kind: ServiceAccount # 指定类型为 ServiceAccount
name: my-serviceaccount # 指定要授权的 ServiceAccount 名称
roleRef:
kind: ClusterRole # 指定所引用的角色类型为 ClusterRole
name: my-clusterrole # 指定所引用的角色名称为 "my-clusterrole"
解释一下上述 YAML 文件中各部分含义:
ClusterRole
: 定义了具有特定规则集(在本例中是对 CRD 的访问权限)的角色。RoleBinding
: 将指定 ServiceAccount 绑定到ClusterRole
,从而授予该 ServiceAccount 与该角色关联的权限。
要应用这些配置,请使用以下命令:
kubectl apply -f <yaml-file>
在此之后,您的 ServiceAccount my-serviceaccount
将具有对名为 my-crd.example.com
的自定义资源定义的访问权限。