前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >虚拟集群 - 集群视图扩展基于命名空间的多租户

虚拟集群 - 集群视图扩展基于命名空间的多租户

作者头像
CNCF
发布2019-12-04 16:10:17
1.6K0
发布2019-12-04 16:10:17
举报
文章被收录于专栏:CNCFCNCF

作者:Fei Guo和Lei Zhang,阿里巴巴

摘要

在这篇客座文章中,来自阿里巴巴的Kubernetes团队,将分享他们如何在社区里基于上游的Kubernetes通过利用一组名为“虚拟集群(Virtual Cluster)”的插件,构建硬性多租户以及扩展租户设计。该团队决定开源这些K8s插件,并在即将到来的KubeCon,为Kubernetes社区贡献这些插件。

介绍

在阿里巴巴,内部的Kubernetes团队正在使用一个网络规模的集群,为大量业务单位提供最终用户服务。在这种情况下,每个最终用户实际上都成为这个K8s集群的“租户”,这使得硬多租户成为一种强烈的需求。

然而,阿里巴巴团队并没有修改Kubernetes的APIServer和资源模型,而是试图在不更改Kuberentes代码的情况下构建一个“虚拟集群”多租户层。在此体系结构中,每个租户给分配专用K8s控制平面(kube-apiserver + kube-controller-manager)和一些“虚拟节点(Virtual Node)”(是Node API对象但没有相应的kubelet),所以不用担忧命名或节点相互矛盾,而租户工作负载仍混合运行在相同的底层“超级集群”,所以资源利用率得到保证。本设计在虚拟集群方案(virtual cluster proposal)中进行了详细阐述,得到了大量的反馈。

https://docs.google.com/document/d/1EELeVaduYZ65j4AXg9bp3Kyn38GKDU5fAJ5LFcxt2ZU/edit#heading=h.zgjbixz8dbin

虽然在本设计中引入了“租户主机(tenant master)”的新概念,但是虚拟集群只是K8s社区中现有基于命名空间的多租户的扩展,在本文的其余部分中称为“命名空间组(命名空间组)”。虚拟集群完全依赖于命名空间组提出的资源隔离机制,我们热切地期待并会推动相关的工作在Kubernetes多租户工作组(WG-multitenancy)进行,以解决这些问题。

如果你想知道更多关于虚拟集群设计的细节,请不要犹豫来阅读虚拟集群方案,而在本文中,我们将关注虚拟集群和背后的高层思想,阐述我们如何用“租户集群”视图扩展命名空间群,以及这个扩展对Kubernetes多租户的用例提供的价值。

背景

本节简要回顾命名空间组多租户建议的体系结构。

我们借用K8s多租户工作组深入了解( K8s Multi-tenancy WG Deep Dive)演讲材料的一个图表(如图1所示),解释使用命名空间组织租户资源的高层思想。

https://static.sched.com/hosted_files/kccnceu19/74/kubecon-eu-multitenancy-wg-deepdive.pdf

图1:命名空间组多租户体系结构

在命名空间组中,所有租户用户共享同一个K8s apiserver的访问点来使用租户资源。他们的帐户、分配的命名空间和资源隔离政策都在租户CRD对象中指定,这些对象由租户管理员管理。租户用户视图受每个租户命名空间限制。定义租户资源隔离政策是为了禁用租户之间的直接通信,并保护租户pod免受安全攻击。它们由原生Kubernetes资源隔离机制实现,包括RBAC、Pod安全政策、网络政策、准入控制和沙箱运行时。可以为不同级别的隔离需求配置和应用多个安全概要文件。此外,资源配额、退款和计费发生在租户级别。

虚拟集群如何扩展视图层

从概念上讲,虚拟集群在命名空间组解决方案之上提供了一个视图层扩展。它的技术细节可以在虚拟集群方案中找到。在虚拟集群中,租户管理员仍然需要使用命名空间组的相同租户的CRD,来指定租户资源提供者 - 即超级主机(super master) - 的租户用户帐户、命名空间和资源隔离政策。

图2:虚拟集群的视图层扩展

如图2所示,由于新的虚拟集群视图层,租户用户现在拥有不同的访问点和租户资源视图。租户用户不直接访问超级主机查看租户命名空间,而是与专用的租户主机交互以利用租户资源,并提供完整的K8s主机视图。所有租户请求都由sync-manager同步到超级主机,该管理器根据租户CRD中指定的资源隔离政策,代表超级主机的租户用户创建相应的自定义资源。也就是说,虚拟集群主要将租户用户视图从命名空间更改为APIserver。从超级主机的角度来看,租户控制器对租户CRD触发相同的工作流。

虚拟集群视图扩展的好处

在现有的命名空间视图之上为租户用户提供虚拟集群视图有很多好处:

  • 它为租户用户提供灵活方便的租户资源管理。例如,嵌套的命名空间层次结构,如图3(a)所示,可以很容易地解决一些难题,比如命名冲突、命名空间可见性、命名空间组解决方案(虚拟集群方案-租户概念Tenant Concept)的子分区租户资源。然而,将原生K8s主机更改为支持嵌套命名空间几乎是不切实际的。通过拥有虚拟集群视图,租户主机创建的命名空间,以及超级主机相应的命名空间组,可以获得类似于使用嵌套命名空间的用户体验。如图3(b)所示,租户用户可以在租户主机中自助创建命名空间,而不用担心与其他租户的命名冲突。当sync-manager将租户命名空间添加到超级主机命名空间组时,冲突将得到解决。租户A用户永远无法查看租户B用户的命名空间,因为他们访问不同的租户主机。租户还可以方便地为不同的租户用户定制政策,该政策只在租户主机本地生效。它提供了更强的租户隔离和安全性,因为它避免了由于在多个租户用户之间共享同一个K8s主机而导致的某些问题。例如,DOS攻击、租户之间的API访问速率控制和租户控制器的隔离不再是问题。
  • 它允许租户用户在租户主机中创建集群范围对象,而不影响其他租户。例如,租户用户现在可以在租户主机中自由创建CRD、ClusterRole/ClusterRoleBinding、PersistentVolume、ResourceQuota、ServiceAccount、NetworkPolicy,而不用担心与其他租户发生冲突。
  • 它减轻了超级主机的可伸缩性压力。首先,可以将超级主机中管理的RBAC规则、政策和用户帐户卸载给租户主机,租户主机可以独立伸缩。其次,租户控制器和operator访问多个租户主机,而不是单个超级主机,这同样可以独立伸缩。
  • 为租户用户创建用户要容易得多。现在,如果租户用户希望将其租户资源公开给其他用户(例如,团队负责人希望添加团队成员来使用分配给团队的资源),租户管理员必须创建所有用户。如果,租户管理员需要为大型组织中的数百个这样的团队提供服务,为租户用户创建用户可能是一个很大的负担。虚拟集群完全将这种负担从租户管理员转移给租户用户。

限制

由于虚拟集群主要扩展了多租户视图选项,并防止了由于共享apiserver而导致的问题,所以它继承了命名空间组,在使到kubernetes节点组件租户感知方面,所面临的相同限制/挑战。需要加强的节点组件包括但不限于:

  • Kubelet和CNI-plugin:他们需要租户感知,以支持强大的网络隔离场景,比如VPC。
    • 例如,如果一个pod与节点隔离在不同的VPC中,那么就绪/活性探针如何工作?这是我们已经开始与上游SIG-Node合作探讨的问题之一。
  • Kube-proxy/Kube-dns:他们需要租户感知,以使cluster-IP类型的租户服务能够工作。
  • 工具:例如,监视工具应该是租户感知的,以避免泄漏租户信息。性能调优工具应该是租户感知的,以消除租户之间的意外性能干扰。

当然,虚拟集群需要额外的资源来为每个租户运行租户主机,这在某些情况下可能是负担不了的。

总结

虚拟集群提供用户友好的集群视图,扩展了命名空间组多租户解决方案。它利用了K8s的资源隔离机制和社区中现有的租户CRD和控制器,但提供了专用租户集群的使用体验。总的来说,我们相信虚拟集群和基于命名空间的多租户,可以为生产集群中的各种Kubernetes多租户用例,提供全面的解决方案,我们正在积极地贡献这个插件到上游社区。

希望在KubeCon见到你!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档