1. 课程导论与整体架构
1.1 为什么需要多集群服务网格?
在单集群 Kubernetes 环境中,服务网格(如 Istio)已经能够提供流量管理、可观测性、安全通信等能力。然而,随着业务规模增长、合规要求(数据本地化)、多云/混合云战略的推进,单集群架构逐渐暴露出以下瓶颈:
- 集群规模上限:单一集群节点数超过 5000 或 Pod 数超过 15 万时,etcd 和 API Server 性能急剧下降。
- 故障域隔离:单集群故障(如控制面崩溃、升级失败)会影响所有业务。
- 地域延迟与合规:用户请求需要就近接入,数据必须留在特定区域。
- 环境隔离:开发、测试、预发、生产环境需要物理或逻辑隔离。
多集群服务网格的核心价值在于:在保持服务间透明通信(L7 流量治理)的前提下,将多个 Kubernetes 集群抽象为一个统一的“超级集群”。它解决了上述单集群痛点,同时提供了跨集群的负载均衡、故障转移、灰度发布和安全策略。
关键指标:采用多集群服务网格后,跨区域请求延迟可降低 40%-60%(通过就近路由),故障恢复时间(RTO)从分钟级缩短至秒级(通过跨集群故障转移),运维人员管理集群数量可提升 3-5 倍。
1.2 课程目标与学习路径
本课程旨在帮助学员从零构建一套生产级别的 K8s 发布流水线 + 多集群服务网格集成 体系。完成本课程后,你将能够:
| 能力维度 | 具体目标 | 对应章节 |
|---|---|---|
| 架构设计 | 设计多集群服务网格的拓扑(主-远程、多主、共享控制面) | 第 2-4 章 |
| 流水线自动化 | 使用 GitOps + ArgoCD 实现跨集群的声明式发布 | 第 5-10 章 |
| 服务网格集成 | 配置 Istio 跨集群流量管理、安全策略与可观测性 | 第 11-18 章 |
| 故障演练与运维 | 实现跨集群故障转移、灰度发布与回滚 | 第 19-25 章 |
| 生产化落地 | 证书管理、多租户隔离、成本优化与监控告警 | 第 26-30 章 |
1.3 整体技术栈
本课程采用业界主流且经过大规模生产验证的技术组件。所有组件均为开源或 CNCF 毕业/孵化项目。
| 技术领域 | 组件 | 版本 | 作用 |
|---|---|---|---|
| 容器编排 | Kubernetes | ≥ 1.27 | 底层集群管理与 Pod 调度 |
| 服务网格 | Istio | ≥ 1.20 | 跨集群 L7 流量治理、安全、可观测 |
| GitOps 工具 | ArgoCD | ≥ 2.9 | 声明式多集群应用部署与同步 |
| CI 引擎 | GitLab CI / GitHub Actions | 最新稳定 | 镜像构建、单元测试、流水线触发 |
| 镜像仓库 | Harbor | ≥ 2.9 | 镜像存储、漏洞扫描、复制策略 |
| 可观测性 | Prometheus + Grafana + Kiali | 最新稳定 | 指标采集、可视化、服务拓扑 |
| 证书管理 | cert-manager | ≥ 1.13 | 自动签发与轮换 mTLS 证书 |
1.4 整体架构图
下图展示了本课程将要构建的完整架构。它包含三个核心平面:CI 流水线平面、GitOps 控制平面、多集群服务网格数据平面。
架构要点:本课程采用 主-远程(Primary-Remote) 多集群拓扑。集群 A 作为主集群,运行 Istio 控制面(Istiod),并通过 东西向网关 与集群 B、C 建立安全隧道。ArgoCD 部署在独立的控制集群中,通过 ApplicationSet 实现一次配置、多集群同步。CI 流水线仅负责镜像构建与推送,不直接操作集群,实现“构建一次,部署多地”。
1.5 课程核心流程
从代码提交到多集群服务网格生效,完整的发布流水线包含以下 7 个步骤:
- 代码提交:开发者推送代码至 Git 仓库,触发 CI 流水线。
- 镜像构建与推送:CI 引擎编译代码、运行单元测试、构建容器镜像,并推送至 Harbor 镜像仓库。
- 更新部署清单:CI 流水线自动更新 GitOps 仓库中的 Kubernetes 清单文件(如 Deployment 镜像标签)。
- ArgoCD 检测变更:ArgoCD 检测到 GitOps 仓库的变更,根据 ApplicationSet 模板生成目标集群的 Application 资源。
- 多集群同步:ArgoCD 将更新后的清单同步至集群 A、B、C,触发 Pod 滚动更新。
- 服务网格注入:Istio 的 Sidecar Injector 自动为新的 Pod 注入 Envoy 代理,并注册到服务网格。
- 流量切换:通过 Istio 的 VirtualService 和 DestinationRule 实现灰度发布或跨集群流量路由。
常见误区:不要将 CI 流水线直接用于多集群部署(如 kubectl apply 到多个集群)。这种做法会导致配置漂移、权限分散、回滚困难。本课程坚持 GitOps 模式:CI 只负责构建,CD 由 ArgoCD 统一管理,确保所有集群的期望状态与 Git 仓库完全一致。
1.6 课程实验环境说明
为了降低学习门槛,本课程提供一套基于 Kind(Kubernetes in Docker) 的本地实验环境。你可以在单台机器上模拟 3 个集群的多网格拓扑。
| 集群角色 | 集群名称 | API Server 端口 | Istio 角色 |
|---|---|---|---|
| 主集群 | kind-cluster-a | 6443 | Primary(运行 Istiod) |
| 远程集群 1 | kind-cluster-b | 6444 | Remote(连接至 Primary) |
| 远程集群 2 | kind-cluster-c | 6445 | Remote(连接至 Primary) |