在哪里可以获得Kubernetes API资源和子资源的列表?
我试图以最不允许的方式配置Kubernetes RBAC,我希望将我的角色范围限定到特定的资源和子资源。我翻遍了文档,找不到资源及其子资源的简明列表 我对管理部署规范一部分的子资源(容器映像)特别感兴趣。我甚至不愿意把它作为一个“答案”,但肯定太长了,无法发表评论 对于资源列表,您是否知道在哪里可以获得Kubernetes API资源和子资源的列表?,kubernetes,kubernetes-security,Kubernetes,Kubernetes Security,我试图以最不允许的方式配置Kubernetes RBAC,我希望将我的角色范围限定到特定的资源和子资源。我翻遍了文档,找不到资源及其子资源的简明列表 我对管理部署规范一部分的子资源(容器映像)特别感兴趣。我甚至不愿意把它作为一个“答案”,但肯定太长了,无法发表评论 对于资源列表,您是否知道$HOME/.kube/cache/discovery,其中,Swagger JSON文件通过与其封装的apiVersion相匹配的目录持久化到磁盘?我能找到的最快的链接(查看“发现和使用CRD”标题),但是l
$HOME/.kube/cache/discovery
,其中,Swagger JSON文件通过与其封装的apiVersion
相匹配的目录持久化到磁盘?我能找到的最快的链接(查看“发现和使用CRD”标题),但是ls-la~/.kube/cached/discovery
将显示我的意思。那些招摇过市的JSON文件列举了apiVersion
中的所有主要参与者,我发现比API参考网站更容易访问
我面前没有这些文件,不知道它们是否包含子资源定义,所以希望其他人能够参与进来
“权衡”部分的次要星号是,基于我对RBAC文档和1.9 API参考的浏览,我没有得到子资源是对其父资源的“字段级访问”的印象。例如,是/executions
的Pod子资源,据我所知,它不是PodSpec
因此,如果您对使用RBAC来约束部署的映像感兴趣,您可能会更乐意将几乎无限的业务逻辑应用于尝试的请求。您可以从这里找到Kubernetes v1.9的资源列表:。对于其他K8s版本,请查看上的“API参考”部分 检查左侧的目录,例如,“Workloads”是基本资源类型(如容器、部署、CronJob等)的高级概述,这些子资源(如“容器、部署、CronJob”)是典型的基本Kubernetes API资源 您可以通过kubectl访问这些基本资源,因此在中也有可用的“资源类型”列表
但我在您的语句“管理部署规范的一部分的子资源--容器映像”中感到困惑,如果您试图管理容器映像的权限,那么应该在映像注册表上执行,而不是在Kubernetes端。例如,您的注册表应该有一个访问控制器,以便在用户提取图像时进行身份验证。静态列表中的任何位置都没有记录定义RBAC角色所需的资源、子资源和谓词。它们在discovery文档中提供,即通过API,例如
/API/apps/v1
以下bash脚本将以以下格式列出所有资源、子资源和谓词:
api_version resource: [verb]
其中,api版本
是核心资源的core
,在角色定义中应替换为”
(一个带引号的空字符串)
例如,core pods/status:get patch update
该脚本需要
警告:请注意,如果api未列出动词,则输出将仅显示api版本和资源,例如
core pods/exec:
在以下资源的特定实例中,没有通过api显示动词,这是错误的(Kubernetes bug,由修复):
这些资源支持的谓词如下所示:
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
动词。有关这些专门动词的详细信息,请参见。使用kubectl api资源-o wide
显示所有资源,动词和相关api组
$ kubectl api-resources -o wide
NAME SHORTNAMES APIGROUP NAMESPACED KIND VERBS
bindings true Binding [create]
componentstatuses cs false ComponentStatus [get list]
configmaps cm true ConfigMap [create delete deletecollection get list patch update watch]
endpoints ep true Endpoints [create delete deletecollection get list patch update watch]
events ev true Event [create delete deletecollection get list patch update watch]
limitranges limits true LimitRange [create delete deletecollection get list patch update watch]
namespaces ns false Namespace [create delete get list patch update watch]
nodes no false Node [create delete deletecollection get list patch update watch]
persistentvolumeclaims pvc true PersistentVolumeClaim [create delete deletecollection get list patch update watch]
persistentvolumes pv false PersistentVolume [create delete deletecollection get list patch update watch]
pods po true Pod [create delete deletecollection get list patch update watch]
statefulsets sts apps true StatefulSet [create delete deletecollection get list patch update watch]
meshpolicies authentication.istio.io false MeshPolicy [delete deletecollection get list patch create update watch]
policies authentication.istio.io true Policy [delete deletecollection get list patch create update watch]
...
...
我想您可以使用它来创建RBAC配置中所需的资源列表如果您使用的是kubectl krew插件,我建议您使用。它可以获得几乎90%的资源。包括configmap、secret、端点、istio等
for kind in `kubectl api-resources | tail +2 | awk '{ print $1 }' | sort`; do kubectl explain $kind ; done | grep -e "KIND:" -e "VERSION:" | awk '{print $2}' | paste -sd' \n'
它有一个很好的参数——因为,您可以使用它列出最后x分钟创建的资源
范例
kubectl get-all --since 1d
我正是为了这个目的编写了一个微型围棋实用程序。使用集群上的每个可能资源和子资源生成完整的RBAC角色。然后,您可以将其修剪回适合您角色的用例
另一个选项是
OpenAPI
规范,特别是对于那些无法立即访问实时k8s
的用户而言。从中,您可以访问的,它在右上角有一个链接,您可以在中加载该链接。
类似于
/api/v1/namespaces/{namespace}/pods/{name}/log
的端点将列在那里
放置所有这些链接,以尝试将来验证此答案。我找不到指向最新版本的/latest
类型URL。标记版本,使用kubectl而不是curl
下面是一个不同的代码片段,源于发布在中的脚本。在Bash中执行时,它会以a的形式生成更详细的输出,保存为文件
Kubernetes\u API\u resources.md
它使用
kubectl get--raw…
而不是curl
来查询API,生成的标记文件在代码块中记录了它自己的创建
echo”#Kubernetes API资源
更新日期`日期-I`
\`\`\`猛击
${BASH_命令}
\`\`\`
|API名称/版本|资源|动词|种类|命名空间|
| ---------------- | -------- | ----- | ---- | ---------- |
`
对于$(kubectl api版本| sort | sed'/\/{H;1h;$!d;x}')中的apipath,请执行以下操作
版本=${a
for kind in `kubectl api-resources | tail +2 | awk '{ print $1 }' | sort`; do kubectl explain $kind ; done | grep -e "KIND:" -e "VERSION:" | awk '{print $2}' | paste -sd' \n'
kubectl get-all --since 1d