Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在哪里可以获得Kubernetes API资源和子资源的列表?_Kubernetes_Kubernetes Security - Fatal编程技术网

在哪里可以获得Kubernetes API资源和子资源的列表?

在哪里可以获得Kubernetes API资源和子资源的列表?,kubernetes,kubernetes-security,Kubernetes,Kubernetes Security,我试图以最不允许的方式配置Kubernetes RBAC,我希望将我的角色范围限定到特定的资源和子资源。我翻遍了文档,找不到资源及其子资源的简明列表 我对管理部署规范一部分的子资源(容器映像)特别感兴趣。我甚至不愿意把它作为一个“答案”,但肯定太长了,无法发表评论 对于资源列表,您是否知道$HOME/.kube/cache/discovery,其中,Swagger JSON文件通过与其封装的apiVersion相匹配的目录持久化到磁盘?我能找到的最快的链接(查看“发现和使用CRD”标题),但是l

我试图以最不允许的方式配置Kubernetes RBAC,我希望将我的角色范围限定到特定的资源和子资源。我翻遍了文档,找不到资源及其子资源的简明列表

我对管理部署规范一部分的子资源(容器映像)特别感兴趣。

我甚至不愿意把它作为一个“答案”,但肯定太长了,无法发表评论

对于资源列表,您是否知道
$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