使用 Node 鉴权

    节点鉴权器允许 kubelet 执行 API 操作。包括:

    读取操作:

    • endpoints
    • nodes
    • pods
    • 与绑定到 kubelet 节点的 Pod 相关的 Secret、ConfigMap、PersistentVolumeClaim 和持久卷

    写入操作:

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

    身份认证与鉴权相关的操作:

    • 对于基于 TLS 的启动引导过程时使用的 的读/写权限
    • 为委派的身份验证/鉴权检查创建 TokenReview 和 SubjectAccessReview 的能力

    在将来的版本中,节点鉴权器可能会添加或删除权限,以确保 kubelet 具有正确操作所需的最小权限集。

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

    要启用节点鉴权器,请使用 --authorization-mode=Node 启动 API 服务器。

    要限制 kubelet 可以写入的 API 对象,请使用 启动 API 服务器,从而启用 NodeRestriction 准入插件。

    迁移考虑因素

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

    在一些部署中,kubelet 具有 system:nodes 组的凭证, 但是无法给出它们所关联的节点的标识,因为它们没有 system:node:... 格式的用户名。 这些 kubelet 不会被 Node 鉴权模式授权,并且需要继续通过当前授权它们的任何机制来授权。

    升级的 1.7 之前的使用 的集群将继续按原样运行,因为 system:nodes 组绑定已经存在。

    如果集群管理员希望开始使用 Node 鉴权器和 NodeRestriction 准入插件来限制节点对 API 的访问,这一需求可以通过下列操作来完成且不会影响已部署的应用:

    1. 启用 Node 鉴权模式 () 和 NodeRestriction 准入插件
    2. 确保所有 kubelet 的凭据符合组/用户名要求
    3. 审核 API 服务器日志以确保 Node 鉴权器不会拒绝来自 kubelet 的请求(日志中没有持续的 NODE DENY 消息)
    4. 删除 system:node 集群角色绑定

    在 1.6 版本中,当使用 时,system:nodes 集群角色会被自动绑定到 system:node 组。

    在 1.7 版本中,不再推荐将 system:nodes 组自动绑定到 system:node 角色,因为节点鉴权器通过对 Secret 和 ConfigMap 访问的额外限制完成了相同的任务。 如果同时启用了 NodeRBAC 鉴权模式,1.7 版本则不会创建 system:nodes 组到 角色的自动绑定。

    在 1.8 版本中,绑定将根本不会被创建。