云原生之深入解析Kubernetes策略引擎对比:OPA/Gatekeeper与Kyverno

news2024/11/20 6:35:24

一、前言

① Kubernetes 策略

  • Kubernetes 的 Pod Security Policy,正如其名字所暗示的,仅是针对 Pod 工作的,是一种用来验证和控制 Pod 及其属性的机制。
  • 另外 PSP 只能屏蔽非法 Pod 的创建,无法执行任何补救/纠正措施。而 Gatekeeper 和 Kyverno 的作用范围就不是局限在 Pod 上,并且也有更多更深入的功能,而不只是简单的验证功能。
  • 策略引擎是一种能对整个 Kubernetes 环境进行全局控制的方法。

② Gatekeeper 简介

  • Gatekeeper 是一个由 Google、微软等多个公司合作推出的开源项目,后来捐赠给了 CNCF,现已经历了三次迭代。Gatekeeper 是通用策略引擎 Open Policy Agent(OPA)的 Kubernetes 专用实现。由于 Open Policy Agent 与 Gatekeeper 之间的关系,该项目经常被写成“OPA Gatekeeper”来表明这层关系。Gatekeeper 实现了请求验证功能,最近还加入了变异能力。
  • OPA 的一个主要特征是依赖于使用一种叫做 Rego 的专用编程语言,这种语言被用来实现策略决策的必要逻辑。通过 Rego,OPA 能够广泛适用于包括 Kubernetes 在内的多种不同的软件,实现高层次的逻辑操作。

③ Kyverno 简介

  • Kyverno 是来自 Nirmata 的开源项目,后来也捐赠给了 CNCF。和 Gatekeeper 一样,Kyverno 也是一个具有验证和变异能力的 Kubernetes 策略引擎,但是它还有生成资源的功能,最近还加入了 API 对象查询的能力。
  • 与 Gatekeeper 不同,Kyverno 原本就是为 Kubernetes 编写的。和 Gatekeeper 相比,Kyverno 除了对象生成功能之外,还无需专用语言即可编写策略,从实现语言的角度上来看,Kyverno 的模型更为简洁。

二、对比

  • 如下的三个表格对两个项目的特征和质量进行分类,并试图以最客观的方式进行对比,这些维度分别是:
    • 特征/功能维度用于描述技术属性;
    • 社区/生态系统维度用于描述落地情况和组织属性;
    • 杂项。

在这里插入图片描述
在这里插入图片描述

  • 注:
    • 无精确定义,Gatekeeper 看起来比 Kyverno 采用数量更多,但是并没有具体数字。
    • 无客观标准,Gatekeeper 历史更长,社区认可度可能更高。

在这里插入图片描述

  • 注:并没有统一的评判标准,这里的评价基于 Gatekeeper 的功能,而不是 Rego。

三、分析

① Gatekeeper 的优势

  • 能够表达非常复杂的策略;
  • 社区更为成熟;
  • 支持多副本模式,更好的可用性和伸缩性。

② Gatekeeper 的劣势

  • 需要编程语言支持,该语言的学习曲线较为陡峭,可能会产生大量技术债,并延长交付时间;
  • 变异能力还处在萌芽期;
  • 没有生成能力,意味着它的主要应用场景就在验证方面;
  • 策略复杂冗长,需要多个对象协同实现。

③ Kyverno 的优势

  • Kubernetes 风格的策略表达方式,非常易于编写;
  • 成熟的变异能力;
  • 独特的生成和同步能力,扩展了应用场景;
  • 快速交付,场景丰富。

④ Kyverno 的劣势

  • 受到语言能力的限制,难以实现复杂策略;
  • 较为年轻,社区接受度不高;
  • API 对象查询能力还很初级;
  • 没有高可用能力(还在路线图阶段)。

⑤ 具体分析

  • Kubernetes 是一个声明式的系统:用户向 Kubernetes 提出对状态的要求,Kubernetes 通过各种控制器,去协调观察到的状态,以使其与用户期望的状态一致,这就是云原生平台的核心价值主张。为了实现这一目标,逻辑实现的重任从用户身上转移到了平台本身,每个资源类型都存在一些内部逻辑,这些逻辑就是协调其状态所需的能力。
  • 对于 Gatekeeper 来说,到目前为止最大的弱点是它需要一种叫做 Rego 的专门的编程语言来实现这种逻辑,这种语言在其他地方都无法使用。这是一个现实,因为 OPA 是一个通用的策略引擎。只有通过 Gatekeeper 将其改编成 Kubernetes 形式,才能利用其能力。
  • 实际上,用户负责描述他们希望调和的对象(策略),以及提供必要的逻辑(Rego)来调和它。使用外部 DSL 来管理 Kubernetes 策略,在很多方面都会变得繁琐和复杂,并给项目增加技术债务。作为一种权衡,其明显的优势是可以实现非常强大的策略。毕竟,当一个人需要编写一种编程语言时,他只受限于该语言的能力及其输入。不过,如果可以在其他地方利用 OPA,就可以分摊这种费用。
  • 相比 Gatekeeper 来说,Kyverno 的第一印象就是没有那么复杂的技术需求。因为它是专门为 Kubernetes 构建的,并且用声明式的方法来表达策略,所以它的心理模型与 Kubernetes 对象的描述和协调方式是相同的。执行策略决策所需的逻辑被从用户的负担中移除,成为工具本身的领域。这种模式导致策略的编写方式得到了极大的简化,全面的降低了策略引擎的使用难度。
  • Kyverno 的编译和生成能力,使它从一个简单的准入控制器转变为一个真正的自动化工具。通过结合这三种能力,再加上最近增加的 API 查询能力,Kyverno 能够执行 Gatekeeper 所不能执行的任务,而且还能够消除可能在整个集群和/或组织中分散使用的其他和不同的工具。这种简单性加上它的自动化能力和对其他工具的整合,为新用户以及有经验的用户和操作者带来了巨大的价值。
  • 根据所介绍的信息,Kyverno 应该是应用 Kubernetes 策略的一个比较自然的选择。但如果用户符合下面两个用例中的一种或两种,就更应该选择 Gatekeeper。
    • 有一种需求和具体意图,使用一致的核心工具将策略应用于组织内不同的系统(即,不仅仅是 Kubernetes)。反对意见:根据经验,无论是在云原生社区内部还是外部,大多数组织目前已经在使用其他工具将策略应用于现有系统。这通常是因为这些系统以及为这些系统实施策略的软件在 Kubernetes 以及 OPA 和 Gatekeeper 之前就已经存在。此外,这些现有工具通常不要求使用编程语言来实现其策略。因此,考虑到现有的知识、运营和资本投资,大多数组织不太可能为了实现工具一致性带来的价值,选择放弃这些工具,转而使用技术负担较重的新工具。如果正在寻找一个跨 Kubernetes 和其他系统使用的单一策略引擎,Kyverno 不适合你。
    • 策略的复杂度很高。反对意见:根据经验,大多数 Kubernetes 用户都没有使用包括 PSP 在内的任何策略支持。而 2020 年对在 AWS 上运行容器化工作负载的客户的调查也得到了类似的结果,只有 49% 的客户使用策略。这些用户中的绝大多数都在做的是重复的策略——例如“容器不应该有特权”或“确保所有命名空间都带有给定的标签”或“验证 Pods 没有使用 hostPath 卷”等。“复杂”这个词是相对的,有点主观,但这样的策略表达方式绝对不复杂。Kyverno 允许以最简单的形式编写策略,这反过来又更容易推理和维护。如果要为一个更复杂、更困难的工具支付额外的价格,就应该尽量物尽其用,否则无法获得价值。如果无需实现高度复杂的策略,Gatekeeper 不会带来好处。

四、结论

  • Gatekeeper 和 Kyverno 项目本身都是有价值、有能力的策略引擎,每个项目都有各自的优缺点。最终,用户应该根据自己的需求和限制条件进行评估并做出最明智的决定,但作为一般建议,所有生产用户都应该计划使用策略引擎来保护集群的安全并简化 Kubernetes 管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1282764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis持久化及常见问题解决

持久化缓存雪崩缓存穿透缓存击穿缓存预热 持久化 Redis的储存形式:一份在内存、一份在磁盘。内存的是最新的;磁盘里的会隔一段时间更新。 Redis持久化方式: RDB:快照方式;将某⼀个时刻的内存数据,以⼆进制的⽅式写⼊…

Hana Studio打开BW失败

Hana Studio打开BW失败 JCo initialization failed with java.lang.UnsatisfiedLinkError: D:\ycy\BW培训\HANA\configuration\org.eclipse.osgi\357\0.cp\lib\sapjco3.dll: Can’t find dependent libraries 这个提示应该是VC版本问题,按如下链接中的地址下载安装…

【头歌实训】分布式文件系统 HDFS

文章目录 第1关:HDFS的基本操作任务描述相关知识HDFS的设计分布式文件系统NameNode与DataNode HDFS的常用命令 编程要求测试说明答案代码 第2关:HDFS-JAVA接口之读取文件任务描述相关知识FileSystem对象FSDataInputStream对象 编程要求测试说明答案代码 …

【开源】基于Vue+SpringBoot的民宿预定管理系统

项目编号: S 058 ,文末获取源码。 \color{red}{项目编号:S058,文末获取源码。} 项目编号:S058,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色…

面试题之分布式事务篇

1.什么是分布式事务? 概述:在分布式系统上一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务节点上,且属于不同的应用,分布式事务需要保证这些小操作要 么全部成功,要么全部失败。 如下所示&…

windows 系统读取 Linux Ext 分区硬盘

windows 系统读取 Linux Ext 分区硬盘 起因是需要处理一些在硬盘中的数据,硬盘插到我的电脑上后无法读盘,在 Windows 存储管理器中查看显示未分配,需要格式化,但是在 Ubuntu 系统的电脑中可以正常识别,试验了几次后发…

从印刷机到数据库:自动化如何提高生产力和改善生活

一文了解从自动化到数据库的前世今生。 作者:Kevin Kline 本文来源:https://www.dbta.com/,爱可生开源社区翻译。 本文约 2200 字,预计阅读需要 8 分钟。 自动化的历史 人类长期以来一直梦想着自动化的前景。我们最早的祖先将其想…

大数据集群增加数据盘,平衡数据盘HDFS Disk Balancer

大数据集群增加数据盘,平衡数据盘HDFS Disk Balancer 官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-hdfs/HDFSDiskbalancer.html hdfs diskbalancer -execute /system/diskbalancer/nodename.plan.jsonhdfs diskbalancer -q…

手把手教你如何搭建SSM框架、图书商城系统案例

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 ✈️已经旅游的地点 | 新疆-乌鲁木齐、新疆-吐鲁番、广东-广州…

[PyTorch][chapter 4][李宏毅深度学习][Gradient Descent]

前言: 目录: 1: 梯度下降原理 2: 常见问题 3: 梯度更新方案 4: 梯度下降限制 一 梯度下降原理 机器学习的目标找到最优的参数,使得Loss 最小 为什么顺着梯度方向loss 就能下降了。主要原理是泰勒公式。 假设损失函数为 忽略二阶导数, 当 …

翻硬币(第四届蓝桥杯省赛C++B组)(java版)

//翻硬币,每次都会改变两个硬币的状态 //因此我们可以从前往后枚举,s1[i] 与 s2[i] 状态不同就改变它的状态 //同时s1[i 1] 与 s2[i 1] 的状态会因此改变 // 所以继续往下枚举s1[i 1] 与 s2[i 1] //因为题目有说必须有解,因此枚举到 n - 1位的时候,两个字符串的…

Linux驱动开发学习笔记3《新字符设备驱动实验》

目录 一、新字符设备驱动原理 1.分配和释放设备号 2.新的字符设备注册方法 (1) 字符设备结构 (2)cdev_init函数 (3) cdev_add函数 (4)cdev_del 函数 二、自动创建设备节点 …

销售员该如何提升自己的语言魅力?

销售员该如何提升自己的语言魅力? 销售员提升自己的语言魅力,需要从多个方面入手,不仅需要提高语言表达能力,还要增强语言感染力,了解客户的需求和心理,以便更好地与客户沟通交流。 首先,销售…

苍穹外卖——地址簿功能

地址簿功能代码 1. 地址簿功能 1.1 需求分析和设计 查询地址列表新增地址修改地址删除地址设置默认地址查询默认地址 1.1.1 接口设计 根据上述原型图先粗粒度设计接口,共包含7个接口。 接口设计: 新增地址查询登录用户所有地址查询默认地址根据id…

ffmpeg编译支持AVS3编解码

libuavs3d ffmpeg的官方源码中已经支持了libuavs3d解码器的接口(libavcodec/libuavs3d.c中定义),因此如果需要编译ffmpeg支持libuavs3d解码器,只需要安装libuavs3d.so以及开启ffmpeg的编译选项即可。 安装libuavs3d解码器 #代码仓…

【flink番外篇】1、flink的23种常用算子介绍及详细示例(2)- keyby、reduce和Aggregations

Flink 系列文章 1、Flink 专栏等系列综合文章链接 文章目录 Flink 系列文章一、Flink的23种算子说明及示例6、KeyBy7、Reduce8、Aggregations 本文主要介绍Flink 的3种常用的operator(keyby、reduce和Aggregations)及以具体可运行示例进行说明. 如果需要…

c题目14:写成一个函数,对数组进行排序

每日小语 一个人倘若需要从思想中得到快乐,那么他的第一个欲望就是学习。——王小波 自己思考 这不前几天刚搞的东西吗,就写成一个函数,这个有什么难的吗?我有时候那个分别心特重啊,真就别人拿到个啥好的比杀了我还难…

赛捷CRM集成无需API开发:连接营销系统,优化电商用户运营和广告策略

赛捷CRM集成无需API开发:连接营销系统,优化电商用户运营和广告策略 在当前的电商热潮下,企业如何在竞争中脱颖而出,提高用户运营效率和广告策略的精准度,成为了关键性的挑战。赛捷CRM以其无需API开发的集成解决方案&a…

如何看待华为宣称“纯鸿蒙”OS将不再兼容安卓应用 APK彻底再见?

如何看待华为宣称“纯鸿蒙”OS将不再兼容安卓应用 APK彻底再见? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「安卓开发资料从专业入门到高级教程工具包」,点个关注,…