使用节点授权

节点授权是一种特殊用途的授权模式,专门授权 kubelet 发出的 API 请求。

概述

节点授权程序允许 kubelet 执行 API 操作。这包括

读取操作

  • 服务
  • 端点
  • 节点
  • Pod
  • 与绑定到 kubelet 节点的 Pod 相关的密钥、配置映射、持久卷声明和持久卷

写入操作

  • 节点和节点状态(启用 NodeRestriction 准入插件以限制 kubelet 修改其自己的节点)
  • Pod 和 Pod 状态(启用 NodeRestriction 准入插件以限制 kubelet 修改绑定到自身的 Pod)
  • 事件

与身份验证相关的操作

  • 证书签名请求 API 的读/写访问权限,用于 TLS 引导
  • 创建 TokenReview 和 SubjectAccessReview 以进行委托身份验证/授权检查的能力

在将来的版本中,节点授权程序可能会添加或删除权限,以确保 kubelet 具有正确运行所需的最小权限集。

为了通过节点授权程序进行授权,kubelet 必须使用一个凭据,该凭据将它们标识为 system:nodes 组中的成员,用户名为 system:node:<nodeName>。此组和用户名格式与为每个 kubelet 创建的身份相匹配,作为 kubelet TLS 引导 的一部分。

<nodeName> 的值 **必须** 精确匹配 kubelet 注册的节点名称。默认情况下,这是由 hostname 提供的主机名,或者通过 kubelet 选项 --hostname-override 覆盖。但是,当使用 --cloud-provider kubelet 选项时,特定主机名可能由云提供商确定,忽略本地 hostname--hostname-override 选项。有关 kubelet 如何确定主机名的详细信息,请参阅 kubelet 选项参考

要启用节点授权程序,请使用 --authorization-mode=Node 启动 apiserver。

要限制 kubelet 可以写入的 API 对象,请通过使用 --enable-admission-plugins=...,NodeRestriction,... 启动 apiserver 来启用 NodeRestriction 准入插件。

迁移注意事项

system:nodes 组之外的 kubelet

system:nodes 组之外的 kubelet 不会被 Node 授权模式授权,并且需要继续通过当前授权它们的任何机制进行授权。节点准入插件不会限制来自这些 kubelet 的请求。

具有未区分用户名的 kubelet

在某些部署中,kubelet 具有将它们置于 system:nodes 组中的凭据,但没有标识它们关联的特定节点,因为它们没有 system:node:... 格式的用户名。这些 kubelet 不会被 Node 授权模式授权,并且需要继续通过当前授权它们的任何机制进行授权。

NodeRestriction 准入插件会忽略来自这些 kubelet 的请求,因为默认节点标识符实现不会将它们视为节点标识。

上次修改时间:2024 年 2 月 18 日,太平洋标准时间上午 10:07:重新排序 authn/authz 页面 (9f327512c6)