2. Kubernetes 核心概念回顾:Pod、Service、Deployment、Ingress 与网络策略
在深入蓝绿发布与 CNI 网络故障恢复之前,必须对齐 Kubernetes 最核心的五个抽象层。这些概念构成了容器编排的骨架,也是后续自动化脚本与故障注入的目标对象。本节以“声明式期望状态”为线索,逐一拆解每个资源的作用域、生命周期与网络交互方式。
2.1 Pod:最小调度单元与网络边界
Pod 是 Kubernetes 中可创建和部署的最小计算单元,一个 Pod 封装一个或多个容器、共享存储(Volume)和唯一的网络命名空间(IP 地址、端口空间)。
- 网络模型:每个 Pod 拥有一个集群内唯一的 IP 地址(Cluster IP),Pod 内的容器通过
localhost通信。 - 生命周期:Pod 是临时性的,其 IP 地址在重启或重建后会变化。因此上层 Service 必须通过标签选择器动态绑定 Pod。
- 就绪探针(Readiness Probe):决定 Pod 是否加入 Service 的端点列表,是蓝绿发布中流量切换的关键控制点。
关键认知:CNI 网络故障的直接表现就是 Pod 网络命名空间异常——IP 分配失败、路由丢失或 veth 对断裂。自动化恢复的第一步就是检测 Pod 网络状态。
2.2 Service:稳定的网络入口与负载均衡
Service 为一组功能相同的 Pod 提供稳定的虚拟 IP(ClusterIP)和 DNS 名称,并将请求负载均衡到后端的 Pod 端点。
| Service 类型 | 访问范围 | 典型用途 |
|---|---|---|
| ClusterIP | 集群内部 | 微服务间内部 RPC 调用 |
| NodePort | 集群外部(节点 IP + 端口) | 开发调试、非生产环境暴露 |
| LoadBalancer | 集群外部(云 LB) | 生产环境对外暴露服务 |
在蓝绿发布场景中,Service 的 selector 字段是流量切换的“开关”。通过更新 selector 指向新版本 Pod 的标签,即可实现零中断的流量迁移。
2.3 Deployment:声明式更新与回滚引擎
Deployment 管理 ReplicaSet,进而控制 Pod 的副本数量与更新策略。它提供了滚动更新、蓝绿发布、金丝雀发布等高级发布模式的基础能力。
- 更新策略:
RollingUpdate(默认)与Recreate。蓝绿发布通常将 Deployment 的更新策略设为Recreate或直接创建新 Deployment 来隔离两套环境。 - 就绪门控:Deployment 在更新时会等待新 Pod 通过就绪探针后,才终止旧 Pod。CNI 故障会导致新 Pod 就绪失败,从而阻塞整个发布流程。
- 回滚:通过
kubectl rollout undo快速恢复到上一个 Revision,是故障恢复的兜底手段。
蓝绿发布与 Deployment 的关系:蓝绿发布通常不直接修改现有 Deployment 的 PodTemplate,而是创建一套全新的 Deployment(绿色),待验证通过后,将 Service 的 selector 从旧 Deployment(蓝色)指向新 Deployment。这种方式避免了滚动更新过程中的中间状态,降低了 CNI 故障的波及范围。
2.4 Ingress:七层路由与流量治理
Ingress 是 Kubernetes 的七层(HTTP/HTTPS)流量入口,负责将外部请求根据 Host、Path 规则路由到集群内部的 Service。它通常由 Ingress Controller(如 Nginx、Traefik)实现。
- 与 Service 的关系:Ingress 不直接连接 Pod,而是将流量转发到 Service 的 ClusterIP,再由 Service 分发到 Pod。
- 蓝绿发布中的应用:通过 Ingress 的
canary注解(如 Nginx Ingress),可以实现基于权重或 Header 的金丝雀流量分发,作为蓝绿发布的补充验证手段。 - 故障影响:CNI 网络故障可能导致 Ingress Controller 无法访问后端 Pod,表现为 502/503 错误。自动化恢复需要检测 Ingress 的 upstream 健康状态。
2.5 网络策略(NetworkPolicy):微隔离与故障域
NetworkPolicy 是 Kubernetes 原生的防火墙规则,通过标签选择器定义 Pod 之间、Pod 与外部端点之间的流量规则。它是 CNI 插件(如 Calico、Cilium)实现网络隔离的核心机制。
- 默认行为:未定义 NetworkPolicy 时,所有 Pod 可以互相通信(全通)。一旦应用了 NetworkPolicy,未显式允许的流量将被拒绝。
- 策略类型:
Ingress(入站规则)和Egress(出站规则)。 - 与蓝绿发布的关系:在蓝绿发布期间,新旧两套 Pod 可能同时运行。错误的 NetworkPolicy 可能阻断 Service 对新 Pod 的健康检查流量,导致发布失败。自动化恢复脚本需要具备临时放宽或诊断 NetworkPolicy 的能力。
常见陷阱:CNI 网络故障有时并非底层网络问题,而是 NetworkPolicy 配置错误导致流量被静默丢弃。在排查时,应优先检查
kubectl describe networkpolicy 和 calicoctl get networkpolicy(如适用)。
2.6 核心概念关系总结
| 资源 | 作用域 | 网络身份 | 蓝绿发布中的角色 | CNI 故障影响 |
|---|---|---|---|---|
| Pod | 节点 | IP 地址(动态) | 运行应用实例 | IP 分配失败、网络不可达 |
| Service | 集群 | ClusterIP(静态) | 流量切换开关 | 端点列表为空、负载均衡失效 |
| Deployment | 集群 | 无直接网络身份 | 版本管理与回滚 | 新 Pod 就绪失败,更新阻塞 |
| Ingress | 集群 | 外部 DNS + 端口 | 七层路由与金丝雀 | 502/503 错误,路由不可用 |
| NetworkPolicy | 命名空间 | 无直接网络身份 | 微隔离与故障域 | 流量被静默丢弃,健康检查失败 |