diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e41b6e..6ea0767 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,13 @@ jobs: - shell: pwsh run: ./scripts/verify-proto.ps1 + image: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build Linux application image + run: docker build --file deploy/docker/Dockerfile --tag proxy-pool:ci . + deployment: runs-on: ubuntu-latest env: diff --git a/deploy/ci_test.go b/deploy/ci_test.go index 9d49c40..5d5a170 100644 --- a/deploy/ci_test.go +++ b/deploy/ci_test.go @@ -22,7 +22,7 @@ func TestCIValidatesProtocolAndDeploymentAssets(t *testing.T) { if !ok { t.Fatal("ci workflow has no jobs") } - for _, name := range []string{"openapi", "proto", "deployment", "test", "race", "integration"} { + for _, name := range []string{"openapi", "proto", "image", "deployment", "test", "race", "integration"} { if _, exists := jobs[name]; !exists { t.Errorf("ci workflow has no %s job", name) } @@ -30,6 +30,7 @@ func TestCIValidatesProtocolAndDeploymentAssets(t *testing.T) { for _, required := range []string{ "./scripts/verify-openapi.ps1", "./scripts/verify-proto.ps1", + "docker build --file deploy/docker/Dockerfile --tag proxy-pool:ci .", "docker compose -f deploy/docker-compose.yml config --quiet", "docker compose -f deploy/docker-compose.test.yml config --quiet", "go run ./deploy/tools/configcheck deploy/config/local.yaml", diff --git a/docs/development/implementation-plan.md b/docs/development/implementation-plan.md index dc9ac38..5fb8e7b 100644 --- a/docs/development/implementation-plan.md +++ b/docs/development/implementation-plan.md @@ -377,6 +377,8 @@ Gateway 热路径。`platform/logging` 以 JSON `slog` 输出进程级致命错 CI 另有独立 Deployment job,在占位凭据下渲染 Compose,并使用 `kubectl kustomize` 渲染 Kubernetes base 和单副本 development mTLS Overlay;该 job 同时展开测试 Compose、 校验本地 Compose 配置。它不启动容器、不访问真实存储或密钥。 +独立 Image job 会构建 Linux 多阶段应用镜像,覆盖 Dockerfile、Linux 交叉编译与运行时层; +容器服务编排和业务运行链路仍需在具备镜像网络的环境中验证。 development Overlay 已挂载独立 Controller/Gateway/Checker TLS Secret、启用 Checker 和最小 网络策略,并从固定开发证书派生 `gateway-a`、`checker-a` 身份且 HPA 锁为单副本,不能代替生产证书轮换。 控制面 TLS 叶证书和信任根已在每次新握手时从文件加载,短暂文件不一致时保留最后一次有效材料; diff --git a/docs/requirements/completion-audit.md b/docs/requirements/completion-audit.md index cd7c7b3..357930d 100644 --- a/docs/requirements/completion-audit.md +++ b/docs/requirements/completion-audit.md @@ -114,6 +114,9 @@ SPIFFE URI 解析器:X.509-SVID 叶证书必须且只能包含一个 URI SAN 生产环境仍必须通过独立 Overlay 为每个弹性 Worker 注入唯一 SPIFFE URI,且容器端到端 启动仍待具备镜像网络的环境验证。 +GitHub Actions 另行执行 Dockerfile 的 Linux 多阶段镜像构建;该门禁证明镜像可以构建, +不替代 Controller/Gateway/Checker 与真实 Redis/PostgreSQL 的容器运行验证。 + 运维手册已覆盖管理面/活动池恢复顺序、发布与兼容回滚、Secret 轮换、容量计算,以及 主机内核、文件描述符、NAT/conntrack 的只读基线和证据采集要求;这些文档不替代真实环境 的备份恢复、驱逐或容量演练。 diff --git a/findings.md b/findings.md index fbcb4ad..b44e128 100644 --- a/findings.md +++ b/findings.md @@ -286,3 +286,9 @@ Routing 自上而下匹配,首条命中停止;支持 Gateway 与 Extract 两 - development mTLS Overlay 的 ConfigMap 采用 Kustomize 内容哈希,渲染契约要求三个工作负载 都引用同一版本化名称,因此配置变更进入 Pod 模板并触发滚动。外部固定名称 Secret 不含内容哈希, 它们的轮换需要平台侧 reloader 或受控显式滚动;这一限制已写入运行手册。 + +## Linux 镜像构建审计(2026-08-07) + +- GitHub Actions 现在在 Linux Runner 执行 Dockerfile 多阶段构建,覆盖目标平台 Go 编译和最小 + 运行时层。该 job 依赖 Runner 镜像网络;它不启动 Compose 服务,因此不能作为 mTLS、存储、 + 探针或优雅停机端到端证据。 diff --git a/progress.md b/progress.md index 5284f56..0a19396 100644 --- a/progress.md +++ b/progress.md @@ -2,6 +2,8 @@ ## 2026-08-07 +- GitHub Actions 新增 Linux Dockerfile 镜像构建 job,覆盖多阶段交叉编译和运行时镜像层; + 本机不具备基础镜像网络,因此未将其替代为本地 Compose 运行验证。 - 已校正 `proxy-loadgen` 架构文档:HTTP、CONNECT 长连接和 Extract 都已实现;仅故障注入、 进程级资源采样和代表性集群报告仍未完成。 - Kubernetes 开发 mTLS Overlay 恢复 ConfigMap 内容哈希:配置更新会重写 Controller、Gateway