Kubelet 身份验证/授权

概述

Kubelet 的 HTTPS 端点公开 API,这些 API 提供对不同敏感度数据的访问权限,并允许您对节点和容器内执行不同权限级别的操作。

本文档介绍如何对 Kubelet 的 HTTPS 端点进行身份验证和授权访问。

Kubelet 身份验证

默认情况下,对 Kubelet 的 HTTPS 端点的请求,如果未被其他配置的身份验证方法拒绝,将被视为匿名请求,并被赋予 system:anonymous 用户名和 system:unauthenticated 组。

要禁用匿名访问并将 401 Unauthorized 响应发送到未经身份验证的请求

  • 使用 --anonymous-auth=false 标志启动 Kubelet

要启用对 Kubelet 的 HTTPS 端点的 X509 客户端证书身份验证

  • 使用 --client-ca-file 标志启动 Kubelet,提供一个 CA 捆绑包来验证客户端证书
  • 使用 --kubelet-client-certificate--kubelet-client-key 标志启动 apiserver
  • 有关更多详细信息,请参阅 apiserver 身份验证文档

要启用 API 身份验证令牌(包括服务帐户令牌)用于对 Kubelet 的 HTTPS 端点进行身份验证

  • 确保在 API 服务器中启用了 authentication.k8s.io/v1beta1 API 组
  • 使用 --authentication-token-webhook--kubeconfig 标志启动 Kubelet
  • Kubelet 会调用配置的 API 服务器上的 TokenReview API,以确定身份验证令牌的用户身份信息。

Kubelet 授权

任何成功进行身份验证的请求(包括匿名请求)都会被授权。默认授权模式为 AlwaysAllow,允许所有请求。

将对 Kubelet API 的访问权限细分为多个部分有很多可能的原因

  • 启用了匿名身份验证,但应限制匿名用户调用 Kubelet API 的能力
  • 启用了身份验证令牌身份验证,但应限制任意 API 用户(如服务帐户)调用 Kubelet API 的能力
  • 启用了客户端证书身份验证,但应仅允许配置的 CA 签发的某些客户端证书使用 Kubelet API

要将对 Kubelet API 的访问权限细分为多个部分,请将授权委托给 API 服务器

  • 确保在 API 服务器中启用了 authorization.k8s.io/v1beta1 API 组
  • 使用 --authorization-mode=Webhook--kubeconfig 标志启动 Kubelet
  • Kubelet 会调用配置的 API 服务器上的 SubjectAccessReview API,以确定每个请求是否被授权。

Kubelet 使用与 apiserver 相同的 请求属性 方法授权 API 请求。

动词由传入请求的 HTTP 动词确定

HTTP 动词请求动词
POST创建
GET, HEAD获取
PUT更新
PATCH修补
DELETE删除

资源和子资源由传入请求的路径确定

Kubelet API资源子资源
/stats/*节点统计信息
/metrics/*节点指标
/logs/*节点日志
/spec/*节点规范
所有其他节点代理

命名空间和 API 组属性始终为空字符串,资源名称始终为 Kubelet 的 Node API 对象的名称。

在此模式下运行时,请确保由传递给 apiserver 的 --kubelet-client-certificate--kubelet-client-key 标志标识的用户被授权执行以下属性

  • verb=*, resource=nodes, subresource=proxy
  • verb=*, resource=nodes, subresource=stats
  • verb=*, resource=nodes, subresource=log
  • verb=*, resource=nodes, subresource=spec
  • verb=*, resource=nodes, subresource=metrics
上次修改时间:2023 年 12 月 29 日下午 9:47 PST:修复过时的链接/锚点 (bcc55ae7c9)