系统全貌
现代企业级 K8s 架构已不只是容器编排,本质是分布式操作系统 + 云原生应用平台。
全链路架构图(详细版)
本图为概念示意,重在串联各层职责。生产部署的具体组合会有差异(如 CDN 是否内置 WAF、L7 是否在集群外、Service Mesh 是否走 Sidecar),细节见各子章节。
═══════════════════════════════════════════════════════════════════
【0. 用户端 / 网络层】
═══════════════════════════════════════════════════════════════════
用户在浏览器输入 https://example.com
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 浏览器缓存检查 │
│ │
│ 强缓存(Cache-Control: max-age / Expires) │
│ 命中且未过期 ─► 直接读取本地,不发出任何请求 │
│ │
│ 协商缓存(ETag / Last-Modified) │
│ 强缓存失效 ─► 带 If-None-Match / If-Modified-Since 发请求 │
│ ├── 304 Not Modified(服务端未变更) │
│ └── 200 + 新内容(服务端已变更) │
│ │
│ 可缓存内容:HTML / JS / CSS / 图片 / 字体 / API 响应 │
│ Service Worker:PWA 离线缓存,可拦截所有请求 │
│ │
│ 无缓存 / 缓存失效 ─► 进入 DNS 解析 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ DNS 解析(自上而下查找,命中即返回) │
│ │
│ 浏览器 DNS 缓存 │
│ ↓ miss │
│ OS DNS 缓存 / hosts 文件 / 系统 stub 解析器 │
│ ↓ miss │
│ 递归解析器(ISP / 8.8.8.8 / 1.1.1.1) │
│ ↓ 迭代查询 │
│ Root DNS(.) → TLD DNS(.com) → 权威 DNS(example.com) │
│ │
│ 权威 DNS 内置 GSLB 能力(即智能权威 DNS) │
│ 按 EDNS-Client-Subnet / LDNS 来源 IP 智能解析 │
│ 返回最近的 CDN 节点 A / AAAA 记录 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ TCP 三次握手(与 DNS 返回的 CDN 节点建立) │
│ │
│ Client ────── SYN ──────► CDN 节点 │
│ Client ◄──── SYN-ACK ──── CDN 节点 │
│ Client ────── ACK ──────► CDN 节点 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ TLS 1.3 握手(HTTPS) │
│ │
│ ① ClientHello:key_share + 加密套件 + ALPN(h2, http/1.1) │
│ ② ServerHello:选定 key_share + Certificate + CertVerify │
│ ③ 双方基于 ECDHE 派生对称密钥(前向安全,无 RSA 密钥交换) │
│ ④ Finished:1-RTT 完成;ALPN 协商出 HTTP/2,后续数据加密 │
│ │
│ ※ 0-RTT 会话恢复可在首包带数据,但存在重放风险 │
└─────────────────────────────────────────────────────────────────┘
│
▼
通过 ALPN 协商应用层协议:
HTTP/2 ── 多路复用 + HPACK 头部压缩 + 流优先级
HTTP/3 ── 基于 QUIC over UDP,零队头阻塞,0-RTT 重连
※ HTTP/2 Server Push 在 Chrome 106+ 已移除,改用 103 Early Hints
═══════════════════════════════════════════════════════════════════
【1. 接入层(K8s 集群外)】
═══════════════════════════════════════════════════════════════════
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 全球 CDN(边缘缓存 + 内置安全) │
│ │
│ Cloudflare / Akamai / 阿里云 CDN / Fastly │
│ ├── 命中缓存(HTML / JS / CSS / 图片)→ 直接返回 │
│ └── 未命中 → 回源(走下方链路) │
│ │
│ 附带能力:DDoS 防护 / WAF / TLS 卸载 / HTTP→HTTPS 重定向 │
│ ※ CDN 已内置 WAF / DDoS 时,下方独立一层可省略 │
└─────────────────────────────────────────────────────────────────┘
│ 动态请求 / 缓存未命中(回源)
▼
┌─────────────────────────────────────────────────────────────────┐
│ 独立 WAF / Anti-DDoS(可选,当 CDN 不含时部署) │
│ │
│ ├── SQL 注入 / XSS / CSRF / SSRF 规则匹配 │
│ ├── CC 攻击识别(高频相同 UA / IP / 设备指纹) │
│ └── 流量清洗中心(超阈值流量引流清洗) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 四层负载均衡 L4(TCP / UDP) │
│ │
│ LVS / AWS NLB / 阿里云 SLB / F5 / MetalLB │
│ ├── 内核态转发,百万 QPS │
│ └── 分发到集群入口(多数场景直达 Ingress / LoadBalancer Pod) │
└─────────────────────────────────────────────────────────────────┘
│
│ 现代 K8s:L4 LB 直接打到集群内 Ingress Controller
│ 老式部署:L4 → 独立 L7 LB(Nginx / Envoy)→ NodePort
▼
═══════════════════════════════════════════════════════════════════
【2. Kubernetes 集群】
═══════════════════════════════════════════════════════════════════
K8s 是云原生底座。集群由「控制面 + 多 Worker Node」组成,通过
apiserver 暴露声明式 API,所有组件以「期望状态 vs 实际状态」的
Reconcile Loop 协调。下面按 整体 → 管理面 → 节点 → 资源 → 网络
→ 存储 → 调度 → 扩缩容 → 安全 → 入口 → 业务 → 基础设施 →
关键运维流程 展开。
┌─ 2.0 整体架构鸟瞰 ────────────────────────────────────────────┐
│ │
│ ┌──────────── Control Plane(管理面)─────────────┐ │
│ │ kube-apiserver ◄──► etcd │ │
│ │ scheduler controller-manager ccm │ │
│ └────────────────────────┬────────────────────────┘ │
│ │ Watch + Reconcile │
│ ┌────────────────────────▼───────────────────────────────┐ │
│ │ Worker Nodes(数据面 / 业务运行) │ │
│ │ │ │
│ │ Node A Node B Node C │ │
│ │ kubelet kubelet kubelet │ │
│ │ kube-proxy kube-proxy kube-proxy │ │
│ │ CRI runtime CRI runtime CRI runtime │ │
│ │ CNI / CSI CNI / CSI CNI / CSI │ │
│ │ [Pod][Pod] [Pod][Pod][Pod] [Pod][Pod] │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ 外部依赖:LB / 镜像仓库 / 对象存储 / 监控 / 日志 / 外部 DNS │
│ 集群类型:自建(kubeadm / kops)/ 托管(EKS / GKE / ACK) │
└────────────────────────────────────────────────────────────────┘
┌─ 2.1 管理面(Control Plane,不在请求路径上)──────────────────┐
│ │
│ kube-apiserver(集群唯一入口,REST over HTTPS / mTLS) │
│ 请求处理 8 个阶段: │
│ 1. HTTP 解析 / TLS / mTLS │
│ 2. Authentication(X509 / Bearer Token / OIDC / Webhook) │
│ 3. Authorization(RBAC / Node / ABAC / Webhook) │
│ 4. Mutating Admission(注入 sidecar、加默认值) │
│ 5. Schema 校验(OpenAPI / CRD Validation) │
│ 6. Validating Admission(最终策略校验,如 Kyverno) │
│ 7. 写入 etcd(强一致) │
│ 8. Watch 通知所有订阅者(controller / kubelet 等) │
│ 扩展:Aggregation Layer 聚合 metrics-server / 自定义 API │
│ │
│ etcd(Raft 一致性 KV,集群唯一事实来源) │
│ Leader 处理写 → Append Log → 多数派确认 → Commit │
│ Quorum:3 节点容忍 1,5 节点容忍 2 │
│ Key 格式:/registry/<resource>/<namespace>/<name> │
│ 生产建议:3 / 5 节点、SSD、专属网络、定期 snapshot │
│ 监控指标:disk_wal_fsync_p99 < 10ms,否则集群抖动 │
│ │
│ scheduler(基于 Scheduler Framework 插件化) │
│ 阶段:QueueSort → PreFilter → Filter → PostFilter → │
│ PreScore → Score → Reserve → Permit → PreBind → │
│ Bind → PostBind │
│ Filter 例:资源足够 / 污点容忍 / 亲和性 / Volume 拓扑 │
│ Score 例:资源均衡 / 节点亲和度 / 镜像本地化 │
│ │
│ controller-manager(数十个 Controller 循环 Reconcile) │
│ 工作负载:Deployment / ReplicaSet / StatefulSet / DaemonSet │
│ 服务: Service / Endpoint / EndpointSlice │
│ 存储: PV Binder / Attach-Detach / Expander │
│ 任务: Job / CronJob / TTL / GC │
│ 身份: ServiceAccount / Token / Namespace │
│ 其他: HPA / Disruption / Lease / ResourceQuota │
│ │
│ cloud-controller-manager(解耦云厂商依赖,独立进程) │
│ Node Controller / Route / Service LB / Volume Attach │
└────────────────────────────────────────────────────────────────┘
┌─ 2.2 Worker Node 与 Pod 内部结构 ────────────────────────────┐
│ │
│ 节点关键组件: │
│ kubelet 核心 Agent,由 systemd 守护 │
│ SyncLoop 4 个事件源驱动(API / File / HTTP / PLEG) │
│ PLEG 周期性 relist 容器状态,生成 Pod 事件 │
│ ProbeManager 执行 startup / liveness / readiness 探针 │
│ VolumeManager 挂载 / 卸载卷 │
│ StatusManager 上报 Pod 状态到 apiserver │
│ cAdvisor 采集容器 CPU / Mem / Net 指标 │
│ kube-proxy 维护 Service 转发规则(可被 Cilium 替代) │
│ Container Runtime (CRI):containerd / CRI-O │
│ Network Plugin (CNI):Calico / Cilium / Flannel / Weave │
│ Storage Plugin (CSI):云盘 / Ceph / OpenEBS / Longhorn │
│ │
│ CRI / CNI / CSI 三剑客(K8s 与底层解耦标准接口): │
│ CRI Container Runtime Interface(gRPC,容器生命周期) │
│ CNI Container Network Interface(exec 命令,Pod 网络) │
│ CSI Container Storage Interface(gRPC,存储卷管理) │
│ │
│ Pod 沙箱原理(Linux 内核能力,非虚拟机): │
│ pause 容器 持有共享 Net / IPC / UTS Namespace │
│ 所有业务容器加入这些 Namespace │
│ Linux Namespace:Net / PID / IPC / UTS / Mount / User │
│ cgroups v2:限制 CPU / Memory / IO / PIDs │
│ rootfs:容器镜像层(OverlayFS) │
│ │
│ Pod 内部容器分类: │
│ Init Containers 顺序执行(建表、迁移、下载配置) │
│ 主容器 1..N 并行执行业务(共享 Net + Volume) │
│ Sidecar 容器 网格代理 / 日志采集 / 监控 │
│ │
│ Pod 生命周期状态机: │
│ Pending → ContainerCreating → Running → │
│ Succeeded / Failed / Unknown │
│ 回收:Terminating(preStop → SIGTERM → grace → SIGKILL) │
│ │
│ 探针(Probe): │
│ liveness 失败 → kubelet 重启容器 │
│ readiness 失败 → 从 EndpointSlice 摘除,不接流量 │
│ startup 保护慢启动应用(启动阶段禁用 liveness) │
└────────────────────────────────────────────────────────────────┘
┌─ 2.3 核心资源对象(工作负载 + 配置存储)─────────────────────┐
│ │
│ 工作负载(Workload)选型: │
│ 类型 适用场景 关键特性 │
│ ───────────────────────────────────────────────────────── │
│ Deployment 无状态服务(多数业务) 滚动更新 / 回滚 │
│ StatefulSet 有状态(DB / MQ) 固定名 + PVC + 序 │
│ DaemonSet 每 Node 一份 日志 / 监控 / CNI │
│ Job 一次性任务 完成即退出 │
│ CronJob 定时任务 cron 表达式 │
│ ReplicaSet 副本数控制 通常被 Deployment │
│ 间接使用 │
│ │
│ 配置注入 4 种方式: │
│ ① env ConfigMap / Secret 单个 key 注入环境变量 │
│ ② envFrom 整个 ConfigMap / Secret 注入 │
│ ③ volume 挂载为文件(K8s 自动同步更新,不重启) │
│ ④ projected 多种来源合并为一个 volume │
│ │
│ Secret 注意事项: │
│ - 默认仅 Base64 编码,不是加密 │
│ - 启用 etcd Encryption at Rest(KMS Provider) │
│ - 生产推荐 External Secrets Operator + Vault / KMS │
│ │
│ Downward API:把 Pod 自身元数据(ns / IP / 注解 / 资源)注入 │
│ 通过 fieldRef / resourceFieldRef 暴露给容器 │
│ │
│ PV / PVC / StorageClass → 详见 2.5 │
└────────────────────────────────────────────────────────────────┘
┌─ 2.4 网络模型(CNI / Service / DNS / Policy)────────────────┐
│ │
│ K8s 网络三原则(CNI 实现必须满足): │
│ ① 所有 Pod 不经 NAT 互通 │
│ ② Pod 看到的自己 IP = 其他 Pod 看到的 IP │
│ ③ Node 与 Pod 互通不经 NAT │
│ │
│ 主流 CNI 对比: │
│ Calico IPIP / VXLAN / BGP,NetworkPolicy 完备 │
│ Cilium eBPF,可替代 kube-proxy,L7 策略,性能极佳 │
│ Flannel 简单 VXLAN,性能一般 │
│ Weave 简单,已少用 │
│ AWS VPC 云原生,Pod 直接拿 VPC IP,无 overlay │
│ │
│ Service 类型: │
│ ClusterIP 集群内访问(默认) │
│ NodePort 节点端口 30000-32767 对外暴露 │
│ LoadBalancer 云厂商自动分配外部 IP │
│ ExternalName CNAME 到外部域名 │
│ Headless clusterIP: None,直接返回 Pod IP 列表 │
│ │
│ Service 转发实现对比: │
│ iptables Netfilter 链 O(N),规则多时延迟上升 │
│ IPVS 内核 Hash 表 O(1),万级 Service 推荐 │
│ eBPF (Cilium) socket / TC 层短路,性能最佳,无 iptables 链 │
│ │
│ 集群内 DNS(CoreDNS): │
│ 完整域名:<svc>.<namespace>.svc.cluster.local │
│ 同 ns 可简写:<svc> │
│ 跨 ns:<svc>.<namespace> │
│ Headless:返回所有 Pod IP(A 记录列表) │
│ StatefulSet:<pod>.<svc>.<ns>.svc.cluster.local(稳定) │
│ │
│ NetworkPolicy(默认全通,需主动启用限制): │
│ 匹配标签 → 允许 / 拒绝 Ingress / Egress 流量 │
│ 需 CNI 支持(Flannel 不支持,Calico / Cilium 支持) │
│ │
│ Ingress / Gateway API → 详见 2.9 │
│ Service Mesh → 详见 2.10 │
└────────────────────────────────────────────────────────────────┘
┌─ 2.5 存储模型(PV / PVC / StorageClass / CSI)───────────────┐
│ │
│ 三层抽象 + 动态供给链路: │
│ │
│ Pod ──► PVC(声明 size / accessMode / Class) │
│ │ │
│ ▼ │
│ StorageClass(动态供给模板,参数:类型 / 加密) │
│ │ │
│ ▼ │
│ CSI Driver(external-provisioner Sidecar + Driver) │
│ │ │
│ ▼ │
│ 底层存储(EBS / 阿里云盘 / Ceph RBD / NFS / SSD) │
│ │ │
│ ▼ │
│ 自动创建 PV → 绑定 PVC → kubelet 挂载到 Pod │
│ │
│ 访问模式: │
│ RWO ReadWriteOnce 单节点读写(云盘默认) │
│ ROX ReadOnlyMany 多节点只读 │
│ RWX ReadWriteMany 多节点读写(NFS / CephFS) │
│ RWOP ReadWriteOncePod 单 Pod 读写(更严格) │
│ │
│ 回收策略:Retain(保留)/ Delete(自动删除) │
│ 在线扩容:StorageClass 设 AllowVolumeExpansion: true │
│ 快照恢复:VolumeSnapshot + VolumeSnapshotContent │
│ │
│ CSI Driver 三种 gRPC 服务: │
│ Identity 插件信息查询(必须) │
│ Controller Create / Delete / Attach / Snapshot(可选) │
│ Node NodeStage / NodePublish 挂载到 Pod(必须) │
│ │
│ 特殊卷:emptyDir / hostPath / configMap / secret / projected │
└────────────────────────────────────────────────────────────────┘
┌─ 2.6 调度与资源管理 ─────────────────────────────────────────┐
│ │
│ 调度框架插件点(Scheduler Framework): │
│ Pod 入队 ──► PriorityQueue │
│ │ │
│ ▼ │
│ PreFilter ─► Filter ─► PostFilter │
│ (筛掉资源不足 / 污点不容忍 / 反亲和冲突 / Volume 不可用) │
│ │ │
│ ▼ │
│ PreScore ─► Score ─► NormalizeScore │
│ (为每个候选节点打分,归一化到 0-100,选最高) │
│ │ │
│ ▼ │
│ Reserve ─► Permit ─► PreBind ─► Bind ─► PostBind │
│ (写入 etcd NodeName,kubelet 接管启动) │
│ │
│ 调度策略: │
│ nodeSelector 标签精确匹配(最简单) │
│ nodeAffinity required / preferred │
│ podAffinity / Anti 共置 / 反共置(按 topologyKey) │
│ taint / toleration 节点污点 → Pod 需主动容忍 │
│ topologySpreadConstraint 跨可用区 / 跨机架均衡 │
│ priorityClass + preempt 高优先级 Pod 可抢占低优先级 │
│ │
│ 资源管理: │
│ requests 调度依据(保证最少资源) │
│ limits 运行上限(超 mem → OOMKill,超 cpu → throttle) │
│ │
│ QoS 三档(资源紧张时从上往下驱逐): │
│ BestEffort 未设置 requests / limits │
│ Burstable 设置但 requests ≠ limits │
│ Guaranteed requests == limits(关键服务推荐) │
│ │
│ 命名空间级限额: │
│ LimitRange 设置默认 / 上限 / 下限 │
│ ResourceQuota 命名空间总用量限制 │
│ │
│ 特殊资源: │
│ GPU nvidia.com/gpu,Device Plugin 上报 │
│ HugePages hugepages-2Mi / hugepages-1Gi │
│ 拓扑管理 TopologyManager 对齐 CPU / NUMA / GPU │
└────────────────────────────────────────────────────────────────┘
┌─ 2.7 自动扩缩容(Pod 层 + Node 层)──────────────────────────┐
│ │
│ Pod 层扩缩容: │
│ │
│ HPA(Horizontal Pod Autoscaler) │
│ 公式:desiredReplicas = │
│ ceil(currentReplicas × (currentMetric / target)) │
│ 指标来源:metrics-server(CPU / Mem) │
│ / Custom Metrics API │
│ / External Metrics API(Prometheus Adapter) │
│ 冷启动延迟:默认 15s 同步周期 │
│ 稳定窗口:扩容默认 0s,缩容默认 5min(防抖) │
│ │
│ VPA(Vertical Pod Autoscaler) │
│ 根据历史用量推荐 Request / Limit │
│ Recommender + Updater + Admission Controller 三组件 │
│ 需 Pod 重启生效(in-place resize 已 Beta) │
│ │
│ KEDA(Kubernetes Event-Driven Autoscaling) │
│ 50+ Scaler:Kafka 积压 / Redis 队列 / SQS / Cron / │
│ Prometheus / RabbitMQ / Azure Service Bus │
│ 可缩容到 0,按事件再唤醒 │
│ │
│ Node 层扩缩容: │
│ │
│ Cluster Autoscaler │
│ 监控 Pending Pod → 扩容预定义 NodeGroup → 等节点 Ready │
│ 节点利用率低(< 50% 持续 10min)→ 缩容 │
│ 限制:必须预先定义 ASG / 实例规格 │
│ │
│ Karpenter(AWS / Azure / 阿里云) │
│ 无预定义节点组,按 Pod 需求实时选机型 / AZ │
│ 冷启动从 90s 缩短到 ~30s │
│ NodePool + NodeClass CRD 声明可用资源池 │
│ Spot 感知,自动整理碎片节点 │
└────────────────────────────────────────────────────────────────┘
┌─ 2.8 安全与多租户 ───────────────────────────────────────────┐
│ │
│ 身份与权限(RBAC 关系链): │
│ 主体(Subject):User / Group / ServiceAccount │
│ │ │
│ │ 绑定 │
│ ▼ │
│ RoleBinding / ClusterRoleBinding │
│ │ │
│ │ 引用 │
│ ▼ │
│ Role / ClusterRole(apiGroups + resources + verbs) │
│ │
│ ServiceAccount(Pod 身份): │
│ 未指定时使用 namespace default SA │
│ Token 自动注入 /var/run/secrets/kubernetes.io/serviceaccount│
│ Bound Token(默认 1h 自动轮换,TokenRequest API) │
│ 审计:用 SA Token 调 apiserver 全程可追溯 │
│ │
│ Pod Security Admission(PSA,替代弃用的 PSP): │
│ 三档策略 ─ 在 namespace 上贴标签生效: │
│ privileged 无任何限制(仅可信组件 / CNI / 监控) │
│ baseline 防最低限度的特权升级(默认推荐) │
│ restricted 严格限制(不允许 root / hostPath / hostNet)│
│ 三种执行模式:enforce / audit / warn │
│ │
│ 内核级隔离: │
│ Seccomp 系统调用过滤(默认 RuntimeDefault) │
│ AppArmor 访问控制(路径 / 能力) │
│ SELinux MAC 强制访问控制 │
│ │
│ 网络隔离:NetworkPolicy / Cilium L7 策略 │
│ 准入控制:Kyverno / OPA Gatekeeper(策略即代码强制) │
│ 运行时检测:Falco / Tetragon(eBPF 监控系统调用) │
│ │
│ Secret 管理 → 详见 2.11 │
└────────────────────────────────────────────────────────────────┘
┌─ 2.9 入口流量层(Namespace: ingress,南北向流量)────────────┐
│ │
│ 入口实现演进(建议向 Gateway API 迁移): │
│ │
│ ① 传统 Ingress:nginx-ingress / Traefik │
│ 单一 CRD,特性靠 annotation 实现,跨实现不可移植 │
│ │
│ ② API Gateway:Kong / APISIX / Spring Cloud Gateway │
│ 插件丰富 / 协议转换强,但非 K8s 标准 │
│ │
│ ③ K8s Gateway API(新一代标准,1.0 GA) │
│ 角色分离 + 跨 namespace 引用 + 多协议(HTTP/gRPC/TCP/TLS) │
│ │
│ GatewayClass(运营方定义实现:nginx / Istio / Envoy ...) │
│ │ │
│ ▼ │
│ Gateway(集群管理员部署入口实例 + 监听端口 / 证书) │
│ │ │
│ ▼ │
│ HTTPRoute / GRPCRoute / TCPRoute / TLSRoute │
│ (应用开发者声明路由,可跨 namespace 引用 Gateway) │
│ │ │
│ ▼ │
│ Service(后端业务) │
│ │
│ 统一能力: │
│ 身份认证(JWT / OAuth2 / API Key) │
│ 限流(令牌桶 / 滑动窗口) │
│ 路由 & 灰度(Header / 权重 / 地域) │
│ 协议转换(REST ↔ gRPC)/ TLS 终止 │
│ 统一访问日志、指标采集(详见 [[架构/API网关]]) │
└────────────────────────────────────────────────────────────────┘
│
▼
┌─ 2.10 业务服务 + Service Mesh(东西向流量治理)──────────────┐
│ │
│ Service Mesh 数据面三种形态对比: │
│ │
│ ① Sidecar 模式(Istio 经典 / Linkerd) │
│ 每 Pod 注入 Envoy / linkerd2-proxy │
│ 流量路径:app → sidecar → 远端 sidecar → app │
│ ✓ 功能完整、生态成熟 │
│ ✗ 资源开销大(每 Pod +50~150MB),升级要重建 Pod │
│ │
│ ② Ambient 模式(Istio 1.22+ GA) │
│ L4 由 ztunnel(DaemonSet)处理 mTLS + L4 策略 │
│ L7 由 waypoint proxy 按需启用(每 namespace 一个) │
│ ✓ 无 Sidecar、资源省、升级不动业务 Pod │
│ ✓ 渐进式启用 L7 能力 │
│ │
│ ③ eBPF 数据面(Cilium Service Mesh) │
│ 内核态拦截,无用户态代理 │
│ ✓ 性能最佳、零额外延迟 │
│ ✗ L7 高级策略相对弱 │
│ │
│ 通用治理能力(不论哪种数据面): │
│ mTLS 自动签发与轮换(控制面颁发,业务无感知) │
│ 熔断 / 重试 / 超时 / 限流 │
│ 流量镜像(生产流量复制到测试环境) │
│ 金丝雀 / 蓝绿 / A/B 测试发布 │
│ 分布式追踪 / 访问日志 │
│ │
│ 业务调用示例: │
│ ┌──────────┐ gRPC ┌──────────┐ gRPC ┌──────────┐ │
│ │ user-svc │◄────►│order-svc │◄────►│ pay-svc │ │
│ │ Pod × N │ │ Pod × N │ │ Pod × N │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └── 读写缓存 / DB / MQ / ES / OSS / 向量库 ──────────────┼──► 数据层
└────────────────────────────────────────────────────────────────┘
┌─ 2.11 基础设施 Namespace(跨业务共用,不在请求路径上)───────┐
│ │
│ 服务注册与发现:CoreDNS(集群内)/ Nacos / Consul(跨集群) │
│ 配置中心:ConfigMap / Nacos / Apollo │
│ Secret 管理:Vault / SealedSecret / External Secrets / KMS │
│ │
│ Operator 模式(CRD + 自定义 Controller 扩展 K8s API): │
│ CRD 声明新资源类型(如 PostgresCluster) │
│ Operator 持续 Reconcile 该资源(建库、主备切换、备份) │
│ │
│ 典型 Operator: │
│ 数据库 PostgreSQL / MySQL / MongoDB Operator │
│ 缓存 Redis Operator(哨兵 / 集群模式) │
│ 消息 Strimzi (Kafka) / RabbitMQ Operator │
│ 监控 Prometheus Operator(一键部署监控栈) │
│ GitOps ArgoCD / Flux │
│ 证书 cert-manager(自动签发 Let's Encrypt) │
│ 备份 Velero(PV 数据 + K8s 对象备份恢复) │
│ │
│ 可观测组件:OTel Collector / Prometheus / Loki / Tempo │
│ │
│ 集群附加(kube-system / 各自专属 namespace): │
│ CoreDNS / metrics-server / kube-state-metrics / │
│ external-dns(自动同步 Service / Ingress 到外部 DNS)/ │
│ Descheduler(重调度优化分布) │
└────────────────────────────────────────────────────────────────┘
┌─ 2.12 关键运维流程(动态视角,把静态资源串成动作)───────────┐
│ │
│ A. kubectl apply 一个 Deployment 的完整链路 │
│ ────────────────────────────────────── │
│ kubectl apply -f deploy.yaml │
│ │ HTTPS + Token / 证书 │
│ ▼ │
│ apiserver:Auth → Authz(RBAC) → MutatingAdm → Schema → │
│ ValidatingAdm → 写 etcd │
│ │ │
│ ▼ │
│ etcd:Raft 日志同步 → 多数派提交 │
│ │ │
│ ▼ │
│ apiserver Watch 推送给所有订阅者 │
│ │ │
│ ├──► Deployment Controller │
│ │ diff 后创建 / 更新 ReplicaSet │
│ │ │ │
│ │ ▼ │
│ │ ReplicaSet Controller 创建 N 个 Pod(Pending) │
│ │ │
│ └──► scheduler 看到 Pending Pod │
│ Filter + Score + Bind → 写 spec.nodeName │
│ │ │
│ ▼ │
│ 目标 Node 上的 kubelet Watch 到 Pod 属于自己 │
│ │
│ B. Pod 启动完整链路(kubelet 视角) │
│ ────────────────────────────── │
│ kubelet SyncLoop 收到新 Pod 事件 │
│ │ │
│ ▼ │
│ VolumeManager:等 PVC 绑定 → 调 CSI Attach + Mount │
│ │ │
│ ▼ │
│ 调用 CRI RunPodSandbox: │
│ runtime 创建 pause 容器 │
│ 建立 Net / IPC / UTS Namespace │
│ │ │
│ ▼ │
│ 调用 CNI ADD: │
│ 分配 Pod IP,创建 veth pair,配置路由 + iptables │
│ │ │
│ ▼ │
│ 按顺序运行 Init Containers(任一失败 → 整个 Pod 失败) │
│ │ │
│ ▼ │
│ 并行启动主容器(ImagePull → Create → Start) │
│ │ │
│ ▼ │
│ ProbeManager:startup → readiness(Ready 才接流量) │
│ → liveness(持续探活) │
│ │ │
│ ▼ │
│ StatusManager:上报 Running + Ready 到 apiserver │
│ │ │
│ ▼ │
│ EndpointSlice Controller:把 Pod IP 加入 Service 端点 │
│ │
│ C. Service 流量到 Pod 的转发路径 │
│ ────────────────────────── │
│ 调用方 Pod 内 DNS 查询 svc.ns.svc.cluster.local │
│ │(CoreDNS 返回 ClusterIP,例 10.96.1.50) │
│ ▼ │
│ 发起 TCP 到 10.96.1.50:port │
│ │ │
│ ▼ │
│ 节点 kube-proxy 转发(按模式选其一): │
│ iptables Netfilter PREROUTING → DNAT → 随机选 Pod IP │
│ IPVS 内核 IPVS 表 O(1) Hash,多种调度算法 │
│ eBPF Cilium 在 socket / TC 层短路转发,省 iptables│
│ │ │
│ ▼ │
│ CNI 路由 → 目标 Pod │
│ 同 Node:直接 veth pair 转发 │
│ 跨 Node:走 overlay(VXLAN)或 underlay(BGP) │
│ │
│ D. PV 动态供给完整链路 │
│ ────────────── │
│ 用户创建 PVC(size / accessMode / storageClassName) │
│ │ │
│ ▼ │
│ external-provisioner(CSI sidecar)Watch 到 PVC │
│ │ │
│ ▼ │
│ 调用 CSI Driver Controller.CreateVolume │
│ │ │
│ ▼ │
│ 云 API 创建底层卷(EBS / 云盘 / Ceph image) │
│ │ │
│ ▼ │
│ 创建 PV 对象 → PV Binder 绑定到 PVC(Bound 状态) │
│ │ │
│ ▼ │
│ Pod 调度到节点 → external-attacher 调 ControllerPublish │
│ │(将卷 Attach 到节点) │
│ ▼ │
│ kubelet 调 CSI Node.NodeStageVolume / NodePublishVolume │
│ (格式化 + 全局挂载 + Bind Mount 到 Pod 路径) │
│ │ │
│ ▼ │
│ Pod 启动,使用挂载点 │
│ │
│ E. 节点故障自愈链路 │
│ ───────────── │
│ Node 心跳停止(kubelet 与 apiserver 失联) │
│ │ │
│ ▼ 默认 40s 后 │
│ Node Controller 标记 NodeReady=False │
│ │ │
│ ▼ 默认 5min(pod-eviction-timeout) │
│ 标记 Node 上 Pod 为 Terminating,触发 Pod 重调度 │
│ │ │
│ ▼ │
│ 新节点上重新拉起 Pod(StatefulSet 需手动确认避免脑裂) │
└────────────────────────────────────────────────────────────────┘
═══════════════════════════════════════════════════════════════════
【3. 数据层】
═══════════════════════════════════════════════════════════════════
┌─────────────────────────────────────────────────────────────────┐
│ 三级缓存 │
│ │
│ 业务服务 ─► L1 本地缓存(Caffeine,进程内,< 1ms) │
│ │ miss │
│ L2 分布式缓存(Redis Cluster,1~5ms) │
│ │ miss │
│ L3 数据库(10~100ms) │
│ │
│ Redis Cluster(16384 Slot 分片,每 Master 配 Slave 副本): │
│ Master 0(Slot 0~5460) Slave 0 │
│ Master 1(Slot 5461~10922) Slave 1 │
│ Master 2(Slot 10923~16383) Slave 2 │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 关系型数据库 │
│ │
│ 写请求 ──► 主库 Master │
│ │ Binlog 复制(异步 / 半同步 / 组提交) │
│ ┌────┴────┐ │
│ ▼ ▼ │
│ Slave 1 Slave 2 ◄── 读请求(读写分离) │
│ │
│ 分库分表:ShardingSphere / Vitess │
│ 分布式 DB:TiDB(MySQL 兼容,自动分片,HTAP) │
│ 备份:定时全量 + Binlog 增量,异地容灾 │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 消息队列 │
│ │
│ Producer → Kafka / RocketMQ / Pulsar Broker Cluster │
│ │ 多 Partition 并行 │
│ │ 多副本持久化(ISR / 同步刷盘) │
│ Consumer Group │
│ ├── 业务消费者(异步处理) │
│ ├── CDC 消费者(同步 ES / 缓存) │
│ └── 日志消费者(写入数仓 / Iceberg) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 搜索引擎 │
│ │
│ DB Binlog → Canal / Debezium → Kafka → ES Indexer │
│ │ │
│ Elasticsearch Cluster │
│ ├── 倒排索引(全文搜索) │
│ ├── 聚合分析 │
│ └── kNN 向量检索(混合检索) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 对象存储 │
│ │
│ S3 / 阿里云 OSS / MinIO │
│ ├── 图片 / 视频 / 文档 / 模型文件 / 备份 │
│ ├── 配合 CDN 分发静态资源 │
│ └── 生命周期:标准 → 低频 → 归档 → 自动删除 │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 向量数据库(AI 层) │
│ │
│ Qdrant / Milvus / pgvector / Weaviate │
│ ├── 文本 / 图片 / 多模态 Embedding 存储 │
│ └── ANN 索引(HNSW / IVF)用于 RAG / 以图搜图 / 推荐召回 │
└─────────────────────────────────────────────────────────────────┘
═══════════════════════════════════════════════════════════════════
【4. 横切关注点】
═══════════════════════════════════════════════════════════════════
┌─────────────────────────────────────────────────────────────────┐
│ 可观测性 │
│ │
│ 所有组件 → OpenTelemetry Collector │
│ ├── Metrics → Prometheus → Grafana │
│ ├── Logs → Loki / ELK → Grafana / Kibana │
│ └── Traces → Tempo / Jaeger → Grafana │
│ │
│ 告警:AlertManager → 钉钉 / Slack / PagerDuty │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ CI/CD & GitOps │
│ │
│ Git Push → CI(构建 / 测试 / 镜像扫描 Trivy / 推送 Registry) │
│ → 更新 Git 仓库中的镜像 Tag │
│ → ArgoCD / Flux 检测变更 → Sync 到 K8s │
│ → 滚动更新 / 金丝雀 / 蓝绿发布 │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 云原生安全(Zero Trust) │
│ │
│ 外部:CDN / WAF / DDoS 清洗 │
│ 传输:TLS(外部)/ mTLS(Service Mesh 自动签发与轮换) │
│ 身份:RBAC / OIDC / ServiceAccount │
│ 网络:NetworkPolicy / Cilium L7 策略(Pod 级防火墙) │
│ 密钥:Vault / KMS(动态 Secret,自动轮换) │
│ 供应链:Trivy / Snyk 镜像扫描 + Cosign 签名 + SBOM │
│ 运行时:Falco / Tetragon(eBPF 异常行为检测) │
│ 准入控制:Kyverno / OPA Gatekeeper(策略强制) │
└─────────────────────────────────────────────────────────────────┘
一次完整请求的生命周期
1 用户输入 URL
2 浏览器检查强缓存(Cache-Control: max-age)→ 命中则直接使用本地,流程结束
3 强缓存过期 → 协商缓存(携带 ETag / Last-Modified)→ 304 则继续用本地,流程结束
4 无缓存 → DNS 解析:浏览器 → OS(含 hosts)→ 递归解析器 → 权威 DNS(GSLB)返回 CDN IP
5 TCP 三次握手(与 CDN 节点建立连接)
6 TLS 1.3 握手(1-RTT;ALPN 在握手中协商出 HTTP/2 或 HTTP/3)
7 HTTP/2 请求发出
8 CDN 命中缓存(HTML / JS / CSS / 图片)→ 直接返回,流程结束
9 CDN 未命中 → 回源,经 WAF / Anti-DDoS 过滤恶意流量
10 L4 LB 转发 TCP → 进入 K8s 集群(现代部署直达 Ingress Controller)
11 Ingress / API Gateway / Gateway API 按 Host / Path 路由
12 网关:验证 JWT → 限流 → 路由 / 灰度 → 转发到目标 Service
13 Service Mesh(Sidecar / Ambient / eBPF)接管东西向流量:mTLS + 熔断 + 重试
14 业务服务:查 L1 本地缓存 → L2 Redis → L3 数据库
15 若需异步:写消息到 Kafka → 其他服务消费
16 若需搜索:查询 Elasticsearch(全文 / kNN)
17 若需大文件:读写对象存储(S3 / OSS)
18 组装响应,逐层返回给客户端,浏览器按响应头写入缓存
19 全程:每个组件的 Metrics / Logs / Traces 上报 OTel Collector
分层概览
| 层级 | 职责 | 详情 |
|---|---|---|
| 网络前置 | DNS / TCP / TLS | DNS · TCP · UDP · HTTPS · TLS |
| 流量入口层 | CDN、WAF、L4/L7 LB、Ingress | 流量入口层 |
| API 网关 | 鉴权、限流、路由、灰度 | API 网关 |
| 云原生 | K8s、网格、观测、CI/CD、安全、AI | 云原生概述 |
| Kubernetes 核心 | 控制平面、Worker Node、核心资源 | Kubernetes 核心 |
| 服务网格 | 服务治理、mTLS、熔断、链路追踪 | 服务网格 |
| RPC 与服务通信 | gRPC、Dubbo、多语言通信 | RPC 与服务通信 |
| 服务注册与发现 | CoreDNS、Nacos、Consul | 服务注册与发现 |
| 配置中心 | 动态配置、灰度发布、Feature Flag | 配置中心 |
| 消息队列 | 异步解耦、削峰填谷 | 消息队列 |
| 数据库架构 | 主从、分库分表、分布式数据库 | 数据库架构 |
| 缓存架构 | 三级缓存、Redis Cluster、一致性策略 | 缓存架构 |
| 高并发 | 排行榜、削峰、时间窗口、数据层外缓冲 | 高并发概述 |
| 搜索引擎 | Elasticsearch、全文/向量检索 | 搜索引擎 |
| 对象存储 | S3、OSS、MinIO、生命周期与 CDN | 对象存储 |
| 向量数据库 | Qdrant、Milvus、ANN 索引、RAG 召回 | 向量数据库 |
| 可观测性 | Metrics + Logs + Traces、OTel | 可观测性 · OpenTelemetry |
| CI/CD 与 GitOps | 自动化构建发布、ArgoCD | CD 与 GitOps |
| 云原生安全 | Zero Trust、mTLS、Secret 管理 | 云原生安全 |
| AI 云原生 | LLM、RAG、向量数据库、AI Agent | AI 云原生 |
核心理解
用户请求
↓ DNS 解析 → TCP 握手 → TLS 握手(ALPN 协商 HTTP/2 或 HTTP/3)
接入层(CDN / WAF / L4 LB)
↓
网关层(Ingress / API Gateway / K8s Gateway API)
↓
服务治理层(Service Mesh / 注册发现 / 熔断限流 / 配置中心)
↓
微服务层(业务逻辑 / 异步事件)
↓
数据层(三级缓存 / 数据库主从 / 消息队列 / 搜索 / 对象存储 / 向量库)
↓
可观测性层(Metrics / Logs / Traces,统一走 OpenTelemetry)
↓
自动化运维层(CI/CD / GitOps / 自愈)
Kubernetes 是底座,真正的复杂度在分布式系统、数据一致性、服务治理、可观测性与云原生安全。