网站建设需具备的条件/第三方网站流量统计
由于namespace本身的限制,Kubernetes对多租户的支持面临很多困难,本文梳理了K8S多租户支持的难点以及可能的解决方案。原文: Multi-tenancy in Kubernetes

是否应该让多个团队使用同一个Kubernetes集群?
是否能让不受信任的用户安全的运行不受信任的工作负载?
Kubernetes支持多租户吗?
本文将探讨支持多租户的集群所面临的挑战。
多租户可以分为:
-
软多租户(Soft multi-tenancy) 适用于租户是可信任的情况,例如同一公司的团队共享集群时。 -
硬多租户(Hard multi-tenancy) 适用于租户不可信的情况。
实践中也可能是混合模式!

在租户之间共享集群的基本构建块是命名空间(namespace)。
名称空间对资源进行逻辑分组 —— 不提供任何安全机制,也不能保证所有资源都部署在同一节点中。

命名空间中的pod仍然可以与集群中的所有其他pod通信,向API发出请求,并使用尽可能多的资源。
开箱即用,任何用户都可以访问任何命名空间。
如何阻止访问呢?*
通过RBAC,可以限制用户和应用程序可以使用的命名空间或在命名空间内做什么。[1]
常见操作是向有限的用户授予权限。

使用Quota[2]和LimitRanges[3],可以限制在命名空间中部署的资源以及可用的内存、CPU等。
如果想限制租户对其命名空间的操作,这是个好主意。

默认情况下,所有pod都可以与Kubernetes中的任何pod通信。
但这并不适用于多租户,可以用NetworkPolicies[4]来纠正这个问题。
NetworkPolicies类似于防火墙规则,可以隔离出站和入站流量。

很好,命名空间现在安全了吗?
别急。
基于RBAC、NetworkPolicies、Quota等作为多租户的基本构建块还是不够。
Kubernetes还有几个共享组件。
Ingress控制器就是一个很好的例子,通常在每个集群中只会部署一个。
如果提交具有相同路径的Ingress清单,最后一个会覆盖之前的定义,并且只有这一个才会生效。

更好的方法是为每个命名空间部署一个控制器。
另一个有趣的挑战是CoreDNS。
如果某个租户滥用DNS怎么办?
集群的其余部分也将受到影响。
可以用一个额外的插件[https://github.com/coredns/policy](CoreDNS external plugin)来限制请求。

Kubernetes API服务器也面临同样的挑战。
Kubernetes不知道租户,如果API接收到太多请求,将会触发全局流控。
我不知道是否有解决办法!

如果进一步考虑共享资源,那么kubelet和工作负载也存在挑战。
正如Philippe Bogaerts提到的[5],租户可以通过liveness探针接管集群中的节点。
这也不容易解决。

可以将扫描器(linter)作为CI/CD的一部分,或者用准入控制器(admission controller)来验证提交给集群的资源是否安全。
这里是Open Policy Agent的库和规则。[6]

还有隔离机制比虚拟机更弱的容器。
Lewis Denham-Parry在这段视频中展示了如何从容器中逃逸。[7]
如何解决这个问题?
可以用gVisor这样的容器沙箱,或者用轻型虚拟机作为容器(Kata Container,firecracker-containerd)或完整的虚拟机(virtlet作为CRI[8])。

希望你已经意识到这个主题的复杂性,以及在Kubernetes中为隔离网络、工作负载和控制器提供严格的边界是多么困难。
这就是为什么不建议在Kubernetes中提供硬多租户[9]的原因。
如果需要硬多租户,建议使用多集群或集群即服务(Cluster-as-a-Service)工具。
-
Cluster API -
HyperShift -
Kamaji -
Gardener
如果可以容忍较弱的多租户模型,以换取简单性和便利性,那么可以推出RBAC、Quota等规则。
还有一些工具可以把这些问题抽象出来:
-
Virtual Cluster (wg-multitenancy) -
Vcluster -
Capsule -
Kiosk
最后,如果对这个话题感兴趣,可以进一步参考以下资源:
-
我们在 Learnk8s上举办的Kubernetes研讨会 -
twitter讨论集合 -
每周发布的 Kubernetes时事通讯 [10]
你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!
Limiting access to Kubernetes resources with RBAC: https://learnk8s.io/rbac-kubernetes
[2]Resource Quotas: https://kubernetes.io/docs/concepts/policy/resource-quotas
[3]Limit Ranges: https://kubernetes.io/docs/concepts/policy/limit-range
[4]Kubernetes Network Policy Recipes: https://github.com/ahmetb/kubernetes-network-policy-recipes
[5]Exploiting applications using liveness probes in Kubernetes: https://xxradar.medium.com/exploiting-applications-using-livenessprobes-in-kubernetes-cdff6329d320
[6]OPA Gatekeeper Library: https://github.com/open-policy-agent/gatekeeper-library
[7]What vulnerabilities? Live hacking of containers and orchestrators - Lewis Denham-Parry: https://www.youtube.com/watch?v=JaMJJTb_bEE
[8]virtlet: https://github.com/Mirantis/virtlet
[9]Hard Multi-Tenancy in Kubernetes: https://blog.jessfraz.com/post/hard-multi-tenancy-in-kubernetes
[10]Learn Kubernetes Weekly: https://learnk8s.io/learn-kubernetes-weekly
本文由 mdnice 多平台发布
相关文章:

Kubernetes多租户实践
由于namespace本身的限制,Kubernetes对多租户的支持面临很多困难,本文梳理了K8S多租户支持的难点以及可能的解决方案。原文: Multi-tenancy in Kubernetes 是否应该让多个团队使用同一个Kubernetes集群? 是否能让不受信任的用户安全的运行不受信任的工作…...

【GEE】GEE反演地表温度相关问题说明(空洞、Landsat9数据集等)
之前分享了基于GEE-Landsat8数据集地表温度反演(LST热度计算),最近有很多小伙伴私信我很多问题,一一回复太慢了,所以今天写篇文章统一回答一下大家的问题。 问题1:数据有很多空洞、某些条带没有数据等 问题…...

【蓝桥备赛】数组分割——组合数学?
题目链接 数组分割 个人思路 两个数组都需要和为偶数,那么就去思考一个数组如何才能和是偶数呢?? 数组里肯定要么是奇数要么是偶数,偶数无论有多少个,都不会改变一个数组的奇偶性。但是奇数个奇数的和还是奇数&…...

iphone5s基带部分电源部分主主电源供电及
时序: 1.,基带电源的供电,基带电源也叫pmu。 首先时序图说电池提供供电,电池是J6接口,视频习惯把接口称之为座子。查U2_RF芯片,发现供电信号为PP_BATT_VCC_CONN,但是没查到跟电池座子有关系,电池座子写的是…...

【每日一题】按分隔符拆分字符串
文章目录 Tag题目来源解题思路方法一:遍历方法二:getline 写在最后 Tag 【遍历】【getline】【字符串】【2024-01-20】 题目来源 2788. 按分隔符拆分字符串 解题思路 方法一:遍历 思路 分隔符在字符串开始和结束位置时不需要处理。 分隔…...

spawn_group_template | spawn_group | linked_respawn
字段介绍 spawn_group | spawn_group_template 用来记录与脚本事件或boss战斗有关的 creatures | gameobjects 的刷新数据linked_respawn 用来将 creatures | gameobjects 和 boss 联系起来,这样如果你杀死boss, creatures | gameobjects 在副本重置之前…...

软考系分之计算机网络规划设计、综合布线、RAID和网络存储等
文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列(RAID)5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层,接…...

使用ElEment组件实现vue表单校验空值
1.绑定表单组件数组rules 2.在data域中设定组件rules 3.设定调用方法函数 提交校验 取消: 测试页面 提交空值 失去焦点 取消重置 提交后重置...

processing集训day01
介绍 Processing是一门开源编程语言,提供了对图片,动画和声音进行编程的环境。学生,艺术家,设计师,建筑师,研究人员和业余爱好者可以使用Processing进行学习,制作原型以及作为生产工具。你可以…...

java面试——juc篇
目录 一、线程基础 1、进程与线程的区别?(⭐⭐⭐) 2、并行和并发的区别(⭐) 3、创建线程的方式有哪些?(⭐⭐⭐⭐) runnable和Callable的区别: 线程中的run()和 star…...

CSS 实现卡片以及鼠标移入特效
CSS 实现卡片以及鼠标移入特效 文章目录 CSS 实现卡片以及鼠标移入特效0、效果预览默认鼠标移入后 1、创建卡片组件2、添加样式3、完整代码 0、效果预览 默认 鼠标移入后 在本篇博客中,我们将探讨如何使用 CSS 来实现卡片组件,并添加鼠标移入特效&#…...

芯课堂 | SWM34S系列驱动TFT-LCD显示模组应用基本注意事项
1、确认硬件的连接、包括电源、地、RGB 数据线、DCLK\DE\HSYNC\VSYNC 等,显示模组有 DISP、RESET、CS、SCL、SDA 等。 2、确认各电压的正常,包括电源,部分有 IOVCC、VGL、VGH、VCOM 等电压 3、如果应用的 TFT-LCD 模组非演示例程中已适配调…...

java8 列表通过 stream流 根据对象属性去重的三种实现方法
java8 列表通过 stream流 根据对象属性去重的三种实现方法 一、简单去重 public class DistinctTest {/*** 没有重写 equals 方法*/SetterGetterToStringAllArgsConstructorNoArgsConstructorpublic static class User {private String name;private Integer age;}/*** lombo…...

鸿蒙开发DevEco Studio Setup 工具认识及使用
1、界面认识 1.1 创建页面之前理解Ability 1.2 理解stage模式 1.3 工程级别目录结构 1.4 模块级别目录...

程序员裁员潮:技术变革下的职业危机
程序员裁员潮:技术变革下的职业危机 一对来自中国的工程师夫妻在美身亡,疑因谷歌裁员致悲剧发生。在技术变革下,裁员对于程序员的影响到底有多大?快来和我们分享一下你的看法吧~ 哎,这是悲哀,让我又想起来…...

Cesium快速入门
文章目录 0.引言1.Cesium环境搭建1.1安装Node.js环境1.2配置Cesium依赖 2.搭建第一个Cesium程序2.1引入源码编译结果2.2创建html文件2.3编写第一个Cesium程序2.4申请许可密钥2.5发布Cesium程序服务 3.界面介绍4.默认控件介绍 0.引言 现有的gis开发方向较流行的是webgis开发&am…...

Android.mk和Android.bp的区别和转换详解
Android.mk和Android.bp的区别和转换详解 文章目录 Android.mk和Android.bp的区别和转换详解一、前言二、Android.mk和Android.bp的联系三、Android.mk和Android.bp的区别1、语法:2、灵活性:3、版本兼容性:4、向后兼容性:5、编译区…...

卡尔曼滤波器原理By_DR_CAN 学习笔记
DR_CAN卡尔曼滤波器 Kalman Filter Recursive Algorithm迭代过程 数学基础正态分布和6-SigmaData FusionCovariance MatrixState Space Representation离散化推导 linearizationTaylor Series2-DSummary Step by Step Derivation of Kalman Gain矩阵求导公式 Prior / Posterio…...

013 异常
文章目录 异常人为创造异常 异常 定义:运行时检测的错误 try:可能触发异常的语句 except 错误类型1 [as 变量1]:处理语句1 except 错误类型2:处理语句2 except Exception:不是以上错误类型的处理语句 else:未发生异常的语句 finally:无论是否发生异常的语句异常处理:保障程序…...

微服务Spring Cloud架构详解
"Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开…...

推荐一一款小众黑科技工具,低调使用建议收藏
wireshark是个啥就不多说了,非常流行的网络封包分析软件。 可以截取各种网络封包,显示网络封包的详细信息。 软件功能十分强大,操作也不复杂。 很多小友都在后台问能不能出一期完整的抓包分析贴,今天给你们安排上了哈。 01 W…...

HiP框架:多AI模型联手,助力机器人驾驭复杂规划大局
原创 | 文 BFT机器人 你的日常待办清单或许只是些稀松平常的小事:清洗堆积如山的碗盘、采购琳琅满目的食品杂货等。在执行这些任务时,你无需逐一写下“捧起那只满是油污的盘子”或“用湿润的海绵仔细擦洗这个盘子”这样的琐碎步骤,因为在你的…...

关于OC中变量相关知识点
众所周知,变量是用来存储数据的 围绕着变量,有很多知识点,总结归纳一下 变量的类型变量的作用区域局部变量全局变量静态变量变量的访问范围属性成员变量实例变量synthesizedynamic… 变量的类型 变量大致分为两大类型: 基本数据…...

机器学习分类模型评价指标总结(准确率、精确率、召回率、Fmax、TPR、FPR、ROC曲线、PR曲线,AUC,AUPR)
为了看懂论文,不得不先学一些预备知识((55555 主要概念 解释见图 TP、FP、TN、FN 准确率、精确率(查准率)、召回率(查全率) 真阳性率TPR、伪阳性率FPR F1-score2TP/(2*TPFPFN) 最大响应分…...

go语言(十一)----面向对象继承
一、面向对象继承 写一个父类 package mainimport "fmt"type Human struct {name stringsex string }func (this *Human) Eat() {fmt.Println("Human.Eat()...") }func (this *Human) Walk() {fmt.Println("Human.Walk()...") }func main() {h…...

一款自动化提权工具
免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。…...

【Qt】最详细教程,如何从零配置Qt Android安卓环境
这里写自定义目录标题 安装Qt Creator & Qt安装下载&安装JDK设置Android SDKAndroid模拟器下载创建android设备(模拟器) Gradle安装问题解决无法打开安卓模拟器Build失败方案一:不适用Qt自带SDK管理器(失败)方…...

spring与spring boot的区别
spring与spring boot的区别 项目配置: Spring: 在Spring中,项目的配置通常需要在XML文件中进行,包括配置数据源、事务管理、AOP等。这需要开发人员手动配置很多细节。 <!-- 在Spring中使用XML配置数据源 --> <bean id…...

http网络编程——在ue5中实现文件传输功能
http网络编程在ue5中实现 需求:在unreal中实现下载功能,输入相关url网址,本地文件夹存入相应文件。 一、代码示例 1.Build.cs需要新增Http模块,样例如下。 PublicDependencyModuleNames.AddRange(new string[] { "Core&q…...

JVM之java内存区域[2](堆、方法区、直接内存)
文章目录 版权声明一 堆1.1 java堆1.2 模拟堆区的溢出1.3 arthas中堆内存相关的功能1.4 设置大小 二 方法区2.1 方法区简介2.2 补充:字符串常量池和运行时常量池2.3 方法区的大小设计2.4 arthas中查看方法区2.5 模拟方法区的溢出2.7 StringTable的练习题 三 神奇的i…...