kubelet 的 HTTPS 端点公开了 API,可以访问不同敏感度的数据, 并允许您在节点和容器内执行不同权限级别的操作。
本文档介绍如何认证和授权访问 kubelet 的 HTTPS 端点。
默认情况下,未被其他已配置的身份验证方法拒绝的对 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启用 API bearer 令牌(包括服务帐户令牌)以用于对 kubelet 的 HTTPS 端点进行身份验证:
authentication.k8s.io/v1beta1
API 组--authentication-token-webhook
和 --kubeconfig
参数启动 kubeletTokenReview
API,以确定来自 bearer 令牌的用户信息任何成功经过身份验证的请求(包括匿名请求)都将得到授权。
默认授权模式是 AlwaysAllow
,它允许所有请求。
有许多可能的原因来细分对 kubelet API 的访问:
要细分对 kubelet API 的访问权限,请将授权委派给 API 服务器:
authorization.k8s.io/v1beta1
API 组--authorization-mode=Webhook
和 --kubeconfig
参数启动 kubeletSubjectAccessReview
API,以判断每个请求是否是被授权的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
参数所标识的用户有权使用以下属性:
此页是否对您有帮助?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.