0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Kubernetes多租户集群的概念和常见的应用模式

jf_TEuU2tls 来源:浩道linux 2023-05-15 16:13 次阅读

解决多租户集群的安全隔离问题对于企业上云而言至关重要。本文讨论了 Kubernetes 多租户集群的概念和常见的应用模式、企业内共享集群的业务场景以及 Kubernetes 现有的安全管理功能!

什么是多租户集群

首先,我们讨论一下“租户”是什么。租户的概念不仅是集群用户,还包括构成计算、网络、存储和其他资源的工作负载集。在多租户集群中,对单个集群中不同租户进行隔离,这样恶意租户就无法攻击其他租户,共享集群资源也能合理地分配给租户。根据隔离的安全级别,可以将集群分为软隔离(Soft Multi-tenancy)和硬隔离(Hard Multi-tenancy)。软隔离适用于企业内的多租户集群,因为默认情况下不会有恶意租户。在这种情况下,软隔离主要是保护内部团队之间的业务并防护可能的安全攻击。硬隔离适用于那些提供对外服务的服务提供商。由于业务模式,不能保证不同租户中业务用户的安全背景,所以集群中的租户和 Kubernetes 系统可能会相互攻击,这时需要严格的隔离以确保安全性。下面会对不同的多租户方案进行更详细的描述。

c7032f80-f13b-11ed-90ce-dac502259ad0.png

多租户使用场景

下面介绍两种不同隔离要求的企业多租户方案:

企业内共享集群的多租户

这种场景下,所有集群用户都来自企业,这也是许多 Kubernetes 集群客户的使用场景。由于服务用户的身份是可控的,因此这种业务模式的安全风险也相对可控,毕竟老板可以直接开掉有问题的员工。根据企业内部人员的结构,企业可以通过命名空间,按照逻辑对不同部门或团队的资源进行隔离。另外,定义具有以下角色的业务人员:

集群管理员

具有集群管理功能,例如伸缩容、添加节点等

为租户管理员创建并分配命名空间

管理各种策略,例如 RAM、RBAC、NetworkPolicy 以及 quota

租户管理员

至少拥有集群 RAM 只读权限

管理租户中相关人员的 RBAC 配置

租户用户

在租户命名空间允许范围内使用 Kubernetes 资源

除了用户角色的访问控制之外,我们还要确保命名空间之间的网络隔离,不同命名空间之间只允许白名单内的跨租户应用程序请求。

c71e7b46-f13b-11ed-90ce-dac502259ad0.png

SaaS 和 KaaS 服务模型中的多租户

在 SaaS 多租户场景中,Kubernetes 集群中的租户是 SaaS 平台和 SaaS 控制平面上的服务应用程序实例。在这种场景下,平台的服务应用程序实例分为不同的命名空间。服务的最终用户无法与 Kubernetes 控制平面组件进行交互。这些最终用户可以通过自定义的 SaaS 控制平面访问和使用 SaaS 控制台,使用服务或部署业务,如下左图所示。例如,假设博客平台已部署并在多租户集群上运行。在这种情况下,租户是每个客户的博客实例和平台的控制平面。平台控制平面和每个托管博客都在不同的命名空间中运行。

KaaS 多租户方案通常与云服务提供商有关。在这种场景下,业务平台的服务通过 Kubernetes 控制平面直接暴露给不同租户的用户。最终用户可以使用服务提供商提供的 Kubernetes API 或其他扩展 API。为了满足隔离要求,不同的租户同样需要使用命名空间按照逻辑对访问进行隔离,同时确保不同租户的网络和资源配额的隔离。

与企业内的共享集群相反,这里的最终用户都来自非受信区域,所以可能会有在服务平台上运行恶意代码的恶意租户。对此,SaaS 和 KaaS 服务模型中的多租户集群需要更强的安全隔离。在这种场景下,Kubernetes 现有的原生功能还无法满足安全要求,因此需要在运行时进行内核级别的隔离来增强此业务场景中的租户安全性。

c7454faa-f13b-11ed-90ce-dac502259ad0.png

实施多租户架构

在规划和实施多租户集群时,我们首先要通过资源隔离模型来使用 Kubernetes 的资源隔离层,该模型会将集群本身、命名空间、节点、Pod 和容器分别分层。当不同租户的应用程序负载共享相同的资源模型时,就可能会产生安全风险,因此,在实施多租户时,要控制每个租户可访问的资源域。在资源调度层面,还要确保处理敏感信息的容器只能运行在独立的资源节点上。当不同租户的负载共享同一资源域时,我们可以使用运行时的资源调度控制策略来降低跨租户攻击的风险。

尽管 Kubernetes 现有安全性和调度功能不足以实现租户之间的完全安全隔离,但是可以通过命名空间隔离租户使用的资源域,并使用 RBAC、PodSecurityPolicy、NetworkPolicy 等策略模型来控制租户的资源访问范围以及资源调度功能。这种方法具有可靠的安全隔离能力。

以下部分重点介绍基于 Kubernetes 原生安全功能的多租户实践。

访问控制

NetworkPolicy

NetworkPolicy 控制不同租户业务 Pod 之间的网络流量,并通过白名单进行跨租户业务的访问控制。

PodSecurityPolicy

PodSecurityPolicies(PSP)是 Kubernetes 中原生集群维度的资源模型,可以在创建 Pod 请求的准入阶段验证该行为是否满足相应 PSP 的要求,例如检查 Pod 是否使用主机的网络、文件系统、指定端口或 PID 命名空间。另外,它能限制租户内的用户启用特权容器,还会根据绑定的策略将相应的 SecurityContext 添加到 Pod,包括容器运行时的 UID、GID 以及添加或删除的内核功能等设置。

OPA

Open Policy Agent(OPA)是一种功能强大的策略引擎,支持解耦的策略决策服务。目前,社区已经有了成熟的 Kubernetes 集成解决方案。当现有 RBAC 在命名空间级别上的隔离不能满足企业应用程序复杂的安全需求时,OPA 可以在对象模型级别提供细粒度的访问策略控制。另外,OPA 还支持 7 层 NetworkPolicy 定义以及基于标签和注释的跨命名空间访问控制,可以有效增强 Kubernetes 原生的 NetworkPolicy。

资源调度

资源配额(ResourceQuota)和限制范围(LimitRange)

在多租户场景中,不同的团队或部门会共享集群资源,这可能导致资源竞争问题,需要通过限制每个租户的资源使用配额来解决。ResourceQuota 用于限制总资源请求,以及租户对应命名空间下所有 Pod 的资源。LimitRange 用于设置租户的命名空间中 Pod 的默认资源请求和限制值。另外,我们还可以限制租户的存储资源配额和对象数量配额。

Pod 优先级(Priority)和抢占(Preemption)

从 Kubernetes 1.14 版本开始,Pod 优先级和抢占功能已成为重要组成部分。容器优先级表示调度队列中处于 pending 状态容器的优先级。由于节点资源不足或其他原因而无法调度高优先级的 Pod 时,调度程序会尝试驱逐低优先级的 Pod,来保证可以先调度、部署高优先级的 Pod。在多租户方案中,优先级和抢占的设置可以用来保护租户中重要业务应用程序的可用性。此外,Pod 优先级与 ResourceQuota 搭配使用可将租户配额限制设为指定的优先级。

专用节点(Dedicated Nodes)

注意:恶意租户可能绕过节点 taint 和 tolerance 机制强制实施策略。以下内容仅适用于企业内受信任租户的集群,或租户无法直接访问 Kubernetes 控制平面的集群。

通过为集群中的某些节点添加 taint,可以将这些节点提供给指定租户专用。在多租户场景中,当集群中包含 GPU 节点时,可以使用 taint 为需要 GPU 资源的业务应用程序服务团队保留这些节点。集群管理员可以使用诸如 effect:“NoSchedule” 之类的标签向节点添加污点,这样就只能调度具有相应 tolerance 设置的 Pod 到该节点。但是,恶意租户会将相同的 tolerance 设置添加到 Pod 上来访问此节点,因此,仅使用节点 taint 和 tolerance 机制无法确保目标节点在非信任多租户集群中的安全性。

保护敏感信息—REST 的 secret 加密

在多租户集群中,不同的租户用户共享一套相同的 etcd 存储。当最终用户访问 Kubernetes 控制平面时,要保护好 secret 数据,以避免访问控制策略配置不正确时导致敏感信息泄漏。

总结

在部署多租户体系架构时,首先要确定相应的应用场景,包括租户内用户和应用程序的可信度和对应的安全隔离程度。另外,为满足基本的安全隔离要求,最好执行以下几点:

启用 Kubernetes 集群默认安全配置

启用 RBAC,禁止匿名用户访问

启用 secrets encryption,保护敏感信息

根据 CIS Kubernetes 基准执行安全配置

启用准入控制器,例如 NodeRestriction、AlwaysPullImages 和 PodSecurityPolicy

使用 PSP 控制 Pod 部署的特权模式,并在 Pod 运行时控制 Pod 的安全上下文

配置 NetworkPolicy

Docker 运行时启用 Seccomp、AppArmor 和 SELinux

对监控、日志记录等服务进行多租户隔离

当使用诸如 SaaS 和 KaaS 之类的服务模型时,或者无法保证租户下用户的可信度时,可以使用以下更强力的隔离措施:

使用 OPA DENG 动态策略引擎在网络或对象级别进行细粒度的访问控制

部署安全容器,在容器运行时进行内核级隔离

对监视、日志记录、存储和其他服务实施全面的多租户隔离解决方案

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SaaS
    +关注

    关注

    1

    文章

    363

    浏览量

    36899
  • 安全隔离
    +关注

    关注

    0

    文章

    10

    浏览量

    6224
  • kubernetes
    +关注

    关注

    0

    文章

    224

    浏览量

    8709

原文标题:实践难?本文解决 k8s 多租户集群的安全隔离难题!

文章出处:【微信号:浩道linux,微信公众号:浩道linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    阿里云上Kubernetes集群联邦

    摘要: kubernetes集群让您能够方便的部署管理运维容器化的应用。但是实际情况中经常遇到的一些问题,就是单个集群通常无法跨单个云厂商的多个Region,更不用说支持跨跨域不同的云厂商。这样会给
    发表于 03-12 17:10

    kubernetes集群配置

    基于v1104版本手动搭建高可用kubernetes 集群
    发表于 08-19 08:07

    Kubernetes 从懵圈到熟练:集群服务的三个要点和一种实现

    问题。Kubernetes 集群是 Google 多年来自动化运维实践的结晶,这样的实现显然与其智能运维的哲学相背离的。自带通信员边车模式(Sidecar)是微服务领域的核心概念。边车
    发表于 09-24 15:35

    kubernetes v112二进制方式集群部署

    kubernetes v112 二进制方式集群部署
    发表于 05-05 16:30

    copy模式的DRDS集群

    活解决方案。DRDS按照之前说的业务数据拆分的维度,阿里云DRDS有两种集群分别支持买家维度与卖家维度:unit 模式的DRDS集群
    发表于 11-16 09:23

    请问鸿蒙系统上可以部署kubernetes集群吗?

    鸿蒙系统上可以部署kubernetes集群
    发表于 06-08 11:16

    如何部署基于Mesos的Kubernetes集群

    的内核。把Kubernetes运行在Mesos集群之上,可以和其他的框架共享集群资源,提高集群资源的利用率。 本文是Kubernetes和M
    发表于 10-09 18:04 0次下载
    如何部署基于Mesos的<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>

    浅谈Kubernetes集群的高可用方案

    Kubernetes作为容器应用的管理中心,通过对Pod的数量进行监控,并且根据主机或容器失效的状态将新的Pod调度到其他Node上,实现了应用层的高可用性。针对Kubernetes集群,高可用性
    发表于 10-11 10:04 1次下载
    浅谈<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>的高可用方案

    Kubernetes集群发生网络异常时如何排查

    本文将引入一个思路:“在 Kubernetes 集群发生网络异常时如何排查”。文章将引入 Kubernetes 集群中网络排查的思路,包含网络异常模型,常用工具,并且提出一些案例以供学
    的头像 发表于 09-02 09:45 4778次阅读

    Kubernetes 集群的功能

    Telepresence 是一个开源工具,可让您在本地运行单个服务,同时将该服务连接到远程 Kubernetes 集群
    的头像 发表于 09-05 10:58 1081次阅读

    Kubernetes集群内服务通信机制介绍

    现在在 Kubernetes 集群中,我们拥有构成集群管理组件和一组工作机器(称为节点)的控制平面。这些节点托管 Pod,这些 Pod 将后端微服务作为容器化服务运行。
    发表于 10-04 10:13 547次阅读

    Kubernetes集群的关闭与重启

    在日常对 Kubernetes 集群运行维护的过程中,您可能需要临时的关闭或者是重启 Kubernetes 集群集群进行维护,本文将介绍如
    的头像 发表于 11-07 09:50 9912次阅读

    Kubernetes集群部署

    Kubeadm是一种Kubernetes集群部署工具,通过kubeadm init命令创建master节点,通过 kubeadm join命令把node节点加入到集群
    的头像 发表于 02-15 10:35 1714次阅读

    求一种SaaS模式租户系统数据隔离实现方案

    开发过SaaS系统平台的小伙伴一定对租户这个概念不陌生,简单来说一个租户就是一个公司客户,多个租户共用同一个SaaS系统,一旦SaaS系统
    的头像 发表于 07-27 10:34 886次阅读

    使用Velero备份Kubernetes集群

    Velero 是 heptio 团队(被 VMWare 收购)开源的 Kubernetes 集群备份、迁移工具。
    的头像 发表于 08-05 15:43 342次阅读
    使用Velero备份<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>