Kubernetes指南:多租户
原生多租户的限制
Kubernetes在多租户方面的支持还是比较少的,没有“租户”这一概念, 也只有namespace提供了一个逻辑的资源池(可以给这个namespace设定一些资源的配额), 并且它在认证授权、网络、Container Runtime等方面离真正的多租户还都比较远。
-
1.认证方面,虽然支持client certificates,tokens,http basic auth等,但没有用户管理的功能。 如果想要新建用户,需要手动修改配置文件并重启服务。 最新版本增加了Keystone的认证,可以借助Keystone来管理用户。
-
2.授权方面,目前只有AlwaysDeny ,AlwaysAllow以及ABAC模式。 ABAC模式根据一个策略文件来配置不同用户的权限,比如限定用户只能访问特定的namespace等,但对于新创建的namespace等资源需要重复修改策略文件。
-
3.Kubernetes要求cluster内部所有的容器之间是全通的,而多租户情况下需要不同租户之前网络是隔离的。
-
4.Docker的安全性问题,跟虚拟化还是有不少距离。
通俗的讲,认证就是验证用户名密码,授权就是检查该用户是否拥有权限访问请求的资源
Kubernetes中使用Node授权
Node授权是一种特殊授权模式,专门授权由kubelet访问的API请求。
概述
Node授权器允许kubelet执行的API操作包括:
- 读:
services
endpoints
nodes
pods
secrets,
configmaps,
persistent volume claims and persistent volumes related to pods bound to the kubelet’s node
- 写:
Node和Node status(启用NodeRestriction准入插件限制kubelet仅修改当前的Node)
Pod和Pod status(启用NodeRestriction准入插件限制kubelet仅修改与当前绑定的pod)
events
Auth-related:
read/write access to the certificationsigningrequests API for TLS bootstrapping the ability to create tokenreviews and subjectaccessreviews for delegated authentication/authorization checks
在以后的版本中,Node授权器支持添加或删除的权限。
为获得Node授权器的授权,kubelet需要使用system:nodes组中的用户名system:node:
启用Node授权器方法:apiserver –authorization-mode=Node。
为了限制kubelets能够写入的API对象,可以启动–admission-control=…,NodeRestriction,…准入(admission)插件。