定义 RBAC 角色所需的资源、子资源和动词未记录在静态列表中的任何位置。它们在发现文档中可用,即通过 API,例如/api/apps/v1.
以下 bash 脚本将按以下格式列出所有资源、子资源和动词:
api_version resource: [verb]
其中api-version 是核心资源的core,应在您的角色定义中替换为""(带引号的空字符串)。
例如,core pods/status: get patch update。
脚本需要jq。
#!/bin/bash
SERVER="localhost:8080"
APIS=$(curl -s $SERVER/apis | jq -r '[.groups | .[].name] | join(" ")')
# do core resources first, which are at a separate api location
api="core"
curl -s $SERVER/api/v1 | jq -r --arg api "$api" '.resources | .[] | "\($api) \(.name): \(.verbs | join(" "))"'
# now do non-core resources
for api in $APIS; do
version=$(curl -s $SERVER/apis/$api | jq -r '.preferredVersion.version')
curl -s $SERVER/apis/$api/$version | jq -r --arg api "$api" '.resources | .[]? | "\($api) \(.name): \(.verbs | join(" "))"'
done
警告:请注意,如果没有通过 api 列出动词,输出将只显示 api 版本和资源,例如
core pods/exec:
在以下资源的具体实例中,通过api没有显示动词,这是错误的(Kubernetes bug #65421,由#65518修复):
nodes/proxy
pods/attach
pods/exec
pods/portforward
pods/proxy
services/proxy
这些资源支持的动词如下:
nodes/proxy: create delete get patch update
pods/attach: create get
pods/exec: create get
pods/portforward: create get
pods/proxy: create delete get patch update
services/proxy: create delete get patch update
警告 2: 有时 Kubernetes 会使用此处未列出的专用动词检查其他权限。例如,rbac.authorization.k8s.io API 组中的roles 和clusterroles 资源需要bind 动词。这些专用动词的详细信息可以在docs here 中找到。