为 GitOps 做准备
GitOps 使用 Git 仓库作为 Ingress Controller 安装及其路由资源的事实来源。你无需运行安装命令并手动维护生成的对象,而是在 Git 中声明期望状态。GitOps Controller 会持续协调提交到仓库的变更、检测集群差异,并在发生漂移时恢复声明的状态。这种拉取式工作流使变更可审查、可跨环境重复执行,也能通过 Git 历史恢复。
Git 仓库可以包含 Controller Helm Chart 配置、CRD 所有权设置、凭证引用,以及 GatewayProxy、Gateway 和 HTTPRoute 等资源。Argo CD 和 Flux 等 GitOps 工具负责协调这些 Kubernetes 资源。Ingress Controller 监视路由资源,将其转换并同步为最终的网关配置。
GitOps 管理 Kubernetes 层;Ingress Controller 仍负责转换路由资源并同步网关配置。
在使用 Argo CD 或 Flux 安装 Ingress Controller 前,请准备仓库结构、资源与 CRD 所有权,以及 Controller 凭证。完成后,请继续阅读下一步中对应的操作流程。
前置条件
开始前,请确保满足以下要求:
- GitOps Controller 可以读取一个 Git 仓库。
- 有权创建 Ingress Controller 使用的命名空间、RBAC 资源、准入 Webhook 配置和 CRD。
- 已有一种 Secret 管理方案,能够在目标集群中创建 Secret,而无需在 Git 中存储明文凭证或私钥。
- 已部署 APISIX Gateway 和 Admin API Service,或有权访问 API7 Dashboard 并创建
Ingress Controller类型的网关组。 - Controller Pod 可以通过网络访问 APISIX Admin API 或 API7 控制面。
组织仓库
将集群基础设施与应用路由资源分开。以下示例把每个集群的 Controller 和共享 Gateway 资源放在平台团队负责的基础设施目录中,而应用路由仍由对应应用团队管理:
clusters/
production/
infrastructure/
ingress-controller/
gateway-resources/
applications/
payments/
将 Argo CD Application,或 Flux HelmRepository 和 HelmRelease 清单存放在 infrastructure/ingress-controller/ 中。如果多个集群共享配置,请把可复用的 base 或 component 放在单独的顶层目录中,并让各集群引用。请根据平台的所有权模型调整目录名称和仓库边界。
普通 Chart values 可以保存在 Git 中。敏感值应通过已有 Secret、加密 Secret Controller 或外部 Secret 存储提供。固定 Chart 版本和远程清单版本;不要让集群级 CRD 引用持续变化的分支。
选择 Kubernetes 资源的存储方式
本文档中的工作流使用官方 Helm Chart 安装 Ingress Controller。Argo CD 渲染该 Chart 并协调其输出;Flux Helm Controller 则通过 HelmRelease 完成安装和升级。
Gateway 和应用资源具有独立生命周期。请根据平台现有的 Kubernetes 应用管理方式选择其来源格式:
| 来源格式 | 适用场景 | GitOps 集成方式 |
|---|---|---|
| 普通 Kubernetes YAML | 各环境拥有独立资源集,或只需少量定制。 | 让 Argo CD Application 或 Flux Kustomization 指向清单目录。这也是各工具专用指南的默认路径。 |
| Kustomize base 和 overlay | 多个环境共享大部分资源,只需少量明确差异。 | 让 Argo CD 或 Flux 指向选定的 overlay。 |
| 应用 Helm Chart | 应用已用 Chart 打包 Deployment、Service 和路由资源,或需要大量由 values 驱动的配置。 | 使用独立的 Argo CD Application 或 Flux HelmRelease 协调该 Chart,并与 Controller Release 分开。 |
这些格式最终都会生成 Ingress Controller 监视的 Kubernetes 资源。格式选择不会改变 Controller 转换和同步资源的方式。
规划资源所有权
每个对象只能由一个协调器管理。不要让 Argo CD、Flux、其他 Helm Release 和手动执行的 kubectl apply 同时管理同一资源。
| 资源 | 推荐所有者 | 注意事项 |
|---|---|---|
| Ingress Controller 命名空间 | 平台 GitOps 配置 |