ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenZiti 1.4 版本技术解读:集群配置迁移、事件体系规范化与备份恢复机制

OpenZiti 1.4 版本技术解读:集群配置迁移、事件体系规范化与备份恢复机制 零信任网络后端认证鉴权【免费下载链接】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 主仓库ziti的 changelogs/CHANGELOG.1.4.md 展开系统梳理 1.4.x 版本系列的核心变更HA 集群配置从raft:迁移为cluster:、事件命名空间与字段的规范化、备份/恢复与单机到 HA 迁移的时间线标识timeline identifier机制、路由器控制器端点配置重构以及ziti ops verify命令族的调整。读者读完可掌握 1.4 版本升级时的配置改写要点、事件流消费方式的变化以及集群恢复的操作路径并结合仓库源码理解其底层实现。1.4 版本系列概览1.4 系列共包含 4 个发布版本其中 1.4.0 是一次功能丰富的主版本1.4.11.4.3 则以缺陷修复为主版本定位核心内容1.4.0功能主版本备份/恢复与 HA 迁移改进、cluster命名统一、事件文档化与一致性、ziti ops verify重构、路由器控制器端点配置变更1.4.1Bug fix控制器在线状态修复、Raft 配置默认值更新、路由器 endpoints 文件默认改为.yml扩展名1.4.2Bug fix路由器健康检查在无效地址下仅记录日志却未停止监听的问题1.4.3Bug fix使用 API Session 证书建立连接失败的修复其中 1.4.0 是本系列最具迁移价值的版本下文重点展开。配置变更raft:更名为cluster:变更背景1.4 系列统一了 HA 相关术语CLI 工具、管理 API、配置段落均从 raft 命名收敛为 cluster。对于 HA 部署原先的raft:配置段被改名为cluster:对应 Issue #2731 Rename raft controller config section to cluster、Issue #2546 Use consistent terminology for HA。新旧配置对照如下# 旧写法1.3.x 及更早 raft: dataDir: ./data # 新写法1.4.0 起 cluster: dataDir: ./data源码层面的强制约束从当前仓库的配置解析代码controller/config/config.go可以看到dataDir是cluster段落中必填的键——解析逻辑先给 Raft 相关字段设置默认值然后从子 map 中查找dataDir若缺失会直接报错if value, found : submap[dataDir]; found { controllerConfig.Raft.DataDir value.(string) } else { return nil, errors.Errorf(cluster dataDir configuration missing) }仓库内的 HA 配置样例etc/ctrl2.yml展示了完整形态cluster: advertiseAddress: tcp:localhost:1381 bindAddress: tcp:0.0.0.0:1381 dataDir: /path/to/data除dataDir外cluster段落还支持一批可选的 Raft 调优参数均在同一解析函数中按名取值、以time.Duration解析commitTimeout日志提交超时electionTimeout选举超时heartbeatTimeout心跳超时leaderLeaseTimeout领导者租约超时snapshotInterval快照生成间隔snapshotThreshold触发快照的日志条数阈值restartSelfOnSnapshot收到快照后是否自动重启自身布尔preferredLeader是否优先指定领导者布尔。升级到 1.4 时HA 部署务必把配置文件中的raft:段整体重命名为cluster:否则配置解析将失败。事件文档化与一致性调整1.4.0 将事件类型作为 OpenZiti 参考文档的一部分进行了穷尽式整理对应 Issue #2593并在梳理过程中修正了若干不一致之处。命名空间清理事件命名空间被统一为单数形式具体映射如下旧命名空间新命名空间edge.apiSessionsapiSessionfabric.circuitscircuitedge.entityCountentityCountfabric.linkslinkfabric.routersrouterservicesserviceedge.sessionssessionfabric.terminatorsterminatorfabric.usageusage需要注意一个细节service 事件在配置文件中长期使用services作为键而事件体内部的命名空间却是service.events。1.4 统一为service后旧命名空间仍然兼容——如果配置文件仍使用旧事件类型事件中会携带旧命名空间。也就是说升级后新旧配置可以共存事件流的消费方短期内不会因命名空间变化而中断。新增 timestamp 字段service与usage两类事件现在都带上了timestamp字段表示事件生成时刻。以 service 事件为例见 controller/event/services.go 中的结构体注释与 JSON 示例一次拨号成功事件形如{ namespace: service, event_src_id: ctrl_client, timestamp: 2024-10-02T12:17:40.501821249-04:00, version: 2, event_type: service.dial.success, terminator_id: 2xFBuwwzJzAXuw5lOPnDwr, service_id: 3pjMOKY2icS8fkQ1lfHmrP, count: 1, interval_start_utc: 1737140460, interval_length: 60 }service 事件的有效event_type包括service.dial.success、service.dial.fail、service.dial.timeout、service.dial.error_other以及service.dial.terminator.*系列usage 事件则包含usage.ingress.rx/tx、usage.egress.rx/tx、usage.fabric.rx/tx等类型见 controller/event/usage.go。新增 event_src_id 字段所有事件类型现在都带event_src_id字段其值为发出该事件的控制器 ID。在 HA 环境中多个控制器都会产生事件消费方可以用该字段区分事件来源、做去重或按控制器聚合。仓库中各类事件结构体均已内置该字段例如 controller/event/alert.go 中的告警事件type AlertEvent struct { Namespace string json:namespace EventSrcId string json:event_src_id Timestamp time.Time json:timestamp ... }集群操作命令更名原ziti fabric raft命令组整体迁移为ziti ops clusterfabric 管理 API 中与 Raft 相关的接口也统一归入 Cluster 命名空间。配套的调整包括Issue #2746agent 侧的 controller 命令移动到agent cluster子命令组下Issue #2743agent 与 REST 的 cluster 命令名称保持一致Issue #2738集群无 leader 时相关操作返回 503 而非 500。因此1.4 中涉及集群状态、成员管理、备份恢复的操作应使用ziti ops cluster/ziti agent cluster入口。备份/恢复与单机到 HA 迁移时间线标识机制为什么要引入 timeline identifier从数据库快照恢复、或从单机standalone迁移到 Raft/HA 集群本质上都是控制器状态发生倒退路由器可能察觉不到这种变化。自路由器启用简化的数据模型RDM后控制器与路由器之间通过数据模型增量同步因此路由器必须能够识别两种情况控制器数据库被恢复到更早的快照迁移到 HA 后数据模型索引index可能重置到接近零。为此数据库新增了时间线标识timeline identifier它在所有控制器间共享随数据状态一起下发到路由器。当控制器恢复到旧快照、或迁移到 Raft/HA 部署时时间线标识会改变。路由器请求数据模型变更时会附带当前的时间线标识控制器发现标识不一致后就知道需要下发完整的全量数据状态而不是增量。观测数据模型索引与时间线该机制整体上对运维是透明的但控制器和路由器上的当前数据模型索引与时间线标识可以随时查看ziti fabric inspect router-data-model-index该命令在 ziti/cmd/fabric/inspect.go 中注册实际输出示例来自变更日志$ ziti fabric inspect router-data-model-index Results: (3) ctrl1.router-data-model-index index: 25 timeline: MMt19ldHR vEcsw2kJ7Q.router-data-model-index index: 25 timeline: MMt19ldHR ctrl2.router-data-model-index index: 25 timeline: MMt19ldHR正常状态下集群内各控制器与路由器的index和timeline应保持一致恢复或迁移后timeline变化即属于预期行为。快照与时间线的联动从 1.4 起每次创建数据库快照时快照会携带一个标志指示需要更换时间线标识。单机控制器启动时若发现该标志被置位会更换时间线标识并重置标志用已有控制器数据库初始化 HA 集群时同样会更换时间线标识。这样路由器在控制器恢复/迁移后首次同步时必然收到全量数据状态避免残留旧索引导致的数据不一致对应 Issue #2549、#2707。HA 数据库恢复命令新增命令可将 HA 集群恢复到更早的数据库快照ziti agent controller restore-from-db /path/to/database.file变更日志记录的命令入口为ziti agent controller restore-from-db同时 Issue #2746 将 agent controller 命令移入agent cluster组当前仓库中的实现文件即为 ziti/cmd/agentcli/agent_cluster_restore_from_db.go其用法定义为restore-from-db path/to/source.db。该命令通过 agent 通道向控制器发送RaftRestoreFromDb类型的消息把数据库文件路径传给控制器。特别注意控制器在运行中收到要应用快照的指令时会把数据库移动到指定位置后自行关闭进程等待运维手动重启。这是因为控制器内部多处存在缓存重启才能确保所有组件与变更后的数据库保持完全一致。路由器控制器端点配置更新endpointsFile 取代 dataDir1.4.0 改变了路由器配置中控制器端点文件位置的设定方式。旧写法是在ctrl.dataDir目录下固定生成名为endpoints的文件# 旧写法 ctrl: dataDir: /path/to/dir新写法改为更灵活的endpointsFile全路径配置对应 Issue #2724# 新写法 ctrl: endpointsFile: /path/to/endpoints.file从当前仓库的配置加载代码router/env/config.go可见其解析逻辑与默认值if value, found : submap[endpointsFile]; found { cfg.Ctrl.EndpointsFile value.(string) } else { cfg.Ctrl.EndpointsFile filepath.Join(filepath.Dir(cfg.path), endpoints.yml) }默认位置为路由器配置文件所在目录下的endpoints.yml。这里有一个值得注意的演进1.4.0 变更日志中描述默认文件名为endpoints与旧行为一致而 1.4.1 通过 Issue #2849 将默认扩展名调整为.yml与仓库当前代码保持一致。若未显式配置endpointsFile升级后请留意目录下生成文件的名称变化。路由器启动加载逻辑router/router.go会优先从 endpoints 文件读取控制器端点列表若文件不存在则退回使用配置文件中的初始端点并记录日志if _, err : os.Stat(endpointsFile); err ! nil errors.Is(err, fs.ErrNotExist) { log.Infof(controller endpoints file [%v] doesnt exist. Using initial endpoints from config, endpointsFile) } else { log.Infof(loading controller endpoints from [%v], endpointsFile) ... }注册enrollment时预填控制器列表1.4 起路由器注册enrollment结果会包含注册时已知的控制器集合对应 Issue #2728、#2108。这同样适用于单机控制器前提是配置了advertiseAddressctrl: listener: tls:0.0.0.0:6262 options: advertiseAddress: tls:ctrl1.ziti.example.com这意味着控制器地址不再需要手动写入配置文件——注册过程会正确地初始化该值。此外1.4.0 还针对 advertise address 增加了启动期校验Issue #2722、#2723启动时探测广告地址以确保 SAN 正确xweb 侧也会校验广告主机/IP 已在 identity 块中定义了证书。ziti ops verify 命令族重构ziti ops verify是用于验证 overlay 网络配置正确性的命令组入口见 ziti/cmd/ops/verify/ops_verify.go。1.4.0 对其中两个子命令做了位置调整ziti ops verify-network→ziti ops verify network校验 overlay 网络配置见 ziti/cmd/ops/verify/ops_verify_network.goziti ops verify traffic→ziti ops verify traffic命令位置统一到verify组下。同时新增了ziti ops verify ext-jwt-signer oidc子命令Issue #2720 还修复了该命令仅打印 usage 的问题帮助运维验证 OIDC 外部认证配置。该命令的实现位于 ziti/cmd/ops/verify/ext-jwt-signer/oidc/oidc.go用法为ziti ops verify ext-jwt-signer oidc signer-name它会实际走一遍 OIDC 授权码 PKCE 流程从外部 JWT signer 换取令牌并打印 ID Token / Access Token / Refresh Token 的 JWT payload 供排查。可用参数包括参数说明--controller-url控制器地址-a, --additional-scopes追加请求的 scope 列表-r, --redirect-url期望监听的回调地址默认http://localhost:20314/auth/callback--authenticate额外使用指定 ext-jwt-signer 尝试向控制器认证--id-token/--refresh-token/--access-token将对应令牌原文打印到屏幕谨慎使用组件更新与关键修复ziti 主仓库 1.4.0 的亮点修复1.4.0 涉及的 Issue 众多除上文已展开的主题外还有几项值得关注Issue #2807路由器缓存 ER/T terminator ID加快重启速度Issue #2288edge router/tunneler 承载场景的 Chaos TestIssue #2821ziti ops db du新增--human-readable与--max-depth选项Issue #2742非成员 peer 连接且未加入集群时产生事件Issue #2774API Session 证书 SPIFFE ID 在路由器侧校验失败的问题Issue #2737备用服务器证书导致的 OIDC issuer 不匹配Issue #2672posture check 的 PUT 不更新嵌套结构PATCH 正常的缺陷Issue #2681支持指定 external jwt signer 使用哪个令牌Issue #2713无 edge 组件的路由器不再订阅 RDM 更新Issue #2745移除 cluster 的initialMembers配置项Issue #2756移除ziti agent cluster init-from-db命令由restore-from-db取代。依赖组件版本与关联修复1.4.0 同时升级了一批 OpenZiti 生态依赖其中携带明确修复的有channel/v3v3.0.26 → v3.0.37重连通道新增 DisconnectHandlersdk-golangv0.23.44 → v0.24.1新增控制代理到控制器/路由器连接的 API修复高并发大流量写入下 E2E 加密的排序问题storagev0.3.15 → v0.4.5修复快照工作不正常的问题xweb/v2v2.1.3 → v2.2.1校验广告主机/IP 在 identity 块中定义了证书。后续补丁版本1.4.1修复控制器在线状态Issue #2854、更新 Raft 配置默认值Issue #2829、endpoints 文件默认扩展名改为.ymlIssue #28491.4.2修复路由器健康检查在无效地址下仍不停止监听的问题Issue #28601.4.3修复使用 API Session 证书的连接无法拨号的问题Issue #2865。升级建议小结将所有 HA 控制器配置中的raft:段重命名为cluster:并确认dataDir存在检查事件消费端事件命名空间已单数化service、usage等新增timestamp与event_src_id字段旧命名空间仍兼容但建议尽早迁移集群运维脚本中将ziti fabric raft、ziti agent controller命令迁移到ziti ops cluster、ziti agent cluster入口路由器配置改用ctrl.endpointsFile全路径默认文件名为配置文件同目录下的endpoints.yml1.4.1 起重新注册路由器可自动预填控制器列表需要做 HA 数据库恢复时使用ziti agent cluster restore-from-db db文件路径并预期控制器会主动关闭、需手动重启OIDC 外部认证排障可借助新的ziti ops verify ext-jwt-signer oidc命令完整走一遍认证流程。赞分享零信任网络后端认证鉴权【免费下载链接】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点击查看免费下载相关推荐GlazeWM配置文件备份与恢复版本控制与迁移策略GlazeWM配置文件备份与恢复版本控制与迁移策略 为什么需要配置备份 你是否曾经花费数小时调整窗口管理器的布局规则、快捷键和外观设置却在系统重装或设备更桌面应用Nuclide字体渲染配置备份迁移与恢复Nuclide字体渲染配置备份迁移与恢复 一、字体渲染配置概述 Nuclide作为基于Atom构建的开源IDE其字体渲染效果直接影响开发体验。良好的字体配置开发工具PHP支付聚合神器Payment一站式接入微信、支付宝、招行三大支付渠道PHP支付聚合神器Payment一站式接入微信、支付宝、招行三大支付渠道 在当今电商和在线服务蓬勃发展的时代高效集成多种支付渠道已成为开发者的核心需求。PH后端金融科技上一篇llama-stack模型推理结果缓存一致性分布式锁实现下一篇Vssue性能优化技巧提升评论系统加载速度的7个方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表