☰
Devtron 配置保护(Config Approval)实战指南:为 Deployment Template、ConfigMap 与 Secret 引入审批流
2026/10/14 16:58:37 网站建设 项目流程
  • 云原生
  • DevOps
  • 运维

【免费下载链接】devtron

The only Kubernetes dashboard you need

项目地址:https://gitcode.com/gh_mirrors/dev/devtron
点击查看免费下载

导读

在生产等关键环境中,应用的资源配置(Deployment Template、ConfigMap、Secret)一旦被随意修改,可能直接导致线上事故。Devtron 提供的Protect Configuration(配置保护)功能,允许团队为这些配置文件引入审批流:配置被"保护"后,任何编辑都必须经过保存草稿、提交提案、审批人审核等环节才能生效。本文将基于 Devtron 开源仓库中的官方文档 config-approval.md 完整讲解该功能的启用方式、编辑与审批流程、部署验证,并结合仓库源码揭示其底层实现原理,帮助你为生产环境建立可落地的配置变更管控方案。

配置保护:为什么需要审批流

Devtron 中应用的实际资源是根据你填写的配置生成的。正因为"配置即资源",对生产环境这类关键环境而言,直接修改配置文件存在较高风险,因此有必要引入审批流程来约束这些改动。

在 Devtron 中,这些配置位于应用的App Configuration(应用配置)标签页中。启用保护后,以下三类配置的任何修改都需要经过审批:

  • Deployment Template(部署模板):定义应用的镜像、副本数、探针、资源限制等部署形态;
  • ConfigMaps(配置映射):以键值对形式注入应用的配置;
  • Secrets(敏感信息):存放密码、Token 等敏感数据。

这一约束同时适用于基础配置(Base Configuration)和各环境级配置(Environment-level Configuration)——也就是说,无论你是修改全局基础配置,还是在某个环境(如生产环境)的覆盖配置(Override)中改动,只要该层级被保护,改动都会进入审批流程。

与 Lock Deployment Configuration 的区别:二者容易被混淆,但作用维度不同。"保护配置"是在应用级为 Deployment Template、ConfigMap、Secret 引入审批流,目的是验证编辑;而"锁定部署配置"是在全局级限制非超管用户对部署模板中特定字段(如ingress)的修改或删除。详见仓库文档 lock-deployment-config.md。

修改受保护配置:草稿与提案机制

角色权限前提

在 Devtron 中,只有super-admin(超级管理员)、manager(经理)、admin(管理员)可以编辑配置值。普通用户即便能打开配置页面,也无法直接发起修改。

假设你是应用管理员,希望修改某个环境的部署模板(以环境覆盖 Override 的形式):

  1. 进入应用的App Configuration标签页;
  2. 依次进入Environment Overrides →(选择你的环境)→ Deployment Template;
  3. 将某个键的值改为目标值,完成后点击Save Changes…(保存更改…)按钮。

注意:如果你不是 super-admin,则无法修改部署模板中已被锁定(Locked)的键。锁定功能由超管在全局层面配置,详见 Lock Deployment Configuration。

保存草稿还是提交提案

当配置处于保护状态时,你的修改不会立即发布生效。此时系统会提供两种选择:

选项行为
Save as draft(保存为草稿)将修改保存为草稿。你和其他用户都可以查看、编辑该草稿,并可继续将其提交为审批提案
Save & Propose Changes(保存并提交变更提案)将修改直接提交给配置审批人(Configuration approver)进行审核

如果希望立即进入审批流程,应点击Propose Changes(提交变更)。你还可以在界面上查看当前的审批人(approver)列表。

草稿的约束与丢弃

需要特别留意以下几点:

  • 编辑者不能审批自己的更改:提交变更的用户本人不具备审批资格,必须由另一名用户来审核并批准;
  • 同一时间只能存在一个草稿:系统不允许同时创建多个草稿,因此在再次编辑前需要先处理掉已有草稿;
  • 可随时丢弃草稿:在右上角提供 discard 选项,如果不想继续这次编辑,可以直接丢弃草稿。

从源码实现看,Devtron 为"草稿感知"的配置操作封装了独立服务层DraftAwareConfigService(见 DraftAwareConfigService.go)。该服务组合了ConfigMapService、ChartService与PropertiesConfigService,将 ConfigMap / Secret 的全局与环境级增删改(CMGlobalAddUpdate、CMEnvironmentAddUpdate、CSGlobalAddUpdate、CSEnvironmentDelete等)以及部署模板的UpdateAppOverride、UpdateEnvironmentProperties、ResetEnvironmentProperties统一收口,为"普通直接保存"与"草稿式保存"两种路径提供了可切换的入口。

审批配置:谁能审批、如何审批

审批人资格

只有满足以下条件之一的用户才能批准配置改动:

  • 另一名 super-admin 用户;
  • 不在该草稿编辑者之列、且拥有Configuration approver(配置审批人)权限的用户。

权限校验在源码中有明确体现:在 UserAuthRepository.go 的RolePolicyDetails角色策略结构中,包含一个Approver bool字段,用于标识该角色是否具备审批人身份;同时在 UserService.go 中通过getApproverFromRoleFilter(roleFilter)从角色过滤器解析审批人标记,并将其纳入用户角色/权限的创建与更新逻辑。

审批操作步骤

  1. 打开被编辑的配置文件(即草稿所在的 Deployment Template / ConfigMap / Secret 页面);
  2. 查看改动内容,确认无误后执行批准操作,使修改生效。

如何核查用户是否具备审批权

super-admin 可以通过以下路径核查某用户是否拥有审批权限:

Global Configurations(全局配置)→ Authorization(授权)下拉菜单 → User Permissions(用户权限)

在该页面中可查看用户被授予的角色及其对应的权限范围,包括是否为配置审批人。

使用新配置值部署:先比对、再发布

当审批人审核并批准了你的配置变更后,就可以带着更新后的配置部署应用了:

  1. 进入应用的Build & Deploy(构建与部署)标签页;
  2. 在部署流程中点击Select Image(选择镜像);
  3. 页面底部会显示Config Diff from Last Deployed(与上次部署配置的差异)指示器,点击Review(查看)即可逐项查看本次配置与上次部署配置的差异。

重要提醒:如果新配置尚未被批准,部署时不会展示这些改动,底部将显示No Config Diff from Last Deployed(与上次部署无配置差异)。此时请检查改动是否存在于线上配置(live config)中——如果改动缺失,很可能你的草稿仍处于待审批状态,或者已被拒绝/丢弃。

  1. 确认差异无误后,点击Deploy(部署)即可使用新配置完成发布。

如果本次不希望携带新配置一起部署,可以从下拉菜单中选择Last deployed config(上次部署的配置),按旧配置执行部署。

Config Diff比对能力在仓库中由独立模块支撑:位于 pkg/config/configDiff/DeploymentConfigurationService.go 的DeploymentConfigurationService接口提供了CompareCategoryWiseConfigData等方法,用于按类别(部署模板、ConfigMap、Secret 等)对比当前配置与历史/已部署配置之间的差异,为部署前的 Review 提供数据基础。

启用/禁用配置保护

权限要求

只有super-admin可以启用或禁用配置保护。

操作步骤

  1. 进入应用的App Configuration标签页;
  2. 点击Protect Configuration(保护配置);
  3. 通过开关(Toggle)为所选配置(基础配置或环境级配置)启用保护,启用后该配置旁会出现保护徽标(protection badge)。

禁用保护的影响

需要注意:取消保护(unprotect)会导致尚未批准的草稿被丢弃。因此,如果当前存在待审批的草稿,关闭保护前请确认这些改动是否还需要保留,避免变更内容意外丢失。

小结:生产环境配置变更的标准流程

综合以上内容,在 Devtron 中为关键环境建立配置管控的完整链路是:

  1. 由super-admin在应用的 App Configuration 中为 Deployment Template、ConfigMap、Secret(基础级/环境级)启用 Protect Configuration;
  2. 具备编辑权限的用户(super-admin / manager / admin)修改配置,选择保存为草稿或提交变更提案;
  3. 非编辑者的 super-admin 或配置审批人审核改动并批准;
  4. 部署时通过Config Diff from Last Deployed复核配置差异,再执行 Deploy;
  5. 若配置不再需要管控,由 super-admin 关闭保护,同时注意未批准草稿会被自动丢弃。

该流程将"编辑"与"发布"解耦,配合源码层面对审批人角色的显式建模(Approver字段)与草稿感知服务层(DraftAwareConfigService)的封装,为团队在 Devtron 上构建安全、可审计的生产配置变更闭环提供了完整支撑。如需进一步了解部署模板字段级锁定与"保护配置"的差异,可继续阅读 Lock Deployment Configuration。

  • 云原生
  • DevOps
  • 运维

【免费下载链接】devtron

The only Kubernetes dashboard you need

项目地址:https://gitcode.com/gh_mirrors/dev/devtron
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询