Gitea + Kubernetes + Registry + Logto CI/CD 方案

2026-10-08
  • 2
  • 0
  • 0

1. 目标与原则

本方案面向私有化部署或内网研发环境,目标是交付可审计、可回滚、权限最小化的持续集成与持续发布能力。

核心原则:

2. 总体架构

开发者
  |
  v
Gitea (源代码、PR、代码审查、Actions)
  |
  v
Gitea Actions Runner (构建、测试、扫描、签名)
  |                         |
  |                         +--> 质量报告 / 测试结果
  v
Harbor Registry (镜像、扫描、签名、保留策略)
  |
  v
GitOps 配置仓库 (Helm/Kustomize,镜像 digest)
  |
  v
Argo CD / Flux (拉取配置、同步、健康检查)
  |
  v
Kubernetes 集群 (dev / staging / production)
​
Logto (OIDC SSO、MFA、组织/角色)
  |--> Gitea
  |--> Harbor
  |--> Argo CD
  |--> Grafana / 其他运维平台

3. 组件选型与职责

组件

推荐实现

职责

代码与 CI

Gitea + act_runner

源码托管、PR 审查、流水线执行

镜像仓库

Harbor

私有 OCI Registry、扫描、机器人账号、镜像保留和权限管理

集群交付

Argo CD

GitOps 同步、漂移修复、健康检查、审计

身份认证

Logto

OIDC 单点登录、MFA、组织与角色

发布策略

Argo Rollouts

金丝雀/蓝绿、指标驱动的自动回滚

策略准入

Kyverno 或 OPA Gatekeeper

阻止不符合规范的工作负载进入集群

可观测性

Prometheus + Grafana + Loki

指标、告警和日志,支持发布验证

说明:Harbor 优于单独的 Docker Distribution Registry,因为它提供镜像扫描、项目隔离、机器人账号、复制和保留策略等生产环境所需能力。

4. 仓库划分

建议将应用源码和环境部署声明拆分,避免应用 CI 获得集群配置的写权限。

service-a/                         # 应用仓库
  .gitea/workflows/
    pr.yml                          # PR 验证
    build.yml                       # 合并后构建与推送
  Dockerfile
  src/
  tests/
  deploy/                           # Helm chart 或 Kustomize base(可选)
​
platform-gitops/                   # GitOps 仓库
  apps/
    service-a/
      base/
      overlays/
        dev/
        staging/
        production/
  clusters/
    dev/
    staging/
    production/

环境目录只引用固定镜像 digest:

images:
  - name: harbor.example.internal/team/service-a
    digest: sha256:0123456789abcdef...

不要以 latest 或可变的分支标签部署生产环境。

5. 分支与环境策略

事件

目标

结果

创建/更新 PR

临时验证环境或共享 dev

测试、扫描、可选 Preview 环境

合并至 main

dev

构建并推送镜像,自动更新 dev GitOps 配置

创建 Release Candidate

staging

将已验证 digest 晋级,执行端到端和验收测试

生产发布 PR 合并

production

将同一 digest 晋级至生产,金丝雀或蓝绿发布

紧急回滚

production

回滚 GitOps 提交或 Rollout 修订版本

生产环境 GitOps 目录应设置分支保护和强制审批。建议至少要求服务负责人或发布负责人审批,不允许直接推送。

6. CI 流水线

6.1 PR 验证

  1. 检出代码并恢复依赖缓存。

  2. 执行格式检查、静态检查和单元测试。

  3. 执行依赖漏洞扫描、密钥扫描和 SAST。

  4. 构建镜像,执行基础镜像和应用依赖扫描。

  5. 生成测试报告;按需部署短生命周期 Preview Namespace。

  6. 所有质量门禁通过后,PR 才可合并。

6.2 合并后的制品构建

  1. 使用固定构建上下文构建 OCI 镜像。

  2. 镜像同时打版本标签与不可变提交标签,例如 1.8.0、main-a1b2c3d。

  3. 推送至 Harbor。

  4. 使用 Syft 生成 SBOM,存储为制品或附加到镜像。

  5. 使用 Trivy/Grype 进行镜像扫描;阻断达到组织阈值的高危漏洞。

  6. 使用 Cosign 对镜像 digest 签名。

  7. 自动创建 GitOps 仓库 PR,更新 dev 环境到该 digest;由机器人账号提交。

7. CD 与发布策略

Argo CD 持续监听 GitOps 仓库。合并环境配置后,它负责将声明同步到对应 Kubernetes 集群并报告健康状态。

Dev

Staging

Production

8. 权限与安全设计

Logto 统一身份

Logto 作为 OIDC Provider,接入 Gitea、Harbor、Argo CD、Grafana 等平台。建议角色映射如下:

Logto 角色

Gitea

Harbor

Argo CD

Developer

项目读写、创建 PR

拉取开发项目镜像

只读 dev 应用状态

Maintainer

合并受保护分支

推送团队镜像

同步 dev/staging

Release Manager

审批生产 GitOps PR

生产项目读写

生产同步权限

Platform Admin

平台管理

Harbor 管理

Argo CD 管理

生产发布、平台管理员和机器人账号必须启用 MFA 或等效的强认证机制。

Kubernetes RBAC

制品准入

用 Kyverno 或 Gatekeeper 实施以下规则:

9. Runner 设计

10. 回滚与灾备

应用回滚

首选回滚 GitOps 仓库中镜像 digest 的提交,形成完整审计记录。金丝雀发布期间由 Argo Rollouts 自动回滚。

平台备份

定期做恢复演练。备份存在不等于可恢复。

11. 推荐实施顺序

  1. 部署 Logto,定义组织、角色、MFA 和 OIDC 应用。

  2. 部署 Gitea 与 Harbor,并接入 Logto SSO。

  3. 部署 Kubernetes Runner,完成一个服务的 PR 检查和镜像推送。

  4. 建立 GitOps 仓库,部署 Argo CD 并接入 Logto。

  5. 为第一个服务打通 dev 自动部署和 Git 回滚。

  6. 接入 staging、生产审批和 Argo Rollouts。

  7. 增加 Trivy、SBOM、Cosign、Kyverno 与安全例外流程。

  8. 接入 Prometheus、Grafana、Loki,使用发布指标驱动发布决策。

  9. 完成备份、恢复和权限审计演练。

12. 最小可用版本

第一阶段可先交付:

Gitea + act_runner + Harbor + Argo CD + Logto

该阶段至少应具备:PR 测试、镜像构建和推送、镜像 digest 写入 GitOps、Argo CD 自动同步 dev、Logto SSO、生产 GitOps PR 审批。

后续增强:

Trivy + Syft + Cosign + Kyverno + Argo Rollouts + Prometheus/Grafana/Loki

13. 验收标准