news 2026/10/5 6:43:09

OpenZiti 0.27 系列版本解读:CLI 重构、认证策略管理、事件流式传输与运维能力升级

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenZiti 0.27 系列版本解读:CLI 重构、认证策略管理、事件流式传输与运维能力升级
  • 零信任
  • 网络
  • 后端
  • 认证鉴权

【免费下载链接】ziti

The 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 项目 CHANGELOG.0.27.md 为主线,梳理 v0.27.0 → v0.27.9 十个补丁版本的核心变更,并结合本仓库源码(ziti/cmd下的 CLI 实现)逐项验证关键命令与底层原理。读完本文,你将掌握 0.27 系列引入的ziti edge auth-policy/ext-jwt-signerCLI、ziti fabric stream events统一事件流、ziti ops db compact数据库压缩、路由器禁用/重注册(re-enroll)、以及 transit-router 通过 CLI 注册等运维能力,并能对照源码定位到每个功能的实现位置。

版本范围与总体脉络

CHANGELOG.0.27.md 记录了 OpenZiti 从 v0.27.0 到 v0.27.9 的完整演进,其中 v0.27.0 是里程碑式的大版本(CLI 大规模重构),v0.27.1 引入了统一事件流,v0.27.6 集中交付了一批运维与管理能力,v0.27.8 补齐了认证策略与外部 JWT 签名者的 CLI 支持,v0.27.9 则是针对 websocket 传输并发问题的修复与删除行为回退。

本仓库的go.mod声明模块为github.com/openziti/ziti/v2,因此 0.27 系列期间的依赖升级(channel、edge、fabric、storage、transport 等)都会在后续版本中以更高主版本号延续,但 0.27 文档本身是理解这些子系统演进历史的重要索引。

v0.27.0:CLI 大规模重构与 transit-router 支持

v0.27.0 是 0.27 系列中改动面最大的一次发布,核心工作集中在zitiCLI 上。

命令体系重组

  • 移除update、adhoc、ping、playbook等无效或极少使用的命令;
  • art命令改为隐藏(保留为彩蛋);
  • ziti ps及其子命令被迁移到ziti agent下(ziti ps本身也整体并入ziti agent);
  • 新增ziti controller与ziti router命令,与独立二进制ziti-controller、ziti-router行为完全一致;独立二进制被标记为弃用,将在未来版本移除;
  • 新增隐藏命令ziti tunnel,行为与ziti-tunnel一致,之所以隐藏是因为ziti-edge-tunnel才是官方推荐的隧道应用;
  • db、log-format、unwrap命令被移入新的ops命令组(ziti ops db等);
  • demo、tutorial命令被移入新的learn子命令;
  • 可执行文件下载管理(init/install/upgrade/use/version)被弃用,其中init与uninstall直接移除。

从本仓库的目录结构可以印证这次重组:ziti/cmd/ops 下集中了database(含compact.go)、log_filter.go、unwrap_identity.go等运维子命令,而 ziti/cmd/edge 与 ziti/cmd/fabric 则分别承载边缘管理与网络管理命令。

ziti edge新增 transit-router 管理

ziti edgeCLI 新增了 transit-router 的 create/delete 命令,使得 transit/fabric 路由器可以通过注册(enrollment)流程进行配置,而不再需要外部生成证书。前提是 fabric 路由器配置文件包含csr段。对应实现位于 ziti/cmd/edge/create_transit_router.go,命令定义如下:

Use: "transit-router <name>",

其支持的参数包括:

  • --jwt-output-file/-o:输出用于注册的 JWT 到指定文件;
  • --cost:指定路由器代价(默认 0);
  • --no-traversal:禁止穿越(默认允许,即 false);
  • --disabled:禁用路由器(被禁用的路由器无法连接控制器);
  • --bootstrap-ctrl-chan-listener:引导控制通道监听地址及可选分组,路由器连接成功后会自动更新(例如tls:1.2.3.4:6262=group1,group2);
  • --config:关联到该 transit-router 的配置 id 或名称列表。

此外ziti edge enroll增加了-v详细输出选项,便于排查注册过程中的问题。

v0.27.1:统一事件流(Event Streaming over WebSocket)

v0.27.1 是 0.27 系列中最重要的架构级变更之一,它将原先分散的 metrics 流、circuits 流等统一为单一的事件流通道。

变更要点

  • 新增ziti fabric stream events命令,事件通过 websocket 推送;
  • 事件采用与基于文件流式输出相同的 JSON 格式;
  • 移除了纯文本格式;
  • 原先独立的 metrics/circuits 单独流式功能被取消,统一由事件流承担。

源码验证

命令实现位于 ziti/cmd/fabric/stream_events.go,通过NewStreamEventsCmd注册(Use 为events)。核心逻辑buildSubscriptions会根据用户指定的事件类型标志构建订阅列表:

  • --all:订阅全部事件;
  • --alerts、--api-sessions、--circuits、--cluster、--connect、--entity-change、--entity-counts、--links、--metrics、--routers、--sdk、--services、--sessions、--terminators、--usage:分别订阅对应事件命名空间(如event.AlertEventNS、event.CircuitEventNS等);
  • --entity-counts-interval:指定实体计数事件间隔(默认 5 分钟);
  • --metrics-source-filter:指定要流式传输 metrics 的来源;
  • --metrics-filter:指定要流式传输的 metrics 过滤规则;
  • --usage-version:指定 usage 数据版本,合法值为 2 或 3(默认 3,源码中校验usageVersion < 2 || usageVersion > 3报错)。

当用户未指定任何事件标志时,代码自动将all置为 true,即默认订阅全部事件。流式传输通过api.NewWsMgmtChannel建立 websocket 管理通道,发送StreamEventsRequestType请求后,HandleReceive将每个事件消息体直接以 JSON 打印到标准输出。示例用法(源码中自带):

ziti fabric stream events --circuits --metrics --metrics-filter '.*'

相关事件类型源码位置

事件命名空间常量定义于 controller/event(如alert.go、circuits.go、metrics.go、routers.go、services.go、sessions.go、terminators.go、usage.go等),控制器侧的事件分发逻辑位于 controller/events(如dispatcher_circuit.go、dispatcher_link.go、dispatcher_metrics.go等)。

v0.27.2:稳定性与正确性修复

v0.27.2 以 Bug 修复为主,涉及:

  • 确保实体计数事件可配置为仅在 raft leader 上发出(edge Issue #1282);
  • 约束 config-type schema 只接受 object 类型(edge Issue #1279);
  • 确保 raft 集群中特定事件不重复(fabric Issue #573);
  • JSON 事件格式化器将事件独立成行输出(fabric Issue #577);
  • 将raft.advertiseAddress移至ctrl配置块以保持一致(fabric Issue #571);
  • 支持自动迁移与基于 agent 的迁移(fabric Issue #569);
  • 移除已关闭 link 的 dropped_msg 指标(fabric Issue #567);
  • 修复 link listener 未正确配置 channel 输出队列大小的问题(fabric Issue #566)。

同时 CLI 侧允许通过 JSON 定义资源标签(ziti Issue #916),对应实现可参考 ziti/cmd/api 中 EntityOptions 的 tag 解析逻辑。

v0.27.3:Raft 运维命令与 Docker CLI 镜像

Docker 镜像

v0.27.3 起发布zitiCLI 的 Docker 镜像,适合在容器化环境中执行管理操作。

新增 Raft 交互命令

  • raft-leave:将控制器从 raft 集群中移除;
  • raft-list:列出所有已连接的控制器及其版本/连接状态;
  • fabric raft list-members:与 agent 命令相同的信息,但通过 REST 暴露。

结合本仓库源码,raft 相关的集群操作命令实现于 ziti/cmd/fabric/cluster.go(list、add、remove、transfer-leadership)以及 agent 侧的 ziti/cmd/agentcli/agent_cluster_transfer_leadership.go,底层 raft 状态机与配置位于 controller/raft。

v0.27.4:控制器死锁修复

v0.27.4 主要修复控制器在刷新 api session 心跳时的死锁(edge Issue #1303),其余为依赖版本滚动升级。

v0.27.5:CA 信任与版本检查开关

  • 修复zitiCLI 在使用全局受信任 CA 时的问题;
  • 修复ziti agent stack误调用ziti agent stats的 bug;
  • 重要行为变更:ziti controller/ziti router默认不再将当前运行版本与 GitHub 最新版本进行比较,如需开启旧行为,设置环境变量ZITI_CHECK_VERSION=true。

v0.27.6:运维与托管性能集中交付

v0.27.6 是 0.27 系列中功能密度最高的补丁版本,围绕可运维性、托管性能与稳定性展开。

inspect CLI 可发现性提升

ziti fabric inspect增加子命令化的可检查项,新增ziti fabric inspect config用于获取配置。本仓库 ziti/cmd/fabric/inspect.go 中可以看到完整的子命令清单:

  • stackdump:获取指定节点的堆栈转储;
  • metrics:获取当前指标;
  • config:获取指定节点的配置(0.27.6 新增);
  • cluster-config:获取集群配置子集;
  • connected-routers:各控制器连接了哪些路由器;
  • connected-peers:集群中控制器之间的连接关系;
  • links:路由器视角的链路信息;
  • sdk-terminators/ert-terminators:路由器视角的 SDK/ER 终结器;
  • router-circuits/router-edge-circuits/router-sdk-circuits:路由器上的各类电路;
  • router-messaging:待处理的 peer 更新与终结器校验;
  • router-data-model/router-data-model-index:路由器数据模型及索引;
  • data-model-index:控制器的已应用 raft 索引(非集群时为数据模型索引);
  • router-controllers:路由器到控制器的连接状态;
  • terminator-costs:终结器动态代价;
  • router-config-registry:托管配置注册表状态;
  • router-identity-connection-statuses、ctrl-dialer、peer-dialer等调试项。

inspect 命令支持--file/-f(每个结果输出到<instanceId>.<ValueName>文件)与--format yaml|json参数,默认输出 YAML,底层通过 fabric management REST API 的Inspect端点下发AppRegex与RequestedValues(见 controller/rest_client/inspect)。

路由器禁用/启用机制

v0.27.6 引入路由器禁用能力:被禁用的路由器连接到控制器时会被拒绝。命令:

ziti fabric update router <router-id> --disabled ziti fabric update router <router-id> --disabled=false

对应实现位于 ziti/cmd/fabric/update_router.go,底层由 fabric 的 router enable/disable 机制(fabric Issue #651)驱动。ziti edge create系列也同步支持--disabled标志(见 ziti/cmd/edge/create_edge_router.go)。

数据库压缩

新增离线压缩 bbolt 数据库命令:

ziti ops db compact <src> <dst>

实现位于 ziti/cmd/ops/database/compact.go:源库以只读方式打开(ReadOnly: true、权限 0400),目标库使用bbolt.Compact进行重写(默认开启 array freelist,可通过--array-freelist=false切换为 map freelist),最终生成精简后的数据库文件。注意该命令要求先停止控制器,属于离线运维操作。

edge-router 重新注册

新增命令:

ziti edge re-enroll edge-router

实现位于 ziti/cmd/edge/reenroll_edge_router.go,通过向edge-routers/<id>/re-enroll端点发起 POST 完成重新注册,并支持--jwt-output-file/-o将注册 JWT 写入文件。

托管性能优化

  • 路由器在建立或重建托管(hosting)时不再淹没控制器:引入针对 router/tunneler 的终结器创建限速(edge Issue #1362)与操作限速池(fabric Issue #648);
  • 终结器创建请求幂等化(重复请求不会产生多个终结器,edge Issue #1355、ziti 侧同步优化)并在失败时处理重复创建;
  • session 创建幂等(edge Issue #1359);
  • tunneler 路由器缓存 api-session,避免不必要地新建会话(edge Issue #1364);
  • xgress_edge_tunnel 在控制通道重连时不再启停 host(edge Issue #1336);
  • 修复 UDP 数据报文大于 10k 时丢数据的问题(edge Issue #1329);
  • 修复路由器事件处理死锁(edge Issue #1350)。

控制通道心跳与集群事件

fabric Issue #507 为控制通道心跳增加配置项;fabric Issue #584 增加集群事件(cluster events),对应 controller/event/cluster.go 与 controller/events/dispatcher_cluster.go。同时新增 raft 释放与移交领导权命令(release/transfer-leadership),raft 设置改为可配置(fabric Issue #597)。

其他修复

  • xgress_edge_tunnel的 host 启停、MFA 多重注册清理(edge Issue #1374)、TransitRouter 缺失实体类型 id(edge Issue #1369)、错误消息文案修正(edge Issue #1366)、cert 背书 ext-jwt-signer 空指针(edge Issue #1310);
  • channel 层协议不匹配错误信息改进与 arm 设备 64 位原子对齐修复(channel Issue #83/#93);
  • sdk-golang 连接遵循 net.Conn 超时规范(sdk-golang Issue #356);
  • raft 快照压缩(fabric Issue #583)。

v0.27.7:Go 1.20 构建

v0.27.7 将构建工具链升级至 Go 1.20。注意:本仓库当前go.mod已声明go 1.27.1,说明项目在后续演进中已大幅提升工具链版本,0.27 系列的 Go 1.20 属于当时的历史事实。

v0.27.8:AuthPolicy 与 Ext JWT Signer 的 CLI 支持

v0.27.8 为认证策略(auth policies)和外部 JWT 签名者(external JWT signers)补齐了 CLI 能力,并优化了服务列表性能。

新增 CLI 命令

  • ziti edge create auth-policy/ziti edge update auth-policy/ziti edge delete auth-policy(ziti Issue #1058):认证策略的创建、更新与删除;
  • ziti edge create auth-policy支持在 identity 上直接分配认证策略(ziti Issue #1064);
  • ziti edge delete ext-jwt-signer(ziti Issue #1059):暴露外部 JWT 签名者的删除能力。

AuthPolicy 创建参数详解

实现位于 ziti/cmd/edge/create_authpolicy.go,create auth-policy <name>支持以下参数:

主要认证(primary)

参数说明默认值
--primary-cert-allowed启用证书认证false
--primary-cert-expired-allowed允许过期证书false
--primary-ext-jwt-allowed启用外部 JWT 认证false
--primary-ext-jwt-allowed-signers允许特定 JWT 签名者(可多次指定)空
--primary-updb-allowed启用用户名/密码(updb)认证false
--primary-updb-req-special密码必须包含特殊字符false
--primary-updb-req-numbers密码必须包含数字false
--primary-updb-req-mixed-case密码必须混合大小写false
--primary-updb-lockout-min超过最大尝试次数后的锁定分钟数,0=永久锁定0
--primary-updb-max-attempts无效认证尝试次数,0=不限0
--primary-updb-min-length最小密码长度5

二次认证(secondary)

参数说明默认值
--secondary-req-ext-jwt-signer每个请求都要求携带的 JWT 签名者空
--secondary-req-totp要求 MFA TOTP 注册false

创建成功后命令会输出新策略的 id。更新命令 ziti/cmd/edge/update_authpolicy.go 支持同样的参数体系外加--name/-n重命名,且只在显式传入(flag Changed)的参数上构造 PATCH,避免误清空未涉及的字段;若没有任何参数变更则报错no values changed。

服务列表性能

edge Issue #1388 优化了 identity service 索引在服务列表查询中的使用;同时修复了 PUT identities 引发的错误与内部 PANIC(edge Issue #1386)。

v0.27.9:websocket 并发修复与删除行为回退

v0.27.9 是 0.27 系列的收尾版本:

  • 重构 websocket 传输以修复并发问题(对应ziti/cmd底层api.NewWsMgmtChannel所依赖的 channel/transport 组件升级);
  • 回退 v0.27.6 引入的删除行为变更:v0.27.6 起删除不存在的实体时返回错误,v0.27.9 恢复为静默成功,以避免破坏既有脚本与自动化流程。

版本升级路径建议

如果你正运行 0.26 或更早版本,建议按以下顺序升级:

  1. 先升级到 v0.27.0:CLI 命令结构发生大规模调整,update、adhoc、ps等命令消失或被迁移,升级后先运行ziti --help与ziti ops --help熟悉新命令树;
  2. 跟随到 v0.27.1:事件流式输出 API 已统一,基于旧stream circuits/stream metrics的脚本需迁移到ziti fabric stream events;
  3. v0.27.3 之后:raft-leave、raft-list、fabric raft list-members可编排进 HA 运维脚本;
  4. v0.27.6:确认删除语义变更的影响面(v0.27.9 已回退),同时获得路由器禁用、db compact、re-enroll、inspect config 等新运维工具;
  5. v0.27.8:将认证策略与 ext JWT 签名者管理全部迁移到 CLI 流程。

由于本仓库后续版本的go.mod已将模块声明为github.com/openziti/ziti/v2且工具链升级至 Go 1.27,实际部署时可参考仓库 quickstart 与 doc(如 001-overview.md、002-local-dev.md)获取最新架构与本地部署指引;0.27 系列的完整变更可继续查阅 changelogs 目录下其余版本(如 CHANGELOG.0.26.md)与 CHANGELOG.1.0.md 了解后续演进方向。

小结

v0.27 系列是 OpenZiti 在 CLI 形态、事件流架构与运维能力三个维度上的重要转折点:CLI 完成瘦身与命令树重组,事件系统走向统一的 websocket JSON 流,运维侧新增路由器禁用/启用、离线 bbolt 压缩、edge-router 重注册、raft 集群管理与 inspect 子命令化;认证策略与外部 JWT 签名者也在本系列末尾获得完整的 CLI 支持。这些能力在后续版本中持续演进,理解 0.27 的变更脉络,有助于你在升级、迁移与脚本改造时做出准确判断。

  • 零信任
  • 网络
  • 后端
  • 认证鉴权

【免费下载链接】ziti

The 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
点击查看免费下载

相关推荐

上一篇:把 ESP32 改成 AI 语音助手:xiaozhi-esp32 从接线到唤醒一次跑通
下一篇:如何快速上手PoeCharm:面向流放之路玩家的完整中文角色构建实战指南

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 6:42:17

C++笔记之单例模式、工厂模式、观察者模式的适用场景是什么?

C++笔记之单例模式、工厂模式、观察者模式的适用场景是什么? code review! 单例模式:系统中某个类只能有一个实例,且该实例需要被全局访问的场景。比如全局状态管理类、配置管理器、日志系统。 工厂模式:工厂模式适用于创建对象的过程比较复杂,或者需要根据不同条件创建不…

作者头像 李华
网站建设 2026/10/5 6:42:09

Materials Studio从建链到弛豫:聚合物无定形盒子模拟全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/5 6:41:28

西门子机床opc ua协议实现变量读写及NC文件上传下载

1、机床类型机床&#xff1a;SYIL X9 配备五轴转台 机床系统&#xff1a;西门子828D 系统版本&#xff1a;SW262、机床先开通opc ua协议根据说明书开通opc ua协议&#xff08;需西门子官方授权&#xff09;&#xff0c;开通成功如下图所示3、SINUMERIK OPC UA2.2客户端授权通过…

作者头像 李华
网站建设 2026/10/5 6:38:36

GPUStack Image Playground 完整指南:图像生成与图像编辑实战

后端人工智能模型推理服务集群管理可观测性 【免费下载链接】gpustack A GPU cluster manager for high-performance AI model serving (vLLM, SGLang) and on-demand SSH-accessible GPU instances. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/gp/gpustack 点击查看…

作者头像 李华