* zh-trans: add docs/reference/command-line-tools-reference/kubelet-authentication-authorization.md * Update kubelet-authentication-authorization.md
7.3 KiB
title
| title |
|---|
| Kubelet 认证/授权 |
{{< toc >}}
概述
kubelet 的 HTTPS 端点公开了 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 bearer 令牌(包括服务帐户令牌)以用于对 kubelet 的 HTTPS 端点进行身份验证:
- 确保 API 服务器启用了
authentication.k8s.io/v1beta1API 组 - 附带
--authentication-token-webhook和--kubeconfig参数启动 kubelet - kubelet 在配置的 API 服务器上调用
TokenReviewAPI,以确定来自 bearer 令牌的用户信息
Kubelet 授权
任何成功经过身份验证的请求(包括匿名请求)都将得到授权。
默认授权模式是 AlwaysAllow,它允许所有请求。
有许多可能的原因来细分对 kubelet API 的访问:
- 匿名身份验证被启用,但匿名用户调用 kubelet API 的能力应该受到限制
- bearer 令牌验证被启用,但应限制任意 API 用户(如服务帐户)调用 kubelet API 的能力
- 启用了客户端证书身份验证,但只允许由配置的 CA 签名的某些客户端证书使用 kubelet API
要细分对 kubelet API 的访问权限,请将授权委派给 API 服务器:
- 确保 API 服务器启用了
authorization.k8s.io/v1beta1API 组 - 附带
--authorization-mode=Webhook和--kubeconfig参数启动 kubelet - kubelet 在配置的 API 服务器上调用
SubjectAccessReviewAPI,以判断每个请求是否是被授权的
kubelet 使用与 apiserver 相同的请求属性方法为 API 请求授权。
动词(verb)是根据传入请求的 HTTP 动词(verb)确定的:
| HTTP 动词 | 请求动词 |
|---|---|
| POST | create |
| GET, HEAD | get |
| PUT | update |
| PATCH | patch |
| DELETE | delete |
资源(resource)和子资源(subresource)由传入请求的路径确定:
| Kubelet API | 资源 | 子资源 |
|---|---|---|
| /stats/* | nodes | stats |
| /metrics/* | nodes | metrics |
| /logs/* | nodes | log |
| /spec/* | nodes | spec |
| all others | nodes | proxy |
命名空间和 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