diff --git a/README.md b/README.md index f970c38..7f6cec8 100644 --- a/README.md +++ b/README.md @@ -178,8 +178,8 @@ Redis、PostgreSQL 和 Controller fixture 脚本会使用 Docker 启动隔离依 ./scripts/test-controller.ps1 ``` -本地 Compose 还会启动 Controller、两个固定身份的 Gateway 和一个 Checker。首次启动前 -生成仅用于本机的 7 天 mTLS 证书;输出目录受 `.gitignore` 保护,脚本拒绝写入非空目录: +本地 Compose 还会启动 Controller、两个从开发证书派生身份的 Gateway 和一个 Checker。 +首次启动前生成仅用于本机的 7 天 mTLS 证书;输出目录受 `.gitignore` 保护,脚本拒绝写入非空目录: ```powershell ./scripts/generate-local-controlplane-certs.ps1 diff --git a/docs/development/implementation-plan.md b/docs/development/implementation-plan.md index 0d10be6..dc54574 100644 --- a/docs/development/implementation-plan.md +++ b/docs/development/implementation-plan.md @@ -376,7 +376,7 @@ Gateway 热路径。`platform/logging` 以 JSON `slog` 输出进程级致命错 CI 另有独立 Deployment job,在占位凭据下渲染 Compose,并使用 `kubectl kustomize` 渲染 Kubernetes base 和单副本 development mTLS Overlay;它不启动容器、不访问真实存储或密钥。 development Overlay 已挂载独立 Controller/Gateway/Checker TLS Secret、启用 Checker 和最小 -网络策略,但固定 `gateway-a`、`checker-a` 身份且 HPA 锁为单副本,不能代替生产证书轮换。 +网络策略,并从固定开发证书派生 `gateway-a`、`checker-a` 身份且 HPA 锁为单副本,不能代替生产证书轮换。 控制面 TLS 叶证书和信任根已在每次新握手时从文件加载,短暂文件不一致时保留最后一次有效材料; 生产 Overlay 仍必须由工作负载身份系统提供每副本唯一 SPIFFE URI 和弹性身份注入。 diff --git a/docs/requirements/completion-audit.md b/docs/requirements/completion-audit.md index 4a882e5..2ecb5e0 100644 --- a/docs/requirements/completion-audit.md +++ b/docs/requirements/completion-audit.md @@ -104,7 +104,7 @@ CI 已配置 Linux race job。PostgreSQL 18 和 Redis 8.2 的隔离 Adapter fixt 已经运行;本地 Compose 已声明 Controller、两个独立 Gateway 身份和一个 Checker 的 mTLS 运行拓扑,并由配置、证书、命令装配和部署契约测试覆盖。Kubernetes base 刻意不直接 启用 Checker;`development-mtls` Overlay 已为单副本 Controller、Gateway 和 Checker -提供固定开发身份、mTLS Secret 挂载、最小出站 NetworkPolicy 与渲染/配置契约验证。 +提供固定开发证书、运行时身份派生、mTLS Secret 挂载、最小出站 NetworkPolicy 与渲染/配置契约验证。 Controller、Gateway 与 Checker 的叶证书和信任根已在每个新 TLS 握手时重载,文件短暂 不一致时保留最后一次有效材料。生产环境仍必须通过独立 Overlay 为每个弹性 Worker 注入 唯一 SPIFFE URI,且容器端到端启动仍待具备镜像网络的环境验证。 @@ -127,7 +127,7 @@ Queue、配置、指标和部署契约分别锁定一次性 Extract、队列容 与 p99 告警;仍需代表性环境的流量压测和容量报告。 3. Provider 长期凭据回收与累计额度的生产运营策略仍需结合实际供应商合同、失效时间和 密钥平台完成演练。 -4. Kubernetes 的开发 mTLS Overlay 已覆盖单副本固定身份和 Checker 出站 +4. Kubernetes 的开发 mTLS Overlay 已覆盖单副本开发证书身份派生和 Checker 出站 NetworkPolicy;生产环境仍需要按工作负载身份系统提供证书轮换、每副本唯一 Worker ID 与可弹性扩缩容的身份注入,base 清单不假定或伪造这些能力。 5. Redis/PostgreSQL 故障转移、控制面断线恢复、Snapshot 回滚、Drain 回收和 Extract diff --git a/docs/requirements/traceability.md b/docs/requirements/traceability.md index 0cac854..08db705 100644 --- a/docs/requirements/traceability.md +++ b/docs/requirements/traceability.md @@ -9,7 +9,7 @@ |---|---|---|---| | ARCH-001 | 数据面 Worker 与控制面 Controller 分离 | 1-70 | 包、协议和部署拓扑已分离;Controller 已运行 Worker Register/Watch/ACK/Runtime/Outcome 与 Checker Observation gRPC,并发布 Proxy/Gateway Routing/按引用去重凭据完整快照;Checker 任务流已具备有界领取、租约栅栏和任务期凭据契约。Gateway 已将快照编译为同版本动态 View,并由独立进程维护控制面会话。`proxy-checker` 与 Redis BASIC/EGRESS/TARGET 共享任务运行态、`proxy-loadgen` 有界 HTTP/CONNECT/Extract 校验场景均已实现 | | ARCH-002 | 热路径只做认证、本地路由和网络转发 | 1-70, 380-430 | Gateway bootstrap 集成测试验证启动期控制面会话与快照就绪,HTTP 请求只走本地 Snapshot/Dispatch;Outcome 仅写入有界非阻塞本地队列,代表性性能剖析待完成 | -| ARCH-003 | Gateway、Distribution、Admin、Metrics 独立入口 | 8904-8958 | Controller 命令已装配 Distribution/Admin/Metrics 三个独立监听及联动停机;Gateway 命令已装配代理与 Metrics 监听。本地 Compose 已声明 Controller/Gateway/Checker mTLS 拓扑;Kubernetes `development-mtls` Overlay 已通过渲染与配置契约验证单副本固定身份链路,生产工作负载身份仍待环境实现 | +| ARCH-003 | Gateway、Distribution、Admin、Metrics 独立入口 | 8904-8958 | Controller 命令已装配 Distribution/Admin/Metrics 三个独立监听及联动停机;Gateway 命令已装配代理与 Metrics 监听。本地 Compose 已声明 Controller/Gateway/Checker mTLS 拓扑;Kubernetes `development-mtls` Overlay 已通过渲染与配置契约验证单副本开发证书身份派生链路,生产工作负载身份仍待环境实现 | | ARCH-004 | Controller 集中 Provider 获取与切换 | 1403-1580 | Redis Leader、动态 Provider Supervisor 与 Bootstrap 生产装配已完成;静态配置与 Admin 管理态共同决定 Provider 启停,停用策略以 Upstream revision 栅栏驱动既有 ownership Drain;Routing 切换会向本进程 Worker 快照流广播完整刷新,多副本按定时刷新与权威 HMAC 指纹/revision 栅栏收敛并拒绝旧配置换主 | | ARCH-005 | 100k QPS 峰值使用多 Worker 集群 | 当前会话 | 未验证设计目标;待代表性集群负载报告 | diff --git a/progress.md b/progress.md index 1b4101c..b5a1f3d 100644 --- a/progress.md +++ b/progress.md @@ -2,12 +2,16 @@ ## 2026-08-07 +- 控制面 mTLS 身份新增公共 `tlsreload.ResolveSPIFFEIdentity`:Gateway 和 Checker 在 + `PROXY_POOL_AUTO_IDENTITY=true` 时只接受与信任域、环境和角色精确匹配的唯一 SPIFFE URI, + 并在显式 ID 不匹配时拒绝启动。Compose 与 Kubernetes 开发 mTLS Overlay 已移除手工 ID, + 改由挂载证书派生;定向 Go、文档、Compose、Kustomize 与严格配置校验均通过。 - Gateway 静态 `routing.action: direct` 已贯通严格配置、控制面协议、完整 Snapshot、 HTTP/CONNECT 转发和目标地址策略。直连请求不会申请 Proxy 容量、创建粘性绑定或上报 Proxy Outcome;`onUnavailable.action: direct` 仍保留为代理无候选时的独立回退语义。 - Loadgen 固定速率模式已修复截止时排队令牌的记账:`generated = requests + dropped`, 防止报告将未执行的请求误记为已发送。 -- Compose 已启用 Controller、两个固定身份 Gateway 和 Checker 的本地 mTLS 控制面; +- Compose 已启用 Controller、两个从开发证书派生身份 Gateway 和 Checker 的本地 mTLS 控制面; PowerShell/.NET 证书生成器输出 7 天 Controller DNS SAN 与角色隔离的 SPIFFE URI, 私钥目录被 Git 忽略。Checker 新增 `/livez`、`/readyz`、`/metrics`,首次成功领取任务 批次后才 Ready,后续领取失败会撤销 Ready。 diff --git a/task_plan.md b/task_plan.md index c9e9d62..e32fce2 100644 --- a/task_plan.md +++ b/task_plan.md @@ -52,7 +52,9 @@ 收敛。Health Scheduler 现以相同 revision 合并配置与管理态启用状态,管理态停用会停止 该 Upstream 的新 BASIC/EGRESS/TARGET 任务,停用 Routing 仅停止其新 TARGET 任务。 Gateway 请求生命周期直方图、Grafana 仪表盘、指标契约检查和 p99 延迟告警已完成; - 后续以真实容器、集群故障演练和代表性负载报告完成运行态验证闭环。 + Gateway/Checker 现可通过 `PROXY_POOL_AUTO_IDENTITY=true` 从唯一角色 SPIFFE URI + 派生逻辑与缺省实例 ID;Compose 与开发 mTLS Overlay 已使用该公共路径。后续以真实容器、 + 集群故障演练和代表性负载报告完成运行态验证闭环。 ## 串并行关系 @@ -76,7 +78,7 @@ 代理配置,未能在本机完成 Compose 容器端到端启动。 - Controller、Gateway、Checker、Loadgen、Provider Fleet、WorkerControlPlane、业务指标和 Redis 故障边界均有实现与定向测试。Kubernetes `development-mtls` Overlay 已静态验证 - 单副本固定身份链路;真实容器故障转移、生产工作负载身份与代表性集群压测仍属于后续验证范围。 + 单副本开发证书身份派生链路;真实容器故障转移、生产工作负载身份与代表性集群压测仍属于后续验证范围。 - `implementation-plan.md` 当前完成 73/75 个验收项;验收勾选数不等同于生产就绪度。 Compose 本地 mTLS 控制面运行链已实现并通过配置、证书、单元与构建验证;受本机 Docker Desktop 镜像 HTTPS 代理缺失影响,容器端到端启动仍待具备镜像网络的环境复核。