在集群中强化动态资源分配(DRA)
本页面展示集群管理员如何强化动态资源分配(DRA)的授权,
重点关注 ResourceClaim 状态更新的最小权限访问。
前提条件
你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:
要获知版本信息,请输入 kubectl version.
你必须拥有一个 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 驱动程序的状态。
验证和监控
- 验证每个身份只有所需的动词和子资源。
- 确认上线后 DRA 状态更新正常工作。
- 监视 API 服务器审计事件,查看被拒绝的
resourceclaims/binding和resourceclaims/driver请求。