资讯动态

OpenZiti 2.0 指标与配置变更完全指南:从 1.6.8 升级的迁移手册

发布时间:2026/10/6 7:49:21 来源:尧图企业网站定制
零信任网络后端认证鉴权【免费下载链接】zitiThe parent project for OpenZiti. Here you will find the executables for a fully zero-trust, programmable network OpenZiti项目地址https://gitcode.com/gh_mirrors/zi/ziti点击查看免费下载导读本文以 OpenZiti 仓库中的 doc/2.0-metrics-and-config-changes.md 为骨架系统梳理从 OpenZiti v1.6.8 升级到 v2.0 时所有涉及监控指标、配置项增删、默认值调整、配置解析修复与CLI 行为变化的破坏性与非破坏性变更。读者将获得一份可直接对照自己 controller/router 配置文件的迁移清单并能理解每一项新指标背后的源码实现与运维含义。文中所有结论均可在当前仓库源码与配置文件中验证。阅读前提什么是 Beta Feature在讨论 2.0 的变更之前先明确文档中的一个基础定义因为其中多处新能力被标记为 BetaBeta Feature —— 仍处于开发中的特性未来可能变化。它以发布形态可用虽然可能性很小但存在被移除的可能。因此本文涉及到的ctrl.dialer、ctrl.listeners、alert事件等 Beta 特性适合在测试与试点环境先行验证不建议在正式生产拓扑中依赖其长期稳定性。一、新增指标New Metrics2.0 在 controller 与 router 两侧新增了一大批指标全部接入既有 metrics registry。下文按功能域分组说明。1. Raft 自适应限流器ControllerRaft 分布式日志的命令提交现在由自适应窗口限流器控制新增三项指标MetricType含义raft.rate_limiter.queue_sizeGauge当前排队/在途的操作数raft.rate_limiter.window_sizeGauge当前自适应窗口大小raft.rate_limiter.work_timerTimer受限流操作的执行耗时这些指标名与源码中的常量一一对应见 controller/config/config.goRaftRateLimiterQueueSizeMetricName raft.rate_limiter.queue_size RaftRateLimiterWorkTimerMetricName raft.rate_limiter.work_timer RaftRateLimiterWindowSizeMetricName raft.rate_limiter.window_size命名空间的重大变化此前 raft 路径与普通非 raft命令分发器共用command.limiter.*命名空间升级后 raft 路径独立到raft.rate_limiter.*而普通命令路径继续使用command.limiter.queued_count和command.limiter.work_timer。升级后做监控告警时务必同时调整这两组指标的采集与看板配置避免仪表盘数据缺失。从实现看raft 限流采用AdaptiveRateLimitTracker见 controller/command/rate_limiter.go它不直接执行工作而是跟踪在途工作并根据成功率直方图动态调整窗口raftOperation, err : self.raftRateLimiter.RunRateLimited(raft operation)controller/raft/raft.go。后台 goroutine 每 30 秒清理一次超过timeout未完成的工作将其视为 backoffcleanExpiredcontroller/command/rate_limiter.go因此queue_size不会因在途任务丢失而卡死。2. 后台命令处理Controller当command.background开启默认true时暴露 5 项新指标MetricType含义command.background.queue_sizeGauge排队中的后台任务数command.background.worker_countGauge工作 goroutine 数量command.background.busy_workersGauge正在处理任务的工作者数量command.background.work_timerTimer后台任务执行耗时command.background.dropped_entriesMeter队列满时被丢弃的更新数仅当dropWhenFull开启时产生后台队列承载的是与认证相关的模型更新identity 环境信息、system authenticator 更新等将这些更新异步化能降低认证路径上的同步阻塞。queue_size与busy_workers是判断后台处理是否积压的关键观测点若dropped_entries持续增长说明队列容量不足以承载写入峰值需要评估调大queueSize或检查上游更新频率。3. 控制器发起的控制通道拨号ControllerBeta在ctrl.dialer启用时暴露ctrl_channel.dialer.*前缀下的 4 项指标MetricType含义ctrl_channel.dialer.queue_sizeGauge队列中待处理的拨号任务数ctrl_channel.dialer.worker_countGauge拨号工作 goroutine 数量ctrl_channel.dialer.busy_workersGauge正在执行拨号的工作者数量ctrl_channel.dialer.work_timerTimer每次拨号尝试的耗时4. 控制通道监听器池RouterBeta当 router 配置了控制通道监听器时暴露pool.listener.ctrl.*前缀下的 4 项指标MetricType含义pool.listener.ctrl.queue_sizeGaugectrl 监听器池的队列深度pool.listener.ctrl.worker_countGauge当前工作者数量pool.listener.ctrl.busy_workersGauge正在处理连接的工作者数量pool.listener.ctrl.work_timerTimerctrl 监听器连接操作的耗时这组指标的通用生成逻辑在 common/servermetrics/pool_metrics.goGoroutinesPoolMetricsConfigF为 goroutine 池统一注册queue_size、worker_count、busy_workers三个 FuncGauge并挂载work_timerTimer 回调。也就是说凡是基于 foundation goroutine 池构建的组件ctrl 监听器池、后台命令池等都会遵循这一套指标契约运维侧可以复用同一套采集模板。5. 电路与链路故障计数Router新增两个 Meter 指标替代原先仅输出 warn 级别日志的故障上报MetricType含义faults.circuitMeter电路circuit转发故障faults.linkMeter无效链路link故障从 warn 日志变成可计数的 Meter 指标意味着故障可以进入监控系统做趋势分析、告警与容量评估而不是依赖翻阅日志。相关实现位于 router/forwarder/faulter.go。6. 撤销强制器Controller新增两项指标服务于周期性的撤销记录清理流程MetricType含义revocation.enforcer.runTimer每轮撤销强制执行所需时长revocation.enforcer.deleteMeter每轮清理掉的过期撤销记录条数源码中这两项指标在 controller/internal/policy/revocation_enforcer.go 定义执行后以runTimer.UpdateSince(startTime)记录耗时、以deleteMeter.Mark(int64(total))记录删除量。delete的斜率可以直观反映撤销记录积压情况若与edge.oidc.revocationMaxQueued触顶相关需要综合评估撤销批量冲刷节奏。二、移除的事件Removed EventsTerminator 创建/更新/删除事件created、updated、deleted三类 terminator 事件被移除。它们已被entity change 事件取代——该事件体系自 v0.28.0 引入且同样覆盖 terminator 的创建/更新/删除。升级影响任何依赖 terminator 事件流做业务联动如库存同步、审计、自动化清理的下游消费者必须迁移到 entity change 事件订阅并在迁移期间比对事件字段结构差异entity change 事件是通用实体变更模型字段命名与专用 terminator 事件不同。三、新增配置New Configuration1. Controller集群限流器cluster.rateLimiter控制向 Raft 集群提交命令的节奏采用自适应窗口cluster: applyTimeout: 5s rateLimiter: enabled: true # default: true minSize: 5 # default: 5, minimum: 1 maxSize: 250 # default: 250 timeout: 30s # default: 30s restartSelfOnSnapshot: false # default: false preferredLeader: false # default: false参数说明applyTimeout—— Raft 日志应用超时默认5srateLimiter.enabled—— 开启 Raft 命令提交的自适应限流默认truerateLimiter.minSize—— 在途 Raft 操作的最小并发数默认5最小1rateLimiter.maxSize—— 在途 Raft 操作的最大并发数默认250rateLimiter.timeout—— 在此时间内未完成标记的工作视为失败默认30srestartSelfOnSnapshot—— 恢复快照后自动重启 controller默认falsepreferredLeader—— 将本 controller 标记为首选 Raft 领导者默认false配置加载与校验逻辑在 controller/command/rate_limiter.gominSize必须 ≥ 1 且 ≤maxSizetimeout必须是可解析的 duration。注意queue通道的容量取MaxSize即窗口上限同时决定物理排队容量。2. Controller后台命令处理command.background允许与认证相关的模型更新identity 环境信息、system authenticator 更新异步进入后台队列处理command: background: enabled: true # default: true queueSize: 1000 # default: 1000 dropWhenFull: false # default: false delayThreshold: 50ms # default: 50ms rateLimiter: enabled: true maxQueued: 25background.enabled—— 开启后台处理默认truebackground.queueSize—— 最大队列容量默认1000background.dropWhenFull—— 队列满时丢弃更新而不是阻塞默认falsebackground.delayThreshold—— 更新耗时超过该阈值后开始转入后台处理默认50ms注意commandRateLimiter段现在也可以写在command下作为rateLimiter。若两处同时配置command下的设置优先独立的commandRateLimiter段未来可能被废弃建议逐步迁移到新位置。在源码层面command.background的解析位于 controller/config/config.go其中queueSize有明确的最小/最大值校验BackgroundQueueMinSize/BackgroundQueueMaxSizedelayThreshold需要按 duration 解析——配置格式错误会导致启动失败而非静默忽略。3. Controller连接事件池connectEventsidentity 的连接/断开事件改为每 router 单 worker 的 goroutine 池取代此前每 router 一个 goroutine 的模型该模型在重连时会泄漏 goroutine。每 router 单 worker 的设计保证同一 router 的事件永远按 FIFO 顺序处理避免乱序处理导致状态不一致connectEvents: queueSize: 5 # default: 5 idleTime: 30s # default: 30s注意minWorkers与maxWorkers两项设置已被移除。出于正确性考虑每个 router 的池固定为 1 个 worker——这正是文档中「单 worker 保序」设计原则的直接体现升级配置时请删除这两个字段否则它们会被静默忽略。4. ControllerOIDC 自动绑定退出edge.api.disableOidcAutoBinding现在 controller 会自动把edge-oidc绑定到任何托管edge-client的 web listener 上。若需关闭该行为edge: api: disableOidcAutoBinding: true # default: false重要影响当 OIDC 未启用时客户端回退到 legacy 认证方式而 legacy 认证不支持 HA。因此在 HA 集群中若要启用该开关必须确保 OIDC 链路可用否则认证能力会与 HA 目标冲突。5. ControllerOIDC 撤销调优edge.oidc控制 JWT token 撤销的批量处理与清理KeyDefault含义revocationMinTokenLifetime未设置若旧 token 在此时长内自然过期则跳过撤销revocationBucketInterval1m批量撤销的分桶窗口之后通过 raft 冲刷revocationBucketMaxSize200每个 raft entry 的最大撤销条数revocationMaxQueued25000内存中排队撤销的最大数量超过则丢弃revocationEnforcerFrequency1m过期撤销记录的清理频率仅 leader 生效这组参数与前述revocation.enforcer.*指标直接联动revocationEnforcerFrequency决定执行周期revocationBucketMaxSize/revocationMaxQueued决定吞吐与积压边界。若revocation.enforcer.delete的速率长期为 0说明撤销记录没有进入强制清理路径需检查是否所有 controller 都在正确的 raft 角色上。6. Controller控制器发起的控制通道拨号ctrl.dialerBeta允许 controller 主动向 router 发起拨号以建立控制通道适用于部分 controller 位于 router 无法触达的防火墙之后的部署ctrl: dialer: enabled: false # default: false groups: [default] # default: [default] dialDelay: 30s # default: 30s minRetryInterval: 1s # default: 1s maxRetryInterval: 5m # default: 5m retryBackoffFactor: 1.5 # default: 1.5 fastFailureWindow: 5s # default: 5s queueSize: 32 # default: 32 maxWorkers: 10 # default: 10enabled—— 是否启用拨号器默认falsegroups—— 拨号目标 router 组默认[default]dialDelay—— 拨号前的初始延迟默认30sminRetryInterval/maxRetryInterval—— 重试间隔的下限与上限retryBackoffFactor—— 重试退避的倍增因子fastFailureWindow—— 快速失败判定窗口queueSize—— 拨号任务队列容量maxWorkers—— 最大拨号工作 goroutine 数启用后请监控ctrl_channel.dialer.*四件套指标见前文新指标第 3 节确认拨号吞吐与失败节奏。7. ControllerAzure Service Bus 事件接收器新增servicebus事件 handler 类型可将 controller 事件流式投递到 Azure Service Busevents: serviceBusLogger: subscriptions: - type: circuit - type: session handler: type: servicebus format: json connectionString: Endpointsb://... topic: ziti-events # or queue: ziti-events-queue bufferSize: 100 # default: 50要点订阅类型沿用既有事件类型示例订阅了circuit与session输出格式为json目标是 topic 或 queue二选一示例注释给出 queue 写法bufferSize默认50示例调至100——事件量较大时建议显式调大降低阻塞概率。8. ControllerAlert 事件Beta新增alert事件订阅类型用于向网络运维人员暴露运营问题events: myLogger: subscriptions: - type: alert配合既有 file/amqp 等 handler 即可将 alert 事件落盘或转发。作为 Beta 特性alert 事件的具体字段与语义可能在后续版本调整。9. Router控制通道监听器ctrl.listenersBeta允许 router 接受来自 controller 的入站控制通道连接与 controller 侧ctrl.dialer呼应一端拨号、一端监听ctrl: listeners: - bind: tls://0.0.0.0:6262 advertise: tls://router.example.com:6262 groups: - defaultbind—— 本地监听地址TLS 端口示例 6262advertise—— 对外公布地址供 controller 拨号使用请填可达的域名/IPgroups—— 归属的 router 组与 controllerctrl.dialer.groups对应启用后配合pool.listener.ctrl.*指标观察监听器池的健康度见前文新指标第 4 节。10. 限流器算法调优参数TLS 握手、raft 命令、router ctrl 通道三处rateLimiter段均可配置以下 5 个新参数。算法核心从「原始队列位置」改为「成功率指标」驱动窗口自适应KeyDefault含义successThreshold0.9成功率高于此值则窗口增长低于则收缩increaseFactor1.02窗口增长乘数必须 1decreaseFactor0.9窗口收缩乘数必须介于 0 与 1 之间increaseCheckInterval10每 N 次成功检查一次窗口增长decreaseCheckInterval10每 N 次退避检查一次窗口收缩这些参数在 controller/command/rate_limiter.go 的AdaptiveRateLimitTrackerConfig中有严格校验successThreshold必须在 0~1 之间increaseFactor必须 ≥ 1源码注释建议通常小于 2decreaseFactor必须在 (0,1) 开区间两个 check interval 都必须 ≥ 1。合法值校验失败会直接报错避免静默带入非法参数。窗口调整逻辑见success()与backoff()controller/command/rate_limiter.go窗口增长/收缩都基于指数衰减直方图统计的成功率均值。四、移除的配置Removed Configuration1. ControllerrouterDataModel.enabledrouter 数据模型router data model现已始终启用enabled字段被删除。已有配置文件中残留的routerDataModel.enabled会被直接忽略不会导致启动失败但建议清理以免误导后人。2. Controllernetwork.enableLegacyLinkMgmtRouter 管理链路v0.30.0 引入已成为唯一选项。enableLegacyLinkMgmt字段以及 controller 侧的 legacy 链路管理代码被整体移除。升级前若配置了该字段升级后它不再有任何效果。3. Routerctrl.haHA 已成为 router 侧的常驻行为ctrl.ha配置键被删除。五、默认值变更Changed Defaults1. Controllertls.rateLimiter.maxSizeTLS 握手限流器的默认最大窗口从1000提升到2500。注意限流器本身默认仍处于禁用状态该默认值变更只影响启用后的行为。如果此前针对 1000 做过容量规划启用时请按新默认重新评估。2. ControllerrouterDataModel.logSize最小值routerDataModel.logSize现在强制最小值为10。低于10的配置会在启动时报配置错误config error而不是静默接受——升级后若该字段设过小于 10 的值启动日志会直接暴露问题。六、配置解析 Bug 修复Configuration Bug Fixes2.0 修复了若干可能导致配置被静默忽略或被写入错误字段的解析缺陷。文档明确要求如果你配置过下列任一设置升级后必须验证其是否真正生效。Issue 编号修复内容#3620controllerctrl.heartbeats配置此前嵌套在ctrl.options解析中导致在正确层级被忽略#3619routerconnectEvents.fullSyncInterval此前误用 batch interval 的 min/max 校验#3618routerinterfaceDiscovery.minReportInterval此前被错误设置为checkInterval的值#3756TLS 限流器timeout从错误的配置作用域读取被静默忽略#3755commandHandler配置从顶层作用域读取而非cluster段#3753SPIFFE trust domain 前缀检查中HasPrefix的两个实参顺序颠倒OIDC 时长idTokenDuration与refreshTokenDuration此前都被赋值给accessTokenDuration其中「OIDC 时长」一项是典型的字段错位 bug两个独立配置项被同时写入了 access token 时长字段导致 refresh/id token 时长永远取不到自己配置的值。升级后请重点核验这些场景controller 配置中ctrl.heartbeats、TLS 限流器timeout、cluster段下的commandHandler是否按预期生效router 配置中connectEvents.fullSyncInterval、interfaceDiscovery.minReportInterval是否呈现配置值OIDC 三个 token 时长是否各自独立生效尤其是设置了 refresh token 时长的场景启用了 SPIFFE trust domain 的部署确认前缀匹配方向正确。七、CLI 变更CLI Changesziti edge quickstart现在始终以 HA 模式运行。ha子命令被移除添加集群成员请使用ziti edge quickstart join。已有非 HA quickstart 实例必须重建无法原地升级。ziti create config controller的--clustered标志被移除生成的配置始终为集群就绪cluster-ready。ziti edge create identity type子命令device、service、user被移除请直接使用ziti edge create identity。这三项变更共同指向 2.0 的 HA 主线配置生成默认集群化、quickstart 强制 HA、身份类型收敛。脚本与自动化流程中凡是依赖旧命令形态的都需要同步改写。八、升级迁移自查清单综合上述变更从 1.6.8 升级到 2.0 时建议按以下清单逐项核对监控侧把raft.rate_limiter.*与command.limiter.*从同一命名空间拆开新增采集command.background.*、ctrl_channel.dialer.*如启用 dialer、pool.listener.ctrl.*如启用 listeners、faults.circuit、faults.link、revocation.enforcer.*移除 terminator 专用事件订阅并切换到 entity change 事件。controller 配置确认cluster.rateLimiter、command.background、connectEvents删除minWorkers/maxWorkers、edge.api.disableOidcAutoBinding默认关闭启用需评估 legacy 认证与 HA 的冲突、edge.oidc撤销调优、ctrl.dialerBeta、servicebus/alert 事件订阅等新段删除routerDataModel.enabled、network.enableLegacyLinkMgmt核对tls.rateLimiter.maxSize新默认与routerDataModel.logSize最小值约束。router 配置删除ctrl.ha按需新增ctrl.listenersBeta并确认ctrl.dialer.groups与其匹配。CLI/脚本将 quickstart 流程迁移到 HA 模式必要时重建实例移除--clustered改用统一的ziti edge create identity。回验对照 第六节 的 bug 清单用ziti或管理 API 确认各项设置真正生效尤其是 OIDC token 时长与各限流器参数。本清单与本文所有配置片段均可在仓库的 etc 示例配置、controller/config/config.go 与 router/env/config.go 中对照验证指标的注册与暴露逻辑可进一步查看 controller/command/rate_limiter.go、common/servermetrics/pool_metrics.go 与 controller/internal/policy/revocation_enforcer.go。赞分享零信任网络后端认证鉴权【免费下载链接】zitiThe parent project for OpenZiti. Here you will find the executables for a fully zero-trust, programmable network OpenZiti项目地址https://gitcode.com/gh_mirrors/zi/ziti点击查看免费下载相关推荐Browserless 2.0 迁移指南从 1.x 升级的完整配置、API 与 Docker 变化手册Browserless 2.0 迁移指南从 1.x 升级的完整配置、API 与 Docker 变化手册 本篇技术指南以浏览器自动化平台 Browserless后端API网关WXT 升级完全指南从 v0.1 到 v0.21 的破坏性变更迁移手册WXT 升级完全指南从 v0.1 到 v0.21 的破坏性变更迁移手册 WXT⚡ Next gen Web Extension Framework是一个基前端开发工具构建工具插件系统Crawlee v3 升级完全指南从 Apify SDK v2 迁移的破坏性变更与实战迁移手册Crawlee v3 升级完全指南从 Apify SDK v2 迁移的破坏性变更与实战迁移手册 Crawlee v3 是 Apify SDK v2 的精神继后端网页爬虫上一篇Effect 4 函数式光学Optics实战指南基于统一 Optional 模型的 Iso / Lens / Prism / Optional / Traversal 组合与 Schema 集成下一篇3步搞定Chrome书签混乱Neat Bookmarks树形管理终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑