构建高可用云原生架构:从云基础组件到 K8s 控制平面的全景指南
构建高可用云原生架构:从云基础组件到 K8s 控制平面的全景指南(含架构图详解)
在当今的云原生时代,无论是后端开发者、运维工程师还是架构师,每天都会被各种眼花缭乱的技术名词包围:ECS、SLB、mTLS、Service Mesh、Kube-OVN、声明式 API……
这些概念看似分散在各个领域,但实际上它们共同拼图成了现代高可用、高并发应用的基础设施骨架。本文将通过一张张架构图,带你从底层的云服务器,一路漫游到 Kubernetes 的控制平面大脑。
第一层:云上的"砖块"与"门卫"——ECS 与 SLB
所有云上架构的起点,都离不开计算与流量分发。在阿里云等公有云体系中,最基础的黄金组合就是 ECS(弹性计算服务,即虚拟机)与 SLB(负载均衡)。
经典组合架构全景图
1 | 公网用户 |
图解:一次请求的完整生命周期
- 公网入口:用户请求首先打到 SLB 绑定的 EIP(弹性公网 IP)上。EIP 绑定到 SLB 而非单台 ECS,是为了保证后端实例可以自由扩缩、故障切换,而公网入口地址保持不变。
- 流量分发:SLB 根据监听器规则(四层 TCP 或七层 HTTP)和负载均衡算法(加权轮询、最小连接数等),选择一台健康的后端 ECS。
- 业务处理:ECS 处理业务逻辑,期间可能访问 RDS 读数据、Redis 读缓存。
- 健康检查:SLB 周期性探测后端 ECS,一旦某可用区节点异常,自动将其从负载均衡池剔除,流量转给健康节点——这就是高可用的本质。
- 弹性伸缩:当 ESS 监测到 ECS CPU 超过阈值(如 70%),分钟级扩容新实例并自动挂载到 SLB 后端;流量低谷时自动缩容释放,成本随流量曲线动态匹配。
SLB 产品家族选型表
| 类型 | 协议层 | 核心能力 | 单实例性能 | 典型场景 |
|---|---|---|---|---|
| ALB(应用型) | 七层 HTTP/HTTPS/QUIC | 基于域名/路径/Header/Cookie 的内容路由 | 最高 100 万 QPS | Web 应用、API 网关、灰度发布、K8s Ingress |
| NLB(网络型) | 四层 TCP/UDP/TCPSSL | 超高性能、自动弹性、全端口监听 | 最高 1 亿并发连接 | IoT/MQTT、游戏、音视频、高并发 TCP |
| CLB(传统型) | 四层 + 基础七层 | 老牌产品,仅基础转发 | 100 万并发 / 5 万 QPS | 存量系统沿用(新业务不推荐) |
| GWLB(网关型) | 三层 IP | 通过 Geneve 隧道做透明流量牵引 | — | 防火墙、IDS/IPS 安全设备集群 |
实战场景:电商"双 11"零点流量洪峰——NLB 自动弹性扩容承接千万级并发连接;ESS 监测到 CPU 超标后分钟级扩容几十台 ECS 并自动挂到 NLB 后端;RDS 通过只读实例扛住读流量;高峰过后自动缩容。这就是"接入层 + 计算层 + 数据层"黄金组合的价值。
第二层:走进 K8s 网络——Subnet、EIP、mTLS 与 Service Mesh
当业务复杂到一定程度,传统 ECS 架构往往让位于 Kubernetes 容器化架构。在 K8s 多租户安全网络中,四个核心概念构成一条完整链路:
四概念协作关系图
1 | 公网用户 |
1. Subnet(子网)——Pod 的"门牌号规划"
子网是通过 CIDR 划分出的独立 IP 地址段(如 10.16.0.0/16 可容纳 6 万多个地址)。在 Kube-OVN 中,每个 Subnet 对应一个 OVN Logical Switch,Namespace 可绑定到 Subnet,其下所有 Pod 自动从该段分配 IP:
1 | apiVersion: kubeovn.io/v1 |
典型用法:生产、测试、财务系统分别绑定三个 Subnet,用 ACL 在子网边界做访问控制;给 KubeVirt 虚拟机预留静态 IP 段,保证热迁移时 IP 不变。
2. EIP(弹性公网 IP)——可漂移的"大门牌"
EIP 是独立持有的公网 IP 资源,位于云厂商公网网关上,通过 NAT 映射到被绑定的资源。它的核心价值在于解耦:把 EIP 从集群 A 的 SLB 解绑、绑到集群 B 的 SLB,秒级完成灾备切换,DNS 不变、用户无感。
在 Kube-OVN 多租户场景下,还有 VpcEip 和 VpcNatGateway CRD,让每个租户 VPC 拥有独立的 EIP 和 SNAT/DNAT 规则。
3. mTLS(双向 TLS)——服务间的"双向验明正身"
传统 TLS 只有客户端验证服务器;mTLS 要求双方都出示证书并互相验证。握手流程:
1 | ClientHello → ServerHello + 服务器证书 + CertificateRequest |
在 Istio 零信任体系中,每个 Service Account 都会获得一张内含 SPIFFE 身份的短期证书(如 spiffe://cluster.local/ns/default/sa/my-service),默认 24 小时自动轮换。通过以下 CRD 即可强制整个命名空间走 mTLS:
1 | apiVersion: security.istio.io/v1 |
4. Service Mesh(服务网格)——流量治理的"总调度台"
Mesh 通过在 Pod 旁注入 Envoy 代理,把路由、重试、加密、遥测从业务代码中剥离。最经典的玩法是声明式灰度发布:
1 | apiVersion: networking.istio.io/v1beta1 |
实战场景:大促前将新推荐算法从 1% 逐步放量到 100%,只需修改 weight 字段;同时通过遥测面板观察新版本 P99 延迟,异常立即回滚 weight 为 0,全程零业务代码改动。
第三层:理清网络栈的"三剑客"——kube-proxy、CNI 与 Istio
三者分层数据路径图
一个跨节点 HTTP 请求的完整旅程,三条链路在同一份数据包上依次叠加:
1 | ┌─────────────────── Pod A 所在节点 ───────────────────┐ |
多维对比总览
| 维度 | kube-proxy | CNI(Kube-OVN) | Istio |
|---|---|---|---|
| 所在层级 | L4(TCP/UDP) | L2/L3 组网为主 | L4–L7 应用层 |
| 核心职责 | Service 虚拟 IP → Pod 转发 | Pod 网卡创建、IPAM、跨节点隧道、子网/VPC | 流量管理、mTLS、可观测性、熔断 |
| 实现机制 | iptables / IPVS / nftables | OVS 流表 + Geneve 隧道 | iptables/eBPF 劫持到 Envoy |
| 典型 API | Service、EndpointSlice | Subnet、VPC、VpcNatGateway | VirtualService、DestinationRule |
| 有无代理 | 无(纯内核规则) | 无(流表+隧道) | 有(Envoy / ztunnel) |
三个高频混淆点
- “Istio 替代 kube-proxy?” —— 不替代,是叠加。即便装了 Istio,kube-proxy 的 ClusterIP 转发规则依然生效。
- “Istio-CNI 是网络插件吗?” —— 不是。它只负责写流量劫持规则,Pod IP 分配仍由真正的网络 CNI 完成。
- “Kube-OVN 能替代 Istio 吗?” —— 不能。它能做 L3/L4 的 NetworkPolicy,但做不了 HTTP 路由、金丝雀、分布式追踪。
配置冲突提醒:Kube-OVN 安装时必须通过
--service-cluster-ip-range显式感知 Service CIDR,否则其规则可能与 kube-proxy 冲突,导致 Service 无法访问。
第四层:所有一切背后的"大脑"——Kubernetes-like 控制平面
控制平面与数据平面分离架构
1 | ┌───────────────── 控制平面(决策层)──────────────────┐ |
这套架构的底层逻辑是两大设计模式:
- 声明式 API:用户声明"我要 3 个 nginx:1.25 副本",而非"启动 3 个容器"。
- 调谐循环:控制器持续执行
Watch → Diff → Act → 更新 status。它是水平触发(周期性检查整体状态,宕机恢复后可重新收敛)且幂等(同一函数执行多次结果一致)的,因此天然具备故障自愈与漂移纠正能力。
该范式在五大场景中的落地
| 场景 | 代表系统 | Desired State | Actual State | 控制器做的事 |
|---|---|---|---|---|
| 云资源管理 | Crossplane | YAML 声明的 Bucket/RDS | 云厂商上的真实资源 | 调用云 API 创建资源,发现控制台手改后自动纠正 |
| 服务网格 | Istio | VirtualService 路由规则 | 各 Pod 中 Envoy 的实际配置 | istiod 把 CRD 转换为 Envoy 配置并下发 |
| GitOps | ArgoCD | Git 仓库中的 YAML | 集群实际运行的资源 | 持续 Diff,发现漂移即同步/告警,回滚 = git revert |
| 多集群管理 | Karmada | 用户提交的资源 + PropagationPolicy | 各成员集群中的资源 | 按策略分发到上百个集群,支持 Push/Pull 两种模式 |
| 虚拟机管理 | KubeVirt | VirtualMachine CRD | 节点上 libvirt/QEMU 运行的 VM | VM 与 Pod 同一控制平面管理,支持热迁移、快照 |
结语:一张总图看懂全局
把四层知识串联起来,就是现代云上应用的完整骨架:
1 | [声明式控制平面] ← ArgoCD/Crossplane/Istiod/Karmada 统一调度 |
掌握各概念的分层定位——ECS 提供计算、SLB 提供入口、Subnet 规划地址、EIP 解耦公网、CNI 打通 Pod、kube-proxy 转发 Service、Mesh 治理东西向、控制平面声明一切——你就能在面对"该用 Kube-OVN 还是 Istio"、“该自建 VM 还是上 K8s”、"如何做流量灰度"这类问题时,迅速判断出归属与最佳组合。希望这篇带图详解的扫盲指南,能成为你探索云原生深水区的一张全景地图。