- 零信任
- 网络
- 后端
- 认证鉴权
【免费下载链接】ziti
The parent project for OpenZiti. Here you will find the executables for a fully zero-trust, programmable network @OpenZiti
本文以 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 或更早版本,建议按以下顺序升级:
- 先升级到 v0.27.0:CLI 命令结构发生大规模调整,
update、adhoc、ps等命令消失或被迁移,升级后先运行ziti --help与ziti ops --help熟悉新命令树; - 跟随到 v0.27.1:事件流式输出 API 已统一,基于旧
stream circuits/stream metrics的脚本需迁移到ziti fabric stream events; - v0.27.3 之后:
raft-leave、raft-list、fabric raft list-members可编排进 HA 运维脚本; - v0.27.6:确认删除语义变更的影响面(v0.27.9 已回退),同时获得路由器禁用、db compact、re-enroll、inspect config 等新运维工具;
- 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
相关推荐
菜单栏图标挤成一团:用Ice管理Mac菜单栏
菜单栏图标挤成一团:用Ice管理Mac菜单栏 每天打开电脑,二十多个图标挤成一团,电池和Wi Fi被顶到刘海后面。Ice 是 macOS 14 及以上系统的 M
零信任网络后端认证鉴权ai-memory 变更日志深度解读:Agent 长期记忆系统的版本演进与工程实践
ai memory 变更日志深度解读:Agent 长期记忆系统的版本演进与工程实践 导读 本篇文章以 ai memory 项目官方 CHANGELOG.md h
零信任网络后端认证鉴权KeepHQ v0.37.6版本发布:工作流与事件管理能力再升级
KeepHQ v0.37.6版本发布:工作流与事件管理能力再升级 概述 KeepHQ作为开源AIOps(人工智能运维)和告警管理平台,在v0.37.6版本中带来
后端告警AI 应用工作流自动化
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考