定义ServiceAccount时,您告诉Kubernetes您要授予访问权限的apiGroup,资源和动词。
apiVersion: v1
kind: ServiceAccount
...
kind: Role
rules:
- apiGroups: [""]
resources: ["pods", "pods/exec", "persistentvolumeclaims", "services"]
verbs: ["get", "watch", "list", "create", "update", "patch", "delete", "deletecollection"]
在哪里可以找到选项的完整列表?
Runinng kubectl api-resources -o wide
给出了很多,但是不返回诸如pods/exec
或pods/log
之类的子资源。
答案 0 :(得分:2)
只需执行:
kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n 1 kubectl get --show-kind --ignore-not-found -l <label>=<value> -n <namespace>
UNIX中的xargs命令是一个命令行实用程序,用于从标准输入构建执行管道。虽然像grep这样的工具可以接受标准输入作为参数,但许多其他工具却不能。使用xargs允许echo和rm和mkdir之类的工具接受标准输入作为参数。
要获取日志,请使用kubectl logs命令,如下所示:
kubectl logs your-pod-name -n namespace-name
定义RBAC角色所需的子资源和动词未记录在静态列表中的任何位置。它们可在发现文档中找到,即通过API例如/api/apps/v1
。
以下bash脚本将以以下格式列出所有资源,子资源和动词:
api_version resource: [verb]
其中api-version
是core
的核心资源,在角色定义中应替换为""
(带引号的空字符串)。
例如core pods/status: get patch update
。
该脚本需要[jq] [1]。
#!/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:
不幸的是,在以下资源的特定情况下,没有通过动词显示动词。
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
有关日志记录的文档:kubernetes-logging。
您可以在这里找到更多信息:api-resources。
有用的博客:kubectl-cheat-sheet。