系统全貌

现代企业级 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 / TLSDNS · 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自动化构建发布、ArgoCDCD 与 GitOps
云原生安全Zero Trust、mTLS、Secret 管理云原生安全
AI 云原生LLM、RAG、向量数据库、AI AgentAI 云原生

核心理解

用户请求
   ↓ 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 是底座,真正的复杂度在分布式系统、数据一致性、服务治理、可观测性与云原生安全。