我想允许命名空间 A 中的 ServiceAccount 访问命名空间 B 中的资源。为此,我通过 ClusterRoleBinding 将 ServiceAccount 连接到 ClusterRole。 文档说我可以“使用 ClusterRole [1.] 定义命名空间资源的权限并在单个命名空间内授予”
但是通过查看K8s 文档,我找不到如何使用命名空间资源创建 ClusterRole 的方法。我怎样才能做到这一点?
...how to create a ClusterRole with namespaced resources...
再往下读一点:
ClusterRole 可用于授予与角色相同的权限。因为 ClusterRoles 是集群范围的。您还可以使用它们来授予访问权限:
...
- 跨所有命名空间的命名空间资源(如 Pod)
ClusterRole
不会帮助您限制对单个命名空间对象的访问。但是,您可以使用RoleBinding
来引用ClusterRole
并限制对 RoleBinding 命名空间中的对象的访问。
我相信您需要创建集群角色而不是角色。例子:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: role-grantor
rules:
- apiGroups: ["rbac.authorization.k8s.io"]
resources: ["rolebindings"]
verbs: ["create"]
- apiGroups: ["rbac.authorization.k8s.io"]
resources: ["clusterroles"]
verbs: ["bind"]
# omit resourceNames to allow binding any ClusterRole
resourceNames: ["admin","edit","view"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: role-grantor-binding
namespace: user-1-namespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: role-grantor
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: user-1
上面的例子来自这个链接。