3. 容器网络运维准入策略概述:Kubernetes网络策略、CNI插件、准入控制器基础
容器网络运维准入策略是保障集群网络安全的第一道防线。在云原生环境中,网络流量不再依赖传统的物理边界,而是通过软件定义的网络模型进行隔离与控制。本章将系统梳理Kubernetes网络策略(NetworkPolicy)、CNI插件以及准入控制器(Admission Controller)三大核心组件,为后续的Sigstore策略评审奠定基础。
3.1 Kubernetes网络策略(NetworkPolicy)
NetworkPolicy是Kubernetes原生的网络隔离机制,通过标签选择器定义Pod之间的通信规则。它工作在OSI模型的第3/4层(IP+端口),默认情况下集群内所有Pod可以互相通信,一旦应用了NetworkPolicy,未显式允许的流量将被拒绝。
| 策略字段 | 作用 | 示例值 |
|---|---|---|
| podSelector | 选择策略生效的目标Pod | app: frontend |
| policyTypes | 指定策略类型(Ingress/Egress) | ["Ingress"] |
| ingress | 定义入站流量规则 | from: [ipBlock: ...] |
| egress | 定义出站流量规则 | to: [namespaceSelector: ...] |
关键认知:NetworkPolicy本身不执行流量过滤,它只是声明式规则。真正的执行由CNI插件中的网络策略控制器完成。如果CNI不支持NetworkPolicy,策略将形同虚设。
3.2 CNI插件:网络策略的执行引擎
容器网络接口(CNI)插件负责为Pod分配IP地址、配置网络接口,并实现NetworkPolicy的强制访问控制。不同CNI插件对NetworkPolicy的支持程度和实现方式存在显著差异,直接影响准入策略的评审范围。
| CNI插件 | NetworkPolicy支持 | 策略执行机制 | 运维准入关注点 |
|---|---|---|---|
| Calico | 完整支持 | iptables / eBPF + Felix | 全局网络策略、主机端点、策略优先级 |
| Cilium | 完整支持 + L7扩展 | eBPF + Envoy | Hubble可观测性、身份标识、DNS策略 |
| Flannel | 不支持 | VXLAN / host-gw | 需额外部署网络策略控制器(如Calico) |
| Weave Net | 部分支持 | Fast Datapath + iptables | 策略性能、大规模集群稳定性 |
运维建议:在评审容器网络准入策略时,必须首先确认集群使用的CNI插件及其版本。例如,Cilium 1.13+支持基于Kubernetes ServiceAccount的身份策略,这为Sigstore签名验证提供了更细粒度的网络控制维度。
3.3 准入控制器(Admission Controller)
准入控制器是Kubernetes API Server的拦截插件,在对象被持久化到etcd之前执行验证和变更操作。对于容器网络运维准入,准入控制器可以在Pod创建或更新时动态注入网络策略、校验CNI配置,甚至阻断不符合安全基线的网络请求。
准入控制器分为两类:
- 变更准入控制器(Mutating Admission Controller):修改请求对象,例如自动为Pod注入sidecar代理或网络策略注解。
- 验证准入控制器(Validating Admission Controller):拒绝不符合规则的请求,例如检查Pod是否绑定了允许的NetworkPolicy。
安全风险提示:如果攻击者能够绕过或篡改准入控制器(例如通过修改ValidatingWebhookConfiguration资源),则可能部署未授权网络策略的Pod,导致容器网络隔离失效。Sigstore的签名验证可以确保准入控制器的配置变更来自可信来源。
3.4 三者的协同关系
下图展示了容器网络运维准入策略中,NetworkPolicy、CNI插件与准入控制器之间的协作流程:
3.5 准入策略评审的关键维度
在进行容器网络运维准入策略评审时,需要从以下四个维度进行系统性检查:
- 策略完整性:是否所有命名空间都定义了默认拒绝策略?是否存在未受保护的Pod?
- CNI兼容性:当前CNI插件是否支持所有定义的NetworkPolicy规则?eBPF模式下的策略是否与iptables模式一致?
- 准入控制器配置:ValidatingWebhookConfiguration是否启用了TLS?是否对变更操作进行了审计日志记录?
- 变更权限控制:谁有权修改NetworkPolicy和准入控制器配置?是否使用了RBAC最小权限原则?
Sigstore集成点:在准入控制器中集成Sigstore验证,可以确保所有NetworkPolicy的创建和更新操作都经过签名验证。例如,使用Cosign对NetworkPolicy YAML文件进行签名,然后在ValidatingAdmissionPolicy中验证签名,从而防止未授权的网络策略变更。
下表总结了三种核心组件在准入策略评审中的角色差异:
| 组件 | 声明层 | 执行层 | 安全控制点 |
|---|---|---|---|
| NetworkPolicy | Kubernetes API资源 | CNI插件 | 策略定义完整性、标签选择器准确性 |
| CNI插件 | DaemonSet / 系统服务 | 内核网络栈 | 插件版本、配置一致性、eBPF程序完整性 |
| 准入控制器 | Webhook配置 | API Server请求拦截 | Webhook证书、签名验证、变更审计 |