跳到主要内容

Provider Action Execution(实验性)

实验性。 此功能带有门控,默认禁用,正在积极开发中。 关于设计和安全性依据,请参见 ADR 0007

routerd 可以通过 executor plugin 执行经审批的云提供商变更(例如:为 选择性地址移动性分配 secondary IP)。routerd 不持有云凭据。

展示 actionPlans 作为不活跃提案保存、导入到 action journal、通过策略门控审批、由持有凭据的 executor plugin 执行的 Provider action execution 示意图

凭据模型

  • 持有凭据的是 executor plugin,而非 routerd。 executor(capability execute.providerAction)在自己的进程中运行,通过云原生 identity(AWS instance profile、Azure managed identity、OCI instance principal) 或自身环境进行认证。
  • routerd 核心不持有、读取或传递提供商凭据。 routerd 仅向 executor 传递已审批的 action plan(不含密钥)和经过允许列表化、 脱敏处理的 plugin 上下文。
  • action_executions journal 仅记录计划及其结果,不包含任何密钥。

ProviderActionPolicy

apiVersion: hybrid.routerd.net/v1alpha1kind: ProviderActionPolicy。零值为 安全的锁定状态。执行禁用,仅 dry-run,需要审批,无允许列表。

字段类型默认值含义
enabledboolfalsetrue 时执行被禁用。
dryRunOnlybool (pointer)省略时 true仅允许 dry-run。拒绝实际变更。
requireApprovalbool (pointer)省略时 true执行前需要运维人员审批。
allowedProviderslist空 = 无允许的提供商:awsazureocigcp
allowedProviderRefslist空 = 不限制限制为指定的 CloudProviderProfile ref。
allowedActionslist空 = 无规范动词:assign-secondary-ipunassign-secondary-ipensure-forwarding-enabledensure-forwarding-disabled
allowedCIDRslist空 = 不限制action 的目标地址必须在某个 CIDR 范围内。
maxActionsPerRunint0 = 无 action每次执行的 action 上限。设置正值以允许。
allowUndoboolfalse允许尽力回滚。
executionWindowstring空 = 无窗口可选的时间窗口。宽松验证。

示例(除单个允许列表化的 action 外全部锁定):

apiVersion: hybrid.routerd.net/v1alpha1
kind: ProviderActionPolicy
metadata:
name: sam-execution
spec:
enabled: true
dryRunOnly: false
requireApproval: true
allowedProviders: [aws]
allowedActions: [assign-secondary-ip, unassign-secondary-ip]
allowedCIDRs: [10.88.60.0/24]
maxActionsPerRun: 4
allowUndo: true

action 生命周期

planner plugin 提议的 action plan 被导入到 journal 中,经历以下状态转换。

pending -> approved -> succeeded
-> failed
-> skipped
(succeeded) -> rolledBack
  • pending — 从 actionPlan 导入,以 idempotencyKey 为键,等待审批。
  • approved — 运维人员已审批,或策略自动审批 (当 requireApproval: falseenabled 且非 dryRunOnly 时)。
  • succeeded / failed / skipped — executor 报告的结果。skipped 表示已 succeeded 的 idempotencyKey 的重复,或策略拒绝的 action。
  • rolledBack — 对先前 succeeded 的 action 应用尽力 undo (仅在 allowUndo 为 true 时)。

导入是幂等的。重新导入相同的 idempotencyKey 不会创建第二行,因此已 succeeded 的 action 不会被执行两次。

routerctl action 命令

当前面向运维人员的接口有意采用 journal 导向。先导入或审批 action,仅执行通过策略 的已审批条目。

命令用途
routerctl action list列出 journal 条目(按状态/提供商过滤)。
routerctl action show ID显示单个 journal 条目。
routerctl action approve ID运维人员审批:从 pending 变为 approved
routerctl action execute --dry-run验证和预览。无变更。
routerctl action execute --approved执行策略允许的已审批 action。
routerctl action journal输出执行 journal / 审计跟踪。
routerctl action rollback ID --dry-run尽力 undo 的预览(无变更)。

dry-run vs 执行

  • dry-run 是默认行为,是 dryRunOnly 为 true(或 enabled 为 false)期间 唯一允许的路径。它验证计划、检查策略并预览效果,但不进行任何提供商变更。
  • 执行 通过 executor 进行实际变更,仅在所有硬安全停止条件满足时才执行: enabled、非 dryRunOnly、已审批(或策略自动审批)、允许列表匹配、 在 maxActionsPerRun 以内。

关于硬安全停止条件的完整列表,请参见 ADR 0007