角色namespace-limited
应具有对命名空间内(指定API组的(所有资源的完全访问权限。我的角色清单如下:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-limited
namespace: restricted-xample
rules:
- apiGroups:
- core
- apps
- batch
- networking.k8s.io
resources: ["*"] # asterisk to grant access to all resources of the specified api groups
verbs: ["*"]
我使用RoleBinding将角色关联到ServiceAccount,但不幸的是,此ServiceAccount无法访问Pod
、Service
、Secret
、ConfigMap
和Endpoint
资源。这些资源都是core
API组的一部分。所有其他常见的Workload都可以工作。为什么?
核心组,也称为遗留组,位于REST路径/api/v1
并使用apiVersion: v1
您需要为核心API组使用""
。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: restricted-xample
name: namespace-limited
rules:
- apiGroups: ["", "apps", "batch", "networking.k8s.io"] # "" indicates the core API group
resources: ["*"]
verbs: ["*"]
要测试服务帐户的权限,请使用以下命令
kubectl auth can-i get pods --as=system:serviceaccount:restricted-xample:default -n restricted-xample
kubectl auth can-i get secrets --as=system:serviceaccount:restricted-xample:default -n restricted-xample
kubectl auth can-i get configmaps --as=system:serviceaccount:restricted-xample:default -n restricted-xample
kubectl auth can-i get endpoints --as=system:serviceaccount:restricted-xample:default -n restricted-xample
刚刚发现,当我省略核心关键字时,它是有效的,就像本例中一样。以下角色清单有效:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-limited
namespace: restricted-xample
rules:
- apiGroups: ["", "apps", "batch", "networking.k8s.io"]
resources: ["*"]
verbs: ["*"]
但是,如果我指定core
API组,为什么它不起作用对我来说是个谜