k8s RBAC-(授权) API资源查看及解释

 查看 Kubernetes 的 API 有多种方法,包括使用命令行工具 kubectl、查看 Kubernetes 官方文档或直接查询 API 服务器。以下是详细步骤:

1. 使用 kubectl api-resources

列出当前 Kubernetes 集群支持的所有 API 资源。

[root@master-1 ~]# kubectl api-resources
NAME                            SHORTNAMES  APIVERSION                        NAMESPACED     KIND
bindings                                    v1                                   true        Binding
componentstatuses               cs          v1                                   false       ComponentStatus
configmaps                      cm          v1                                   true        ConfigMap
endpoints                       ep          v1                                   true        Endpoints
events                          ev          v1                                   true        Event
limitranges                     limits      v1                                   true        LimitRange
namespaces                      ns          v1                                   false       Namespace
nodes                           no          v1                                   false       Node
persistentvolumeclaims          pvc         v1                                   true        PersistentVolumeClaim
persistentvolumes               pv          v1                                   false       PersistentVolume
pods                            po          v1                                   true        Pod
podtemplates                                v1                                   true        PodTemplate
replicationcontrollers          rc          v1                                   true        ReplicationController
resourcequotas                  quota       v1                                   true        ResourceQuota
secrets                                     v1                                   true        Secret
serviceaccounts                 sa          v1                                   true        ServiceAccount
services                        svc         v1                                   true        Service
mutatingwebhookconfigurations               admissionregistration.k8s.io/v1      false       MutatingWebhookConfiguration
validatingwebhookconfigurations             admissionregistration.k8s.io/v1      false       ValidatingWebhookConfiguration
customresourcedefinitions       crd,crds    apiextensions.k8s.io/v1              false       CustomResourceDefinition
apiservices                                 apiregistration.k8s.io/v1            false       APIService
controllerrevisions                         apps/v1                              true        ControllerRevision
daemonsets                      ds          apps/v1                              true        DaemonSet
deployments                     deploy      apps/v1                              true        Deployment
replicasets                     rs          apps/v1                              true        ReplicaSet
statefulsets                    sts         apps/v1                              true        StatefulSet
tokenreviews                                authentication.k8s.io/v1             false       TokenReview
localsubjectaccessreviews                   authorization.k8s.io/v1              true        LocalSubjectAccessReview
selfsubjectaccessreviews                    authorization.k8s.io/v1              false       SelfSubjectAccessReview
selfsubjectrulesreviews                     authorization.k8s.io/v1              false       SelfSubjectRulesReview
subjectaccessreviews                        authorization.k8s.io/v1              false       SubjectAccessReview
horizontalpodautoscalers        hpa         autoscaling/v1                       true        HorizontalPodAutoscaler
cronjobs                        cj          batch/v1beta1                        true        CronJob
jobs                                        batch/v1                             true        Job
certificatesigningrequests      csr         certificates.k8s.io/v1               false       CertificateSigningRequest
leases                                      coordination.k8s.io/v1               true        Lease
bgpconfigurations                           crd.projectcalico.org/v1             false       BGPConfiguration
bgppeers                                    crd.projectcalico.org/v1             false       BGPPeer
blockaffinities                             crd.projectcalico.org/v1             false       BlockAffinity
clusterinformations                         crd.projectcalico.org/v1             false       ClusterInformation
felixconfigurations                         crd.projectcalico.org/v1             false       FelixConfiguration
globalnetworkpolicies                       crd.projectcalico.org/v1             false       GlobalNetworkPolicy
globalnetworksets                           crd.projectcalico.org/v1             false       GlobalNetworkSet
hostendpoints                               crd.projectcalico.org/v1             false       HostEndpoint
ipamblocks                                  crd.projectcalico.org/v1             false       IPAMBlock
ipamconfigs                                 crd.projectcalico.org/v1             false       IPAMConfig
ipamhandles                                 crd.projectcalico.org/v1             false       IPAMHandle
ippools                                     crd.projectcalico.org/v1             false       IPPool
kubecontrollersconfigurations               crd.projectcalico.org/v1             false       KubeControllersConfiguration
networkpolicies                             crd.projectcalico.org/v1             true        NetworkPolicy
networksets                                 crd.projectcalico.org/v1             true        NetworkSet
endpointslices                              discovery.k8s.io/v1beta1             true        EndpointSlice
events                          ev          events.k8s.io/v1                     true        Event
ingresses                       ing         extensions/v1beta1                   true        Ingress
flowschemas                                 flowcontrol.apiserver.k8s.io/v1beta1 false       FlowSchema
prioritylevelconfigurations                 flowcontrol.apiserver.k8s.io/v1beta1 false       PriorityLevelConfiguration
nodes                                       metrics.k8s.io/v1beta1               false       NodeMetrics
pods                                        metrics.k8s.io/v1beta1               true        PodMetrics
ingressclasses                              networking.k8s.io/v1                 false       IngressClass
ingresses                       ing         networking.k8s.io/v1                 true        Ingress
networkpolicies                 netpol      networking.k8s.io/v1                 true        NetworkPolicy
runtimeclasses                              node.k8s.io/v1                       false       RuntimeClass
poddisruptionbudgets            pdb         policy/v1beta1                       true        PodDisruptionBudget
podsecuritypolicies             psp         policy/v1beta1                       false       PodSecurityPolicy
clusterrolebindings                         rbac.authorization.k8s.io/v1         false       ClusterRoleBinding
clusterroles                                rbac.authorization.k8s.io/v1         false       ClusterRole
rolebindings                                rbac.authorization.k8s.io/v1         true        RoleBinding
roles                                       rbac.authorization.k8s.io/v1         true        Role
priorityclasses                 pc          scheduling.k8s.io/v1                 false       PriorityClass
csidrivers                                  storage.k8s.io/v1                    false       CSIDriver
csinodes                                    storage.k8s.io/v1                    false       CSINode
storageclasses                  sc          storage.k8s.io/v1                    false       StorageClass
volumeattachments                           storage.k8s.io/v1                    false       VolumeAttachment
  • NAME: 资源名称。
  • SHORTNAMES: 缩写形式(如 popods 的缩写)。
  • APIVERSION: 对应资源的 API 版本(如 v1, apps/v1)。
  • NAMESPACED: 是否是命名空间范围的资源。
  • KIND: 资源类型。

2. 使用 kubectl api-versions

列出 Kubernetes 集群中支持的所有 API 版本:

kubectl api-versions

输出示例:

admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
batch/v1
core/v1
...

3. 使用 kubectl get --raw

直接与 API Server 通信获取详细信息:

kubectl get --raw / | jq

输出是一个 JSON 格式的响应,其中包含所有可用的 API 组和路径。

示例:

{
  "kind": "APIGroupList",
  "groups": [
    {
      "name": "apps",
      "versions": [
        {
          "groupVersion": "apps/v1",
          "version": "v1"
        }
      ],
      ...
    }
  ]
}

查看具体 API 组的资源:

获取某个 API 组(如 apps/v1)的资源信息:

kubectl get --raw /apis/apps/v1 | jq

输出示例

[root@master-1 metrics-server]# kubectl get --raw /apis/metrics.k8s.io/v1beta1 | jq
{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "metrics.k8s.io/v1beta1",
  "resources": [
    {
      "name": "nodes",
      "singularName": "",
      "namespaced": false,
      "kind": "NodeMetrics",
      "verbs": [
        "get",
        "list"
      ]
    },
    {
      "name": "pods",
      "singularName": "",
      "namespaced": true,
      "kind": "PodMetrics",
      "verbs": [
        "get",
        "list"
      ]
    }
  ]
}

rbac

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: metrics-server
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-view: "true"
  name: system:aggregated-metrics-reader
rules:
- apiGroups:
  - metrics.k8s.io
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch

疑问点:

1. "/apis/metrics.k8s.io", "/apis/metrics.k8s.io/v1beta1", 为什么在rules: - apiGroups: - metrics.k8s.io 可以省略写/apis/与版本号?

- apiGroups:
  - metrics.k8s.io

解释:

在 Kubernetes RBAC 配置中,apiGroups 字段使用的是 逻辑 API 组名称,而不是 URL 路径。这是因为:

    1. apiGroups 代表 API 组名称
      例如,metrics.k8s.io 是一个 API 组的名称,而不是它的路径。Kubernetes 会根据这个名称自动匹配到实际的路径,例如 /apis/metrics.k8s.io/apis/metrics.k8s.io/v1beta1

    2. 路径由 Kubernetes 内部映射处理
      Kubernetes 会将逻辑 API 组名称解析到具体的 URL 路径。核心 API 的路径(如 /api/v1)和扩展 API 的路径(如 /apis/metrics.k8s.io)是由 Kubernetes 内部决定的,你只需要提供 apiGroups 字段中的 API 组名称即可。

为什么可以省略 /apis/

  • /apis/ 是所有扩展 API 的基础路径,但在 apiGroups 中你只需提供组名称,如 metrics.k8s.io,Kubernetes 会自动补全路径。
  • 如果是核心 API 组(如 /api/v1),则用空字符串 "" 表示。

2. apiGroups: [""]为空是什么意思?

在 Kubernetes RBAC (基于角色的访问控制) 中,apiGroups: [""] 表示该规则适用于 Kubernetes 核心 API 组 (Core API Group)。这是一个特殊的情况,因为核心 API 组的资源没有显式的 API 组名称。

详细解释

  1. 核心 API 组
    • 核心 API 组包含 Kubernetes 中最基本的资源,例如:

      • pods
      • services
      • nodes
      • endpoints
      • configmaps
      • secrets
    • 这些资源通过 Kubernetes 主 API 服务器的 /api/v1 端点暴露出来。

    • 因为核心 API 组没有显式名称,所以在 RBAC 配置中使用空字符串 [""] 表示。


  1. 非核心 API 组
    • 非核心资源属于特定的 API 组。例如:
      • apps/v1 (Deployment、StatefulSet 等)
      • rbac.authorization.k8s.io/v1 (Role、ClusterRole 等)
      • batch/v1 (Job、CronJob 等)
      • 这些 API 组需要显式指定在 apiGroups 字段中。
      •     通配符 ("*"表示允许访问所有 API 组的资源。

5. 使用 kubectl explain

查看资源及其字段的详细信息:

kubectl explain <RESOURCE>

例如,查看 Pod 的结构:

kubectl explain pod

查看字段的详细信息:

kubectl explain pod.spec

总结

  • 快速查询 API 资源: kubectl api-resourceskubectl api-versions
  • 详细资源信息: kubectl explain
  • 深入查询 API: kubectl get --raw 和直接访问 API Server。

核心API组包含的资源 (V1.20.15)

/apis/v1 resouces:

bindings
componentstatuses
configmaps
endpoints
events
limitranges
namespaces
namespaces/finalize
namespaces/status
nodes
nodes/proxy
nodes/status
persistentvolumeclaims
persistentvolumeclaims/status
persistentvolumes
persistentvolumes/status
pods
pods/attach
pods/binding
pods/eviction
pods/exec
pods/log
pods/portforward
pods/proxy
pods/status
podtemplates
replicationcontrollers
replicationcontrollers/scale
replicationcontrollers/status
resourcequotas
resourcequotas/status
secrets
serviceaccounts
serviceaccounts/token
services
services/proxy
services/status

 其他API组包含资源

batch                                     job
extensions                                ingress
networking.k8s.io                         ingressclasses  ingress  NetworkPolicy
/apis/policy/v1beta1                      poddisruptionbudgets  PodSecurityPolicy
/apis/rbac.authorization.k8s.io/v1        roles rolebindings   clusterroles  clusterrolebindings 
/apis/storage.k8s.io/v1                   csidrivers    csinodes  storageclasses  volumeattachments  volumeattachments/status

/apis/autoscaling/v1         horizontalpodautoscalers    horizontalpodautoscalers/status
/apis/autoscaling/v2beta1    horizontalpodautoscalers    horizontalpodautoscalers/status
/apis/autoscaling/v2beta2    horizontalpodautoscalers    horizontalpodautoscalers/status

 

posted @ 2024-12-06 15:50  不会跳舞的胖子  阅读(28)  评论(0编辑  收藏  举报