-
序言
-
云原生(Cloud Native)的定义
-
云原生的设计哲学
-
Play with Kubernetes
-
快速部署一个云原生本地实验环境
-
使用Rancher在阿里云上部署Kubenretes集群
-
Kubernetes与云原生应用概览
-
云原生应用之路——从Kubernetes到Cloud Native
- 云原生编程语言
-
云原生的未来
- Kubernetes架构
- Kubernetes中的网络
-
资源对象与基本概念解析
- Pod状态与生命周期管理
- 集群资源管理
- 控制器
- 服务发现
- 身份与权限控制
- 存储
- 集群扩展
- 资源调度
-
用户指南
- 资源对象配置
- 命令使用
- 集群安全性管理
- 访问Kubernetes集群
- 在Kubernetes中开发部署应用
-
最佳实践概览
- 在CentOS上部署Kubernetes集群
- 生产级的Kubernetes简化管理工具kubeadm
- 服务发现与负载均衡
- 运维管理
- 存储管理
- 集群与应用监控
- 分布式跟踪
- 服务编排管理
- 持续集成与发布
- 更新与升级
-
领域应用概览
- 微服务架构
- Service Mesh 服务网格
- 大数据
- Serverless架构
-
边缘计算
-
人工智能
-
开发指南概览
-
SIG和工作组
- 开发环境搭建
-
单元测试和集成测试
-
client-go示例
- Operator
-
kubebuilder
-
高级开发指南
-
社区贡献
-
Minikube
-
CNCF - 云原生计算基金会简介
-
CNCF章程
-
CNCF特别兴趣小组(SIG)说明
-
开源项目加入CNCF Sandbox的要求
-
CNCF中的项目治理
-
CNCF Ambassador
-
附录说明
-
Kubernetes中的应用故障排查
-
Kubernetes相关资讯和情报链接
-
Docker最佳实践
-
使用技巧
-
问题记录
- Kubernetes版本更新日志
- Kubernetes及云原生年度总结及展望
- CNCF年度报告解读
-
Kubernetes认证服务提供商(KCSP)说明
-
认证Kubernetes管理员(CKA)说明
Kublet的认证授权
概览
Kubelet 的 HTTPS 端点对外暴露了用于访问不同敏感程度数据的 API,并允许您在节点或者容器内执行不同权限级别的操作。
本文档向您描述如何通过认证授权来访问 kubelet 的 HTTPS 端点。
Kubelet 认证
默认情况下,所有未被配置的其他身份验证方法拒绝的,对 kubelet 的 HTTPS 端点的请求将被视为匿名请求,并被授予 system:anonymous
用户名和 system:unauthenticated
组。
如果要禁用匿名访问并发送 401 Unauthorized
的未经身份验证的请求的响应:
- 启动 kubelet 时指定
--anonymous-auth=false
标志
如果要对 kubelet 的 HTTPS 端点启用 X509 客户端证书身份验证:
- 启动 kubelet 时指定
--client-ca-file
标志,提供 CA bundle 以验证客户端证书 - 启动 apiserver 时指定
--kubelet-client-certificate
和--kubelet-client-key
标志 - 参阅 apiserver 认证文档 获取更多详细信息。
启用 API bearer token(包括 service account token)用于向 kubelet 的 HTTPS 端点进行身份验证:
- 确保在 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 有很多原因:
- 启用匿名认证,但匿名用户调用 kubelet API 的能力应受到限制
- 启动 bearer token 认证,但是 API 用户(如 service account)调用 kubelet API 的能力应受到限制
- 客户端证书身份验证已启用,但只有那些配置了 CA 签名的客户端证书的用户才可以使用 kubelet API
如果要细分访问 kubelet API,将授权委托给 API server:
- 确保 API server 中启用了
authorization.k8s.io/v1beta1
API 组 - 启动 kubelet 时指定
--authorization-mode=Webhook
、--kubeconfig
和--require-kubeconfig
标志 - kubelet 在配置的 API server 上调用
SubjectAccessReview
API,以确定每个请求是否被授权
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 |
Namespace 和 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