Kubernetes 多租户实践

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Kubernetes 多租户实践

由于 namespace 本身的限制,Kubernetes 对多租户的支持面临很多困难,本文梳理了 K8S 多租户支持的难点以及可能的解决方案。原文: Multi-tenancy in Kubernetes



是否应该让多个团队使用同一个 Kubernetes 集群?


是否能让不受信任的用户安全的运行不受信任的工作负载?


Kubernetes 支持多租户吗?


本文将探讨支持多租户的集群所面临的挑战。


多租户可以分为:


  1. 软多租户(Soft multi-tenancy) 适用于租户是可信任的情况,例如同一公司的团队共享集群时。
  2. 硬多租户(Hard multi-tenancy) 适用于租户不可信的情况。


实践中也可能是混合模式!



在租户之间共享集群的基本构建块是命名空间(namespace)。


名称空间对资源进行逻辑分组 —— 不提供任何安全机制,也不能保证所有资源都部署在同一节点中。



命名空间中的 pod 仍然可以与集群中的所有其他 pod 通信,向 API 发出请求,并使用尽可能多的资源。


开箱即用,任何用户都可以访问任何命名空间。


如何阻止访问呢?*


通过RBAC,可以限制用户和应用程序可以使用的命名空间或在命名空间内做什么。


常见操作是向有限的用户授予权限。



使用QuotaLimitRanges,可以限制在命名空间中部署的资源以及可用的内存、CPU 等。


如果想限制租户对其命名空间的操作,这是个好主意。



默认情况下,所有 pod 都可以与 Kubernetes 中的任何 pod 通信。


但这并不适用于多租户,可以用NetworkPolicies来纠正这个问题。


NetworkPolicies 类似于防火墙规则,可以隔离出站和入站流量。



很好,命名空间现在安全了吗?


别急。


基于 RBAC、NetworkPolicies、Quota 等作为多租户的基本构建块还是不够。


Kubernetes 还有几个共享组件。


Ingress 控制器就是一个很好的例子,通常在每个集群中只会部署一个。


如果提交具有相同路径的 Ingress 清单,最后一个会覆盖之前的定义,并且只有这一个才会生效。



更好的方法是为每个命名空间部署一个控制器。


另一个有趣的挑战是 CoreDNS。


如果某个租户滥用 DNS 怎么办?


集群的其余部分也将受到影响。


可以用一个额外的插件[https://github.com/coredns/policy](CoreDNS external plugin)来限制请求。



Kubernetes API 服务器也面临同样的挑战。


Kubernetes 不知道租户,如果 API 接收到太多请求,将会触发全局流控。


我不知道是否有解决办法!



如果进一步考虑共享资源,那么 kubelet 和工作负载也存在挑战。


正如Philippe Bogaerts提到的,租户可以通过 liveness 探针接管集群中的节点。


这也不容易解决。



可以将扫描器(linter)作为 CI/CD 的一部分,或者用准入控制器(admission controller)来验证提交给集群的资源是否安全。


这里是Open Policy Agent的库和规则。



还有隔离机制比虚拟机更弱的容器。


Lewis Denham-Parry在这段视频中展示了如何从容器中逃逸。


如何解决这个问题?


可以用gVisor这样的容器沙箱,或者用轻型虚拟机作为容器(Kata Containerfirecracker-containerd)或完整的虚拟机(virtlet作为CRI)。



希望你已经意识到这个主题的复杂性,以及在 Kubernetes 中为隔离网络、工作负载和控制器提供严格的边界是多么困难。


这就是为什么不建议在Kubernetes中提供硬多租户的原因。


如果需要硬多租户,建议使用多集群或集群即服务(Cluster-as-a-Service)工具。



如果可以容忍较弱的多租户模型,以换取简单性和便利性,那么可以推出 RBAC、Quota 等规则。


还有一些工具可以把这些问题抽象出来:



最后,如果对这个话题感兴趣,可以进一步参考以下资源:





你好,我是俞凡,在 Motorola 做过研发,现在在 Mavenir 做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI 等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
22 2
|
2月前
|
Kubernetes 持续交付 开发者
探索并实践Kubernetes集群管理与自动化部署
探索并实践Kubernetes集群管理与自动化部署
102 4
|
5天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
23 1
|
15天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
47 4
|
16天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
48 3
|
23天前
|
Kubernetes 监控 开发者
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
34 2
|
24天前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
72 2
|
7天前
|
Kubernetes 负载均衡 调度
Kubernetes集群管理与编排实践
Kubernetes集群管理与编排实践
|
7天前
|
Kubernetes Cloud Native 前端开发
Kubernetes入门指南:从基础到实践
Kubernetes入门指南:从基础到实践
17 0
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践