Kubernetes多租户集群实践

  • 时间:
  • 浏览:1

当然恶意租户可不不到同样通过给自身pod加在同样的容忍配置来访问该节点,怎么才能 让仅使用节点污点和容忍机制还无法在非受信的多租集群上保证目标节点的独占性。

通过对集群中的一些节点加在污点,可不不到将这些节点用于指定几条租户专门使用。在多租户场景下,这类集群中的GPU节点可不不到通过污点的土法律辦法 保留给业务应用中不到使用到GPU的服务团队使用。集群管理员可不不到通过如effect: "NoSchedule"事先 的标签给节点加在污点,并肩不到配置了相应容忍设置的pod可不不到被调度到该节点上。

注意:恶意租户可不不到规避由节点污点和容忍机制强制执行的策略。以下说明仅用于企业內部受信任租户集群,或租户无法直接访问 Kubernetes 控制平面的集群。

关于资源配额的详细指导可不不到参见这里

在建立了基于用户角色的访问控制基础上,亲们还不到保证命名空间之间的网络隔离,在不同的命名空间之间不到够允许白名单范围内的跨租户应用请求。

怎么才能 才能 外理多租户集群的安全隔离大问题是企业上云的有有一一1个关键大问题,本文主要介绍kubernetes多租户集群的基本概念和常见应用特性,以及在企业內部共享集群的业务场景下,基于kubernetes原生和ACK集群现有安全管理能力快速实现多租户集群的相关方案。

从1.14版本开使英语 pod的优先级和抢占可能性从beta成为稳定特性,其中pod priority标识了pod在pending状态的调度队列中听候的优先级;而当节点资源严重不足等原因造成高优先的pod无法被调度时,scheduler会尝试驱逐低优先级的pod来保证高优先级pod可不不到被调度部署。

在多租户场景下,可不不到通过优先级和抢占设置确保租户内重要业务应用的可用性;并肩pod priority可不不到和ResouceQuota配合使用,完成租户在指定优先级下有几条配额的限制。

在隔离的安全程度上,亲们可不不到将其分为软隔离(Soft Multi-tenancy)和硬隔离(Hard Multi-tenancy)这些。其中软隔离更多的是面向企业內部的多租需求,该特性下默认不存在恶意租户,隔离的目的是为了內部团队间的业务保护和对可能性的安全攻击进行防护;而硬隔离面向的更多是对外提供服务的服务供应商,可能性该业务特性下无法保证不同租户中业务使用者的安全背景,亲们默认认为租户之间以及租户与k8s系统之间是存在互相攻击的可能性,怎么才能 让这里可是到更严格的隔离作为安全保障。关于多租户的不同应用场景,在下节会有更细致的介绍。

在多租户场景下,不同团队或部门共享集群资源,难免会有资源竞争的状态存在,为此亲们不到对每个租户的资源使用配额做出限制。其中ResourceQuota用于限制租户对应命名空间下所有pod占用的总资源request和limit,LimitRange用来设置租户对应命名空间中部署pod的默认资源request和limit值。另外亲们还可不不到对租户的存储资源配额和对象数量配额进行限制。

您可不不到在使用了Terway网络插件的容器服务集群上配置NetworkPolicy,这里可不不到获得一些策略配置的示例。

下面介绍一下典型的这些企业多租户应用场景和不同的隔离需求:

虽然Kubernetes现有安全和调度能力还严重不足以详细安全地实施多租隔离,怎么才能 让在如企业內部共享集群事先 的应用场景下,通过命名空间完成租户间资源域的隔离,并肩通过RBAC、PodSecurityPolicy、NetworkPolicy等策略模型控制租户对资源访问范围和能力的限制,以及现有资源调度能力的结合,可能性可不不到提供相当的安全隔离能力。而对于SaaS、KaaS事先 的服务平台特性,亲们可不不到通过容器服务八月即将推出的安全容器来实现容器内核级别的隔离,能助 最大程度的外理恶意租户通过逃逸手段的跨租户攻击。

ACK集群的授权分为RAM授权和RBAC授权有有一一1个步骤,其中RAM授权作用于集群管理接口的访问控制,包括对集群的CRUD权限(如集群可见性、扩缩容、加在节点等操作),而RBAC授权用于集群內部kubernetes资源模型的访问控制,可不不到做到指定资源在命名空间粒度的细化授权。

而对于如SaaS、KaaS等服务模型下,可能性亲们无法保证租户内用户的可信程度时,亲们不到采取一些更强有力的隔离手段,比如:

ACK也提供了基于阿里云KMS服务的secrets加密开源外理方案,可不不到参阅这里。

关于怎么才能 才能 使用节点污点机制来控制调度,请参阅这里。

当然Kubernetes现有的命名空间单层逻辑隔离还严重不足以满足一次要大型企业应用繁杂业务模型对隔离需求,亲们可不不到关注Virtual Cluster,它通过抽象出更高级别的租户资源模型来实现更精细化的多租管理,以此弥补原生命名空间能力上的严重不足。

与企业內部共享集群不同,这里的最终用户均来自非受信域,亲们当中不可外理的存在恶意租户在服务平台上执行恶意代码,怎么才能 让对于SaaS/KaaS服务模型下的多租户集群,亲们不到更高标准的安全隔离,而kubernetes现有原生能力还严重不足以满足安全上的需求,为此亲们不到如安全容器事先 在容器运行时刻内核级别的隔离来强化该业务特性下的租户安全。

ACK授权管理为租户内用户提供了不同级别的预置角色模板,并肩支持绑定多个用户自定义的集群角色,此外支持对批量用户的授权。如需详细了解ACK上集群相关访问控制授权,请参阅相关帮助文档。

​ OPA(Open Policy Agent)是这些功能强大的策略引擎,支持解耦式的policy decisions服务怎么才能 让社区可能性有了相对成熟是什么的句子的句子 图片 图片 的与kubernetes的集成方案。当现有RBAC在命名空间粒度的隔离不到够满足企业应用繁杂的安全需求时,可不不到通过OPA提供object模型级别的细粒度访问策略控制。

NetworkPolicy可不不到控制不同租户业务pod之间的网络流量,另外可不不到通过白名单的土法律辦法 打开跨租户之间的业务访问限制。

关于怎么才能 才能 开启PSP admission和相关策略及权限绑定的使用,可不不到参阅这里

PSP是k8s原生的集群维度的资源模型,它可不不到在创建pod请求的admission阶段校验其行为是是不是满足对应PSP策略的要求,比如检查pod是是不是使用了host的(网络,文件系统,指定端口,PID namespace)等,并肩可不不到限制租户内的用户开启特权(privileged)容器,限制挂盘类型,强制只读挂载等能力;不仅这么,PSP还可不不到基于绑定的策略给pod加在对应的SecurityContext,包括容器运行时刻的uid,gid和加在或删除的内核capabilities等多种设置。

在多租户集群中不同租户用户共享同一套etcd存储,在最终用户可不不到访问Kubernetes控制平面的场景下,亲们不到保护secrets中的数据,外理在访问控制策略配置不当状态下的敏感信息泄露。为此可不不到参考k8s原生的secret加密能力,请参阅这里。

这里首先介绍一下"租户",租户的概念不止局限于集群的用户,它可不不到带有为一组计算,网络,存储等资源组成的工作负载集合。而在多租户集群中,不到在有有一一1个集群范围内(未来可能性会是多集群)对不同的租户提供尽可能性的安全隔离,以最大程度的外理恶意租户对一些租户的攻击,并肩不到保证租户之间公平地分配共享集群资源。

​ KaaS多租场景常见于云服务提供商,该场景下业务平台的服务直接通过Kubernetes控制平面暴露给不同租户下的用户,最终用户可不不到使用k8s原生API可能性服务提供商基于CRDs/controllers扩展出的接口。出于隔离的最基本需求,这里不同租户可是到通过命名空间进行访问上的逻辑隔离,并肩保证不同租户间网络和资源配额上的隔离。

租户内用户

本节重点关注基于Kubernetes原生安全能力的多租户实践。

另外,对于业务安全等级要求较高的应用场景,亲们不到限制应用容器的内核能力,可不不到配合seccomp/AppArmor/SELinux等策略工具达到限制容器运行时刻capabilities的目的。

在规划和实施多租户集群时,亲们首先可不不到利用的是Kubernetes自身的资源隔离层,包括集群这些,命名空间,节点,pod和容器均是不同层次的资源隔离模型。当不同租户的应用负载能助 共享相同的资源模型时,就会存在彼此之间的安全隐患。为此,亲们不到在实施多租时控制每个租户能助 访问到的资源域,并肩在资源调度层面尽可能性的保证外理敏感信息的容器运行在相对独立的资源节点内;可能性出于资源开销的宽度,当有来自不同租户的负载共享同有有一一1个资源域时,可不不到通过运行时刻的安全和资源调度控制策略减少跨租户攻击的风险。

并肩OPA支持七层的NetworkPolicy策略定义及基于labels/annotation的跨命名空间访问控制,可不不到作为k8s原生NetworkPolicy的有效增强。

该场景下集群的所有用户均来自企业內部,这也是当前过多过多过多过多有k8s集群客户的使用模式,可能性服务使用者身份的可控性,相对来说这些业务特性的安全风险是相对可控的,毕竟老板可不不到直接裁掉不怀好意的员工:)根据企业內部人员特性的繁杂程度,亲们可不不到通过命名空间对不同部门或团队进行资源的逻辑隔离,并肩定义以下几种角色的业务人员:

集群管理员:

在SaaS多租场景下,kubernetes集群中的租户对应为SaaS平台中各服务应用实例和SaaS自身控制平面,该场景下可不不到将平台各服务应用实例划分到彼此不同的命名空间中。而服务的最终用户是无法与Kubernetes的控制平面组件进行交互,这些最终用户能助 看得人和使用的是SaaS自身控制台,亲们通过上层定制化的SaaS控制平面使用服务或部署业务(如下左图所示)。这类,某博客平台部署在多租户集群上运行。在该场景下,租户是每个客户的博客实例和平台一些人的控制平面。平台的控制平面和每个托管博客都将在不同的命名空间中运行。客户将通过平台的界面来创建和删除博客、更新博客软件版本,但无法了解集群的运作土法律辦法 。

开启Kubernetes集群的默认安全配置

​ 在实施多租户架构时首先不到挑选对应的应用场景,包括判断租户内用户和应用负载的可信程度以及对应的安全隔离程度。在此基础上以下几点是安全隔离的基本需求:

租户管理员