Kubernetes 多租户实践

简介: 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",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。
|
29天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
34 0
|
1月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【2月更文挑战第29天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的提升,有效的监控和日志管理变得至关重要。本文将探讨构建高效 Kubernetes 集群监控系统的策略,以及实施日志聚合和分析的最佳实践。通过引入如 Prometheus 和 Fluentd 等开源工具,我们旨在为运维专家提供一套完整的解决方案,以保障系统的稳定性和可靠性。
|
5月前
|
运维 Kubernetes 大数据
利用 Kubernetes 降本增效?EasyMR 基于 Kubernetes 部署的探索实践
Kubernetes 是市面上最受欢迎的集群管理解决方案之一,本文将介绍 EasyMR 作为一款提供一站式可视化组件安装部署与可观测运维管理能力的大数据计算引擎产品,是如何基于 Kubernetes 部署进行实践探索的。
47 0
|
3月前
|
Web App开发 Kubernetes 数据可视化
Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
53 0
|
1天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
14天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
17 4
|
1月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践
【2月更文挑战第31天】 在微服务架构日益普及的今天,容器编排工具如Kubernetes已成为部署、管理和扩展容器化应用的关键平台。然而,随着集群规模的扩大和业务复杂性的增加,如何有效监控集群状态、及时响应系统异常,以及管理海量日志信息成为了运维人员面临的重要挑战。本文将深入探讨 Kubernetes 集群监控的最佳实践和日志管理的高效策略,旨在为运维团队提供一套系统的解决思路和操作指南。
27 0
|
5月前
|
资源调度 分布式计算 Kubernetes
Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享
Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享
|
1月前
|
Kubernetes 云计算 开发者
云计算中的容器化技术:Docker与Kubernetes的实践
云计算中的容器化技术:Docker与Kubernetes的实践
114 0