加固指南 - 动态资源分配 (Dynamic Resource Allocation)

关于加固动态资源分配(DRA)授权和访问模式的信息。

动态资源分配(DRA)增加了强大的调度和设备管理能力。由于 DRA 组件会更新 ResourceClaim 状态,集群管理员应通过显式的最小权限 RBAC 来配置这些更新的授权。

特性状态: Kubernetes v1.36 [beta](默认启用)

从 Kubernetes v1.36 开始,DRA 状态更新使用合成子资源,并在某些情况下使用专门的节点感知动词。

加固 DRA 状态更新权限

对于 DRA 状态更新,除了授予 resourceclaims/status 子资源的 update 权限外,集群管理员还必须根据组件需要修改的具体字段,对特定的“合成”子资源授予权限。这可以加强调度器、自定义控制器和 DRA 驱动程序之间的最小权限原则。

DRA 授权检查分为两个合成子资源:

  • resourceclaims/binding
    • 修改 status.allocationstatus.reservedFor 所必需。
    • 通常授予 kube-scheduler 和自定义分配控制器。
    • 使用标准的 updatepatch 动词。
  • resourceclaims/driver
    • 修改 status.devices 所必需。
    • 此检查按驱动程序执行,以防止驱动程序篡改不同节点上的设备和/或其他驱动程序的设备。
    • 使用节点感知动词以实现更严格的范围限制。

节点感知 DRA 动词

在授权对 resourceclaims/driver 的更新时,请使用适当的专用动词前缀:

  • associated-node:<verb>(例如,associated-node:update
    • 用于节点本地驱动程序。
    • API 服务器会验证请求驱动程序的节点关联性。
  • arbitrary-node:<verb>(例如,arbitrary-node:patch
    • 用于可能从任何节点更新声明的控制平面或多节点控制器。

RBAC 模式示例

调度器和分配控制器的权限

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: dra-binding-updater
rules:
  - apiGroups: ["resource.k8s.io"]
    resources: ["resourceclaims/status"]
    verbs: ["get", "patch", "update"]
  - apiGroups: ["resource.k8s.io"]
    resources: ["resourceclaims/binding"]
    verbs: ["patch", "update"]

节点本地 DRA 驱动程序权限

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: dra-node-driver-status-updater
rules:
  - apiGroups: ["resource.k8s.io"]
    resources: ["resourceclaims/status"]
    verbs: ["get", "patch", "update"]
  - apiGroups: ["resource.k8s.io"]
    resources: ["resourceclaims/driver"]
    verbs: ["associated-node:patch", "associated-node:update"]
    resourceNames: ["dra.example.com"]

多节点状态控制器权限

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: dra-multinode-status-updater
rules:
  - apiGroups: ["resource.k8s.io"]
    resources: ["resourceclaims/status"]
    verbs: ["get", "patch", "update"]
  - apiGroups: ["resource.k8s.io"]
    resources: ["resourceclaims/driver"]
    verbs: ["arbitrary-node:patch", "arbitrary-node:update"]
    resourceNames: ["dra.example.com"]

要在运行中的集群中应用这些模式,请参阅在集群中加固动态资源分配

接下来


最后修改于 2026 年 4 月 7 日下午 4:30 PST:根据 tim 的建议进行更新 (8df4df1ffa)