在集群中强化动态资源分配(DRA)

本页面展示集群管理员如何强化动态资源分配(DRA)的授权, 重点关注 ResourceClaim 状态更新的最小权限访问。

前提条件

你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:

要获知版本信息,请输入 kubectl version.

- Dynamic Resource Allocation is configured in your cluster. - You can edit RBAC resources and restart or roll out DRA components. -->
  • 你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:

    要获知版本信息,请输入 kubectl version.

  • 集群中已配置动态资源分配。
  • 你可以编辑 RBAC 资源并重启或上线 DRA 组件。

识别写入状态的 DRA 组件

记录哪些身份(通常为 ServiceAccount)在你的集群中更新 ResourceClaim 状态。 典型的写入者包括:

  • kube-scheduler 或自定义分配控制器
  • 节点本地 DRA 驱动程序
  • 多节点 DRA 状态控制器

为合成子资源授予最小权限

从 Kubernetes v1.36 开始,DRA 状态更新除了需要 resourceclaims/status 外, 还需要合成子资源权限。

为调度器和分配控制器授予权限

应用允许绑定相关更新的角色:

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"]

为节点本地驱动程序授予权限

为节点本地驱动程序使用节点感知的动词:

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"]

仅在需要时为多节点控制器授予权限

仅对必须从任何节点更新的组件使用 arbitrary-node:*

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"]

将角色绑定到明确身份

为每个组件身份创建 ClusterRoleBinding 对象, 并避免在不相关的 DRA 组件之间共享宽泛的角色。

尽可能使用 resourceNames 限制 resourceclaims/driver 规则, 以便身份只能写入其操作的特定 DRA 驱动程序的状态。

验证和监控

  1. 验证每个身份只有所需的动词和子资源。
  2. 确认上线后 DRA 状态更新正常工作。
  3. 监视 API 服务器审计事件,查看被拒绝的 resourceclaims/bindingresourceclaims/driver 请求。

接下来


最后修改 April 25, 2026 at 8:56 PM PST: [zh-cn]Add hardening-dra (576190add0)