K8s 配置检查工具(K8s Configuration Check Tool)

ops/2025/1/12 5:15:38/

K8s 配置检查工具

最流行的 Kubernetes 配置检查工具分类及示例

基础设施即代码(IaC)的一个好处是,可以在将提议的期望状态规范应用到实时系统之前对其进行验证。Kubernetes 配置也是如此。

说到准入控制,当然 验证准入控制[1] 可以使用 Kyverno[2](5800 GitHub 星标)、Polaris[3](3200 星标)和 OPA Gatekeeper[4](3700 星标)等工具来审查 Kubernetes 资源。这些工具通常也有 在集群外应用的方式[5]。Kubernetes 基于 CEL[6] 的 验证准入策略[7] 仍然 相对较新[8],因此尚不清楚有多少用户能够通过该机制满足其所有策略需求,但 Kyverno 已经通过 生成验证准入策略[9] 进行了适应。

有一些工具可以扫描集群的实时状态,例如 popeye[10](5300 GitHub 星标)和 clusterlint[11](500 星标)。这些不是本文的重点。

模式验证

最推荐的工具是 kubeconform[12](2300 GitHub 星标),它被 kubeval 的 README[13] 推荐。它使用 Kubernetes 发布的 OpenAPI 规范 执行资源模式验证。这是在 YAML 语法检查之后最基本的检查类型——检查资源类型和属性是否存在。它可以捕获拼写错误和 YAML 缩进错误,但在 LLM 幻觉时代更加有用。也可以在 IDE 中进行 这种验证[14],但在使用 Helm 或 Kustomize 等工具生成配置后运行模式验证也很有帮助。kubectl validate 也执行模式验证,但没有人提到使用它。

自定义策略

实现自定义策略的工具支持指定属性值约束的方式。例如,要指定工作负载控制器 不能在[15] default 命名空间中运行,可以创建一个包含以下内容的策略定义:

spec:validationFailureAction: auditbackground: truerules:- name: validate-podcontroller-namespacematch:any:- resources:kinds:- DaemonSet- Deployment- Job- StatefulSetvalidate:message: "使用 'default' 命名空间不允许用于 Pod 控制器。"pattern:metadata:namespace: "!default"

除了 Kyverno 和 Polaris,另一个经常提到的工具是 Checkov[16](7100 GitHub 星标)。与其他工具不同,Checkov 不是 Kubernetes 专用工具,但它确实有 许多 Kubernetes 专用检查[17],并且与 Kustomize 和 Helm 集成。

有趣的是,这三种工具都支持用 YAML 和/或 JSON 编写策略,而不是更复杂的语言。以下是 Checkov 中基于 YAML 的策略 示例:

metadata:id: "CKV2_K8S_1"name: "RoleBinding 不应允许将权限提升到其他 RoleBinding 上的 ServiceAccount 或 Node"category: "KUBERNETES"
definition:and:- cond_type: filtervalue:- ClusterRoleBinding- RoleBindingoperator: withinattribute: kind- or:- cond_type: connection  # 过滤与 ClusterRole 连接的 ClusterRoleBindingoperator: not_existsresource_types:- ClusterRoleBinding- RoleBindingconnected_resource_types:- ClusterRole- Role- cond_type: attributeattribute: 'subjects.*.kind'operator: not_withinvalue:- 'Node'- 'ServiceAccount'resource_types:- ClusterRoleBinding- RoleBinding- and:- cond_type: connection  # 过滤与 ClusterRole 连接的 ClusterRoleBindingoperator: existsresource_types:- ClusterRoleBinding- RoleBindingconnected_resource_types:- ClusterRole- Role- or:- cond_type: attributeattribute: rules.resourcesoperator: not_intersectsvalue:- 'clusterrolebindings'- 'rolebindings'- '*'resource_types:- ClusterRole- Role- cond_type: attributeattribute: rules.verbsoperator: not_intersectsvalue:- 'bind'- '*'resource_types:- ClusterRole- Role

其他一些通用的 策略即代码[18] 工具可以用于在 Kubernetes 中实施策略执行,包括:

  • Trivy[19](23700 GitHub 星标)

  • Conftest[20](2900 GitHub 星标)

  • OpenRewrite[21](2200 GitHub 星标)

OpenRewrite 是一个大规模重构工具。Trivy 和 Conftest 都使用 Rego[22] 来表达策略,有些人觉得使用起来有挑战。这是 用 Rego 编写的策略 的摘录:

deny[explanation] {input.request.kind.kind == "Service"input.request.operation == "CREATE"loadbalancer.is_external_lbnamespace := input.request.namespacename := input.request.object.metadata.namenot whitelisted[{"name": name, "namespace": namespace}]explanation = sprintf("Service %v/%v 是一个外部负载均衡器,但未被列入白名单", [namespace, name])
}

最佳实践

自定义策略工具还检查许多最佳实践(安全性、可靠性、效率等),但有些工具更专注于这一点。KubeLinter[23](3000 GitHub 星标)是这类工具中最常被提到的。它生成的输出如下所示:

pod.yaml: (对象: <无命名空间>/security-context-demo /v1, Kind=Pod) 容器 "sec-ctx-demo" 没有只读根文件系统(检查: no-read-only-root-fs, 修复: 在容器的 securityContext 中将 readOnlyRootFilesystem 设置为 true。)

kube-score[24](2800 星标)也被提到。

仪表板

除了像 KubeLinter 和 kube-score 这样的 CLI 工具外,一些用户提到他们特别使用仪表板,尽管是与可以在 CI/CD 和/或准入控制中执行策略的工具结合使用。

  • Polaris 包括一个 仪表板[25],用于汇总结果。

  • Kubescape[26](10200 GitHub 星标)包括一个 Lens 扩展[27]。

  • Monokle[28](1800 GitHub 星标)和 Kubevious[29](1600 星标)是以仪表板为中心的工具,包括检查和策略执行。

特殊用途

一些用户提到使用一些特定用途的检查工具:

  • Pluto[30]:检查是否使用了已弃用的 apiVersions

  • istioctl[31] 用于验证 Istio 配置

  • helm lint[32] 用于检查 Helm 图表

  • argo lint[33] 用于验证 Argo 工作流


http://www.ppmy.cn/ops/149357.html

相关文章

Chrome_60.0.3112.113_x64 单文件版 下载

单文件&#xff0c;免安装&#xff0c;直接用~ Google Chrome, 免費下載. Google Chrome 60.0.3112.113: Chrome 是 Google 開發的網路瀏覽器。它的特點是速度快,功能多。 下载地址: https://blog.s3.sh.cn/thread-150-1-1.htmlhttps://blog.s3.sh.cn/thread-150-1-1.html

决策树中的相关概念

目录 算法介绍 基本概念&#xff1a; 节点 信息熵&#xff08;Information Entropy&#xff09; 条件熵&#xff08;Conditional Entropy&#xff09; python中计算对数 分类标准 信息增益&#xff08;ID3&#xff08;Iterative Dichotomiser 3&#xff09;算法的评估标…

MySQL 5.7 全解析:从新手小白到进阶高手

一、MySQL 5.7 入门指南 MySQL 是一款广受欢迎的开源关系型数据库管理系统&#xff0c;由 Oracle 公司维护并开发。MySQL 5.7 版本在性能、功能和稳定性方面都有显著提升&#xff0c;为用户提供了高效可靠的数据存储与管理解决方案。无论是小型项目的快速开发&#xff0c;还是…

sql server cdc漏扫数据

SQL Server的CDC指的是“变更数据捕获”&#xff08;Change Data Capture&#xff09;。这是SQL Server数据库提供的一项功能&#xff0c;能够跟踪并记录对数据库表中数据所做的更改。这些更改包括插入、更新和删除操作。CDC可以捕获这些变更的详细信息&#xff0c;并使这些信息…

基于人脸识别和 MySQL 的考勤管理系统实现

在现代企业和机构中&#xff0c;考勤管理系统是日常运营中不可或缺的一部分。传统的考勤方式&#xff08;如打卡、指纹识别等&#xff09;有时会因为各种原因导致管理效率低下或员工作弊。然而&#xff0c;随着人脸识别技术的飞速发展&#xff0c;基于人脸识别的考勤管理系统正…

mac使用 —— win转mac的记录

文件管理 mac沿用了unix的文件树设计&#xff0c;每个文件都有其父文件&#xff0c;最终父文件为根目录。 mac的应用以资源库的方式管理文件&#xff0c;资源库本质也是一个文件夹 常用命令&#xff1a; cd dirname: ~当前用户根目录, ..退回 pwd:当前路径&#xff0c;ls目…

微信小程序获取图片使用session(上篇)

概述&#xff1a; 我们开发微信小程序&#xff0c;从后台获取图片现实的时候&#xff0c;通常采用http get的方式&#xff0c;例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…

ZYNQ初识10(zynq_7010)UART通信实验

基于bi站正点原子讲解视频&#xff1a; 系统框图&#xff08;基于串口的数据回环&#xff09;如下&#xff1a; 以下&#xff0c;是串口接收端的波形图&#xff0c;系统时钟和波特率时钟不同&#xff0c;为异步时钟&#xff0c;&#xff0c;需要先延时两拍&#xff0c;将时钟同…