kubelet-authentication-authorization


weight: 85 title: Kublet的认证授权 date: ‘2022-05-21T00:00:00+08:00’ type: book

KubeletHTTPS端点对外暴露了用于访问不同敏感程度数据的API,并允许您在节点或者容器内执行不同权限级别的操作。

本文档向您描述如何通过认证授权来访问kubeletHTTPS端点。

Kubelet认证

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

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

  • 启动kubelet时指定 --anonymous-auth=false 标志

如果要对kubeletHTTPS端点启用X509客户端证书身份验证:

  • 启动kubelet时指定 --client-ca-file 标志,提供CA bundle以验证客户端证书
  • 启动apiserver时指定 --kubelet-client-certificate--kubelet-client-key 标志
  • 参阅 apiserver认证文档 获取更多详细信息。

启用API bearer token(包括service account token)用于向kubeletHTTPS端点进行身份验证:

  • 确保在API server中开启了authentication.k8s.io/v1beta1API组。
  • 启动kubelet时指定 --authentication-token-webhook--kubeconfig--require-kubeconfig 标志
  • Kubelet在配置的API server上调用TokenReviewAPI以确定来自bearer token的用户信息

Kubelet授权

接着对任何成功验证的请求(包括匿名请求)授权。默认授权模式为 AlwaysAllow,允许所有请求。

细分访问kubelet API有很多原因:

  • 启用匿名认证,但匿名用户调用kubelet API的能力应受到限制
  • 启动bearer token认证,但是API用户(如service account)调用kubelet API的能力应受到限制
  • 客户端证书身份验证已启用,但只有那些配置了CA签名的客户端证书的用户才可以使用kubelet API

如果要细分访问kubelet API,将授权委托给API server

  • 确保API server中启用了authorization.k8s.io/v1beta1API
  • 启动kubelet时指定 --authorization-mode=Webhook--kubeconfig--require-kubeconfig 标志
  • kubelet在配置的API server上调用SubjectAccessReviewAPI,以确定每个请求是否被授权

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

Verb(动词)是根据传入的请求的HTTP动词确定的:

HTTP动词 request动词
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

NamespaceAPI组属性总是空字符串,资源的名字总是kubeletNodeAPI对象的名字。

当以该模式运行时,请确保用户为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
上一页
下一页