OpenZiti v0.15:从旧版迁移、数据库快照到 Edge Router 子类型化的关键演进
零信任网络后端认证鉴权【免费下载链接】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 0.15 是零信任网络 Ziti 的一个里程碑版本它统一了 Fabric 与 Edge 的实体模型引入基于 Bolt 事务的数据库快照能力并把 Edge REST API 全面迁移到 go-swagger 生成的 OpenAPI 2.0 规范之上。本文以官方变更日志 CHANGELOG.0.15.md 为主线结合当前仓库源码逐项解读新特性、破坏性变更与升级路径帮助你在升级前评估兼容性影响并掌握新 API 的使用方式。版本概览与升级路径0.15 系列共发布三个补丁版本0.15.0 / 0.15.1 / 0.15.2随后被 0.16 承接。升级前请先阅读 CHANGELOG.0.15.md 了解完整条目并注意以下结论0.15.0 引入了大部分新功能但删除了从 pre-0.9 版本迁移的代码若你正运行 pre-0.9 的旧实例必须先升级到 0.14.12再升级到 0.15否则迁移路径不可用。0.15.1 无新功能仅修复若干 CLI 与 Edge 后端缺陷详见下文“0.15.1 修复清单”。0.15.2 修复若干查询与枚举问题并新增一个ziti-tunnel的 Docker Compose 示例quickstart/docker/下可找到对应 compose 文件。0.15.3 仅追加该 Docker Compose 示例的说明无代码变更。数据库快照Database Snapshots0.15.0 引入最重要的运维能力数据库快照/备份。它有三种触发方式且该能力仅对管理员开放。三种触发方式触发方式命令/请求说明ziti-fabric CLIziti-fabric snapshot-db可附带快照文件路径参数如ziti-fabric snapshot-db /path/to/snapshotziti CLIziti edge snapshot-db等价于向 Edge REST API 发送 POSTREST APIPOST /edge/v1/database/snapshot管理员身份body 可携带pathCLI 的两种实现分别位于 ziti/cmd/fabric/db_snapshot.go 与 ziti/cmd/edge/db_snapshot.gofabric 版本调用client.Database.CreateDatabaseSnapshotWithPath并支持在参数中指定快照文件路径edge 版本则通过util.ControllerUpdate(edge, database/snapshot, , ..., http.MethodPost, ...)直接向控制器发起 POST 请求。两者均复用api.Options提供的通用 flag如--output-json、--timeout、--verbose。REST 侧由 go-swagger 生成的 handler 承接create_database_snapshot_with_path.go请求体为DatabaseSnapshotCreate其核心字段是Path string \json:path,omitempty[database_snapshot_create.go](https://link.gitcode.com/i/770e2fb5a3069c0236b29d1a0519dda6)。当前仓库的 swagger 规范中还可见/database、/database/snapshot、/database/check-data-integrity、/database/fix-data-integrity 等一组数据库运维端点swagger.yml说明快照能力是 0.15 引入的数据库自服务运维体系的一部分。快照特性一致性快照在bolt 事务内创建是对数据库文件的拷贝因此快照点内数据是自洽一致的。命名文件名会追加创建时的日期与时间便于区分多个备份。频率限制快照创建最多每分钟一次避免高频触发造成 I/O 压力。存放位置快照文件落在控制器的文件系统上而非客户端本地ziti-fabric snapshot-db传入的路径是控制器侧的目标路径。值得注意的是0.15 时代的控制器已具备 Raft 集群能力雏形快照机制与此相关当前仓库的 controller/raft/fsm.go 中BoltDbFsm.Snapshot()通过db.StreamToWriter(gzWriter)将 Bolt 数据库流式写入 gzip 压缩缓冲区生成 raft 快照Restore则先从.stage临时文件恢复并比较索引后决定是否应用fsm.go。这正是“在 bolt 事务内拷贝数据库文件”的底层实现也与 0.15 变更日志描述的语义一致。Edge Router 成为 Fabric Router 的子类型0.15.0 之前edge router 与 fabric router 虽然概念相近但并非同一实体创建 edge router 时并不会立即生成对应的 fabric router要等到 edge router 成功注册enroll后才会出现对应实体。0.15.0 起edge router 是 fabric router 的一种类型创建 edge router 时它会立即以 fabric router 的身份可见但此时没有 fingerprint指纹因此对应的 router 进程在完成 enrollment 前无法连接控制器。这带来的直接收益是enrollment 完成之前就可以提前把 terminator服务终止点绑定到该 edge router 上简化了编排流程。该行为与 edge#144 Unverified Edge Routers Cannot Be Used For Terminators 的设计相关即未验证未注册的 edge router 不能用于 terminator而 0.15 通过统一实体模型提前打通了这条链路。从当前仓库可以看到控制器在env层以LockingRouterState.IsOnline维护路由器的在线状态controller/env/sync.go并在持久化层把isOnline作为FieldControllerIsOnline布尔字段存储controller/db/controller_store.go。这也解释了为什么 0.15.1 修复了 “Policy Advisor CLI 因 routersIsOnline值缺失而失败”edge#237——统一实体模型后isOnline必须在所有查询路径上可用。Fabric Router 与 Service 引入名称Name0.15.0 之前fabric router 与 service 只有 id且假设 id 本身就是用户友好的。0.15.0 为两者增加name 属性若创建时未提供 name则name 默认取 id。主要动机是保持 fabric 与 edge 两侧的一致性查看 service 或 router 时标签label总是在同一个字段位置便于统一 UI/CLI 展示。结合 0.15.2 的修复ziti-fabric list支持查询且默认true limit none可以推断name 的引入也为 fabric 侧list查询提供了可检索的标签维度使 edge 与 fabric 的列表体验对齐。Edge REST API 增强0.15.0 的 Edge REST API 改动是为未来功能铺路的预备性变更官方明确要求客户端仔细阅读并采用新模式以避免未来不兼容。核心变化如下。OpenAPI 2.0/Swagger 全面接管Edge REST API 的 REST 呈现现已完全由edge/spec中的 OpenAPI 2.0/Swagger 规范生成生成代码分布在edge/rest_model、edge/rest_server与edge_rest_client在当前仓库中对应 controller/rest_model、controller/rest_server、controller/rest_client 三棵目录。生成工具为go-swagger当时版本为 0.24.0。当前仓库的 controller/specs/swagger.yml 即为该规范的现役版本可作后续 API 参考。生成代码引入以下几类影响客户端的变更content-type与accept头变得有意义且重要详见下文enrollment 端点在accept头明确指定 JSON 时可以返回 JSON引入统一的API 输入校验错误修复各类entity ref实体引用 URLbugid 属性标准化。Content-Type / Accept 头语义如果客户端未显式设置accept通常浏览器/库会发送accept: */*接受一切。此时 Edge REST API 会保持与旧版本一致的 content-type 返回。但是enrollment 端点的非 JSON 响应现已标记为 deprecated弃用意味着后续版本可能移除纯文本/HTML 形态的 enrollment 响应。若客户端对大多数端点将accept设置为非application/jsonAPI 将返回错误提示“这些 content type 不可接受”。即服务端只愿意按 JSON 交付客户端必须显式声明接受 JSON。API 输入校验输入校验改由 OpenAPI 库与 go-swagger 生成代码负责错误格式大体保持不变但所有校验错误现在统一返回相同的外层错误结构并正确设置 cause 错误。此前各端点校验错误的处理方式不一致0.15 起得到收敛。Entity Ref Bug 修复若干实体引用URL被修复此前它们指向错误或无效的 API URL现在指向正确端点。Id 属性类型化id 属性现在完全类型化命名模式为typeId请求/响应均如此。受影响的实体实体旧字段新字段configtypeconfigTypeididentity service configserviceserviceIdidentity service configconfigconfigId而IdentityTypeId引用未更新因为它们已列入移除计划、现已被标记为deprecated包括/identity-type端点以及/identity上 create/update/patch 操作的相关属性。面向 Fabric REST API 的铺垫变更以下变更是为了未来 Fabric REST API 腾出空间而做的Edge REST API 基础路径移到/edge/v1GET /versions引入apiVersions字段实体 id 从 UUID 转向shortId。基础路径/edge/v1Edge REST API 的新基础路径是edge/v1。旧基础路径/已 deprecated但在后续版本之前仍保持可用。这次迁移的目的为 Fabric REST API 让出根路径并允许其他组件注册各自 API。因此新客户端应尽快改用/edge/v1前缀。API 版本GET /versions引入 apiVersionsGET /versions目前仍由 Edge REST API 处理但未来会被 Fabric REST API 取代。0.15 起它报告版本信息采用map 结构便于未来新 REST API 注册各自支持的版本Ziti REST API 的目标是同时支持多个 API 版本以向后兼容。0.15.0 实际响应示例{ data: { apiVersions: { edge: { v1: { path: /edge/v1 } } }, buildDate: 2020-06-11 16:03:13, revision: 95e78d4bc64b, runtimeVersion: go1.14.3, version: v0.15.0 }, meta: {} }未来引入 Fabric REST API 后的理论形态{ data: { apiVersions: { edge: { v1: { path: /edge/v1 } }, fabric: { v1: { path: /fabric/v1 } } }, buildDate: 2020-06-20 12:43:03, revision: 1a27ed4bc64b, runtimeVersion: go1.14.3, version: v0.15.10 }, meta: {} }ShortIds告别 UUID 文本格式Edge REST API 此前所有 id 均使用 UUID 及其文本格式0.15 起改用shortId及其格式。设计动机让 id 更人类友好日志、肉眼比对更轻松统一 Fabric 与 Edge 实体 id 的观感保持与 UUID 相当的高唯一性。对客户端最重要的指导原则所有 Ziti REST API 都将 id 定义为字符串只要把 id 当作不透明字符串处理就不会遇到兼容性问题。官方强烈建议所有客户端遵循此模式——不要把 id 当作 UUID 来解析或依赖其内部结构。0.15.1 修复清单0.15.1 未引入新功能仅修复以下缺陷#129ziti-tunnel enroll在 ERROR 级别输出成功信息日志级别错位#131创建身份identity、CA 及 CA 验证流程的问题#133创建 service edge router policy 时按名称查找 service 失败edge#191CLI 修改自身密码时报 404 Not Foundedge#231身份identity缺失 enrollmentexpiresAt属性edge#237Policy Advisor CLI 因 routersIsOnline值缺失而失败edge#233REST API 错误应尽可能返回application/jsonedge#240列出 specs 返回 404。其中 edge#233 与 0.15.0 的 content-type/accept 语义收紧直接呼应0.15.1 进一步保证错误响应也以 JSON 交付。edge#237 则印证了isOnline在统一实体模型下必须贯穿查询链路见上文 Edge Router 子类型化一节的源码佐证。0.15.2 修复与新增#140允许 Ziti CLI 记录 JSON 格式的请求便于审计与调试#148ziti edge list edge-routers显示isOnline字段#144ziti-fabric list支持查询语法默认true limit none即默认列出全部不做分页截断#142修复 CLIca create未默认设置身份角色的缺陷#146修复 edge router 超过 10 个时导出 edge router JWT 偶发失败#147修复使用limit none时分页输出的问题edge#243会话创建时只返回 10 个 edge router查询截断缺陷edge#2450.14 到 0.15 之间 fingerprint 计算方式变化确保 0.15 的 router 能与 0.14 的 controller 协作edge#248网络缓慢且链路众多时Edge Router Hello 可能超时foundation#103修复列表型配置项的环境变量注入config file env injection。edge#245 尤其值得关注0.15 router 与 0.14 controller 混合部署的兼容性被显式保证这意味着你可以先升级 router 再升级 controller从而平滑过渡。其他变更移除废弃代码与迁移逻辑postgres store 代码及其迁移已删除edge#195废弃的AppWan与Clusters概念被移除分别由service policies与service edge router policies取代。PayloadBuffer 内存泄漏修复修复PayloadBuffer子系统中的内存增长失控问题纠正ziti-router中无界的内存增长。这一修复对长期运行的高吞吐路由器至关重要值得在升级后观察内存曲线验证。二进制外观调整ziti-enroller与ziti-tunnel的 enroll 子命令输出做了外观性调整无功能变更。示例补充0.15.2/0.15.3 为ziti-tunnel增加 Docker Compose 示例可直接在 quickstart/docker 中查找使用。升级建议与兼容性注意事项综合 0.15 全系列变更升级时建议重点核对以下清单版本跳跃限制若运行 pre-0.9 版本必须先升级到 0.14.12再继续升级否则旧迁移代码已被删除。API 路径迁移客户端需将 Edge REST API 请求从根路径迁移到/edge/v1前缀旧路径暂可用但已废弃。accept 头声明客户端应显式设置accept: application/jsonenrollment 端点的非 JSON 响应已废弃。id 处理将 id 视为不透明字符串不要依赖 UUID 格式响应/请求字段遵循typeId命名。校验错误输入校验错误结构已统一外层错误一致、cause 字段被正确填充错误处理代码可据此统一。实体命名fabric router 与 service 新增name字段缺省取 id列表/查询时可使用 name 作为标签。混合版本部署0.15 router 可与 0.14 controller 协同fingerprint 计算已兼容可按 router→controller 顺序滚动升级。运维新能力可利用ziti edge snapshot-db、ziti-fabric snapshot-db或POST /edge/v1/database/snapshot建立定时备份机制注意快照频率上限为每分钟一次。结语0.15 是 OpenZiti 在“边缘与核心实体模型统一”与“REST API 现代化”两条主线上的关键版本Edge Router 成为 Fabric Router 子类型、Fabric 实体获得 name、数据库快照成为一等运维能力而 REST API 则在 OpenAPI 2.0 规范下完成了路径、版本与 id 格式的全面重构。这些变更既是功能性增强也是未来 Fabric REST API 与多版本 API 兼容策略的基石。若你正在升级或编写客户端本文所述的新模式/edge/v1、application/json、不透明字符串 id、typeId字段应尽早采纳以平滑过渡到后续版本。赞分享零信任网络后端认证鉴权【免费下载链接】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点击查看免费下载相关推荐终极指南Brontes数据库迁移工具如何轻松实现从旧版快照到新版Schema的数据升级终极指南Brontes数据库迁移工具如何轻松实现从旧版快照到新版Schema的数据升级 Brontes作为一款专为系统性MEV检测设计的区块链分析引擎其数据microbundle版本迁移指南从v0.14到v0.15.x的变化microbundle版本迁移指南从v0.14到v0.15.x的变化 概述 本文档详细介绍了microbundle从v0.14版本迁移到v0.15.x版本的主开发工具构建工具gsplat 从旧版 project_gaussians / rasterize_gaussians 迁移到 rasterization 的 API 演进详解gsplat 从旧版 project_gaussians / rasterize_gaussians 迁移到 rasterization 的 API 演进详解人工智能计算机视觉3D渲染图形学高性能计算上一篇TypeScript 原生 API 补齐 typescript-eslint 所需检查器与类型查询接口变更清单与工具链影响解读下一篇JMustache: 简单、强大的Java模板引擎创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

深圳美术考前备考全阶段目标规划与能力评估框架逻辑拆解

深圳美术考前备考全阶段目标规划与能力评估框架逻辑拆解

本文以广东省美术高考(含深圳考区)的统一招考要求为基准,拆解经过长期教研沉淀的美术考前备考全阶段目标规划与能力评估框架的设计逻辑、执行路径与适用边界,为深圳美术生的备考规划提供结构化参考。一、备考体系的设计目标与底层…

2026/10/5 6:27:18 阅读更多 →
Anaconda

Anaconda

Anaconda功能简介 我们常常会遇到这样的情况,正在做的项目A和项目B分别基于python3.11和python3.12的环境,而第电脑只能安装一个环境,这个时候Anaconda就派上了用场,它可以创建多个互不干扰的环境,分别运行不同版本的软…

2026/10/5 6:27:17 阅读更多 →
探索 Nanoid:微型URL ID生成器

探索 Nanoid:微型URL ID生成器

探索 Nanoid:微型URL ID生成器 【免费下载链接】nanoid A tiny (118 bytes), secure, URL-friendly, unique string ID generator for JavaScript 项目地址: https://gitcode.com/GitHub_Trending/na/nanoid 在数字化的世界里,URLs是连接网络资源…

2026/10/5 6:27:17 阅读更多 →

最新新闻

DeepSeek房地产获客实战:文本微表情分析与AI话术生成

DeepSeek房地产获客实战:文本微表情分析与AI话术生成

简介:面向房地产营销与自然语言处理技术人员的深度技术方案,基于深度求索(DeepSeek)大模型,系统讲解客户微表情分析与智能话术生成在精准获客中的完整应用。文档全书137页,分为51个大章节,内容从…

2026/10/5 7:12:31 阅读更多 →
VirtualBox与Win11内核隔离冲突:原理、排查与解决方案

VirtualBox与Win11内核隔离冲突:原理、排查与解决方案

最近很多朋友在老版本VirtualBox上栽了跟头:Windows 11明明把VT-x都开了,硬件加速还是灰的;有的直接弹0x80004005,虚拟机一个都起不来;还有人装完VirtualBox,发现“虚拟交换机”和网卡一起消失了。我在帮人…

2026/10/5 7:12:31 阅读更多 →
计算机网络核心考点精讲:从分层模型到TCP/IP与子网划分

计算机网络核心考点精讲:从分层模型到TCP/IP与子网划分

计算机网络这门课,在计算机专业的地位不用我多说了,不管是考研408、期末考,还是大厂面试、日常开发排查问题,它都是“重要且高频”的常客。我这些年带过不少新人,也帮人做过考前突击,发现很多人卡住不是因为…

2026/10/5 7:12:31 阅读更多 →
计算机网络上篇高频考点复习地图:物理层到网络层一次理清

计算机网络上篇高频考点复习地图:物理层到网络层一次理清

如果你正在准备考研、期末或者校招面试,大概都听过这么一句话:计算机网络重要,但容易学“散”。尤其是基本参考书里的“上篇章”,在408、期末卷和面试题里出现的频率都很高,可很多人复习到后面才发现,物理层…

2026/10/5 7:12:31 阅读更多 →
CLion中文乱码排查与解决:源码、编译器、控制台三步统一

CLion中文乱码排查与解决:源码、编译器、控制台三步统一

CLion 跑个printf("你好"),控制台直接吐出一堆火星文,这事估计每个从 Visual Studio 或者老工程迁过来的同学都撞见过。更气人的是网上搜出来的改法五花八门,今天改个编码明天又乱了,尤其 Windows 平台,CLio…

2026/10/5 7:12:31 阅读更多 →
Android Studio乱码详解:从控制台到文件的完整解决方案

Android Studio乱码详解:从控制台到文件的完整解决方案

搞 Android 开发的人,十有八九都遇到过 Android Studio 控制台或文件乱码的问题。不管你是刚装好 IDE 跑第一个 Hello World,还是维护一个老项目到一半,突然发现日志输出全是“锟斤拷”或者“���&#xfff…

2026/10/5 7:11:31 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* 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 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* 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 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* 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 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* 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 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* 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 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/4 20:14:29 阅读更多 →