kubelet-authentication-authorization
weight: 85
title: Kublet 的认证授权
date: ‘2022-05-21T00:00:00+08:00’
type: book
本文档向您描述如何通过认证授权来访问
Kubelet 认证
默认情况下,所有未被配置的其他身份验证方法拒绝的,对system:anonymous
用户名和 system:unauthenticated
组。
如果要禁用匿名访问并发送 401 Unauthorized
的未经身份验证的请求的响应:
- 启动
kubelet 时指定--anonymous-auth=false
标志
如果要对
- 启动
kubelet 时指定--client-ca-file
标志,提供CA bundle 以验证客户端证书 - 启动
apiserver 时指定--kubelet-client-certificate
和--kubelet-client-key
标志 - 参阅
apiserver 认证文档 获取更多详细信息。
启用
- 确保在
API server 中开启了authentication.k8s.io/v1beta1
API 组。 - 启动
kubelet 时指定--authentication-token-webhook
,--kubeconfig
和--require-kubeconfig
标志 Kubelet 在配置的API server 上调用TokenReview
API 以确定来自bearer token 的用户信息
Kubelet 授权
接着对任何成功验证的请求(包括匿名请求)授权。默认授权模式为 AlwaysAllow
,允许所有请求。
细分访问
- 启用匿名认证,但匿名用户调用
kubelet API 的能力应受到限制 - 启动
bearer token 认证,但是API 用户(如service account )调用kubelet API 的能力应受到限制 - 客户端证书身份验证已启用,但只有那些配置了
CA 签名的客户端证书的用户才可以使用kubelet API
如果要细分访问
- 确保
API server 中启用了authorization.k8s.io/v1beta1
API 组 - 启动
kubelet 时指定--authorization-mode=Webhook
、--kubeconfig
和--require-kubeconfig
标志 kubelet 在配置的API server 上调用SubjectAccessReview
API ,以确定每个请求是否被授权
Verb(动词)是根据传入的请求的
POST | create |
GET, HEAD | get |
PUT | update |
PATCH | patch |
DELETE | delete |
资源和子资源根据传入请求的路径确定:
Kubelet API | 资源 | 子资源 |
---|---|---|
/stats/* | nodes | stats |
/metrics/* | nodes | metrics |
/logs/* | nodes | log |
/spec/* | nodes | spec |
all others | nodes | proxy |
Node
当以该模式运行时,请确保用户为--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