01 · Pod网络模型与CNI选型
容器网络接口(CNI)插件负责为Pod分配IP并实现跨节点通信。关键认知:Kubernetes API本身不实施任何网络策略——NetworkPolicy资源只是声明,实际执行完全由CNI决定。选错CNI,等于集群网络裸奔。
| CNI | 数据面 | NetworkPolicy支持 | L7能力 | 安全定位 |
|---|---|---|---|---|
| Flannel | 简单overlay(VXLAN/host-gw) | 不支持 | 无 | 仅连通性;不满足任何网络分段基线 |
| Calico | 可路由(BGP)或overlay;iptables/eBPF双模式 | 完整支持 | 有限(需附加组件) | 策略成熟、文档丰富,网络策略基线的稳妥选项 |
| Cilium | eBPF(支持kube-proxy替代) | 完整支持 | 原生L7(HTTP/gRPC/Kafka等) | 策略+可观测(Hubble)一体化,云原生网络首选之一 |
| Weave(已停止活跃维护) | mesh overlay | 支持 | 有限 | 历史存量,新项目不建议采用 |
选型核查清单:①CNI是否真正执行NetworkPolicy(以拒绝型策略实测验证,而非仅"支持声明");②策略引擎对性能的影响(iptables规则数量在万级规模下的规则膨胀问题,eBPF方案更优);③是否提供网络可观测(流量拓扑、策略命中计数——无观测的策略无法运营);④多集群/跨云场景的互联方案与安全边界。
02 · NetworkPolicy深度解析
2.1 语义基础:默认全通,策略以Pod为粒度叠加
NetworkPolicy按namespace+Pod选择器(podSelector)生效;一个Pod被任一policy选中即进入"仅放行白名单"模式:至少一条入站policy选中→入站白名单化;至少一条出站policy选中→出站白名单化。这是"默认拒绝"架构的实现机制。
# 默认拒绝(某namespace内全部Pod的入站)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes: [Ingress]
---
# 精确放行:只允许frontend访问backend的8080
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
podSelector: { matchLabels: { app: backend } }
policyTypes: [Ingress]
ingress:
- from:
- podSelector: { matchLabels: { app: frontend } }
ports: [{ protocol: TCP, port: 8080 }]2.2 微分段参考架构(模式库)
| 模式 | 做法 | 要点 |
|---|---|---|
| 命名空间级默认拒绝 | 每namespace落地deny-ingress/deny-egress两基线 | GitOps统一分发;新namespace经模板自动继承 |
| 服务级白名单 | 按工作负载对(frontend→backend)精确放行 | 优先podSelector同namespace;跨namespace用namespaceSelector+podSelector组合 |
| DNS白名单 | egress放行kube-system/CoreDNS(53端口) | 易被遗忘——不放行DNS会导致全量解析失败 |
| 出网管控 | 非必要不出网;出网经NAT网关/出口防火墙统一 | 阻断直连公网可消解挖矿回连、数据外传通道 |
| 七层补充 | Cilium L7策略或网格策略承担HTTP级控制 | L3/L4策略无法区分GET /healthz与GET /admin |
- IPBlock陷阱:podSelector优先于ipBlock语义中的"集群内IP"理解;CNI实现差异需实测。
- 策略运营:先用Cilium Hubble/Calico日志观测真实流量,再生成白名单("观测→建模→强制执行"三步),避免拍脑袋策略造成业务中断。
03 · 入口流量安全
- 暴露面最小化:NodePort/LoadBalancer型Service逐一直接暴露是端口蔓延之源;统一入口(Ingress Controller / Gateway API)+集中WAF/限流/鉴权为推荐架构。
- Gateway API(v1.0,2023年10月):以Gateway、HTTPRoute等资源将"基础设施"与"路由规则"角色分离,多团队共享网关时的策略冲突更少;安全上支持更细粒度的HTTPS/TLS策略与后端引用校验(ReferenceGrant)。
- CVE-2020-8554的教训:Service ExternalIP可被劫持用于集群内MITM(详见第2页档案)。除升级修复版本外,应:限制RBAC中创建/patch带ExternalIP或LoadBalancer IP的Service权限;网络层阻断指向链路本地/元数据地址段(169.254.0.0/16)的服务转发。
- 入口基线:TLS强制(最低TLS1.2)、证书自动轮换(cert-manager)、请求体大小/速率限制、控制器自身以高权限运行时隔离(其持有全集群Ingress配置的写权限)。
04 · 集群DNS安全
CoreDNS是集群服务发现的中枢,同时是被严重低估的攻防面:攻击者既可通过DNS隧道外传数据,也可通过投毒劫持服务发现。
- DNS隧道与C2:长域名TXT查询、异常查询频率是可观测信号;出方向53端口仅放行经企业DNS的解析链,阻断Pod直连公网DNS。
- NodeLocal DNSCache:节点级缓存降低CoreDNS负载与DNSError概率,同时减少跨节点DNS投毒面。
- dnsPolicy基线:默认ClusterFirst;对外部域名解析强制经企业安全DNS(转发到具备威胁情报过滤的解析器);禁用Pod自定义dnsConfig指向外部公共DNS。
- 可观测:CoreDNS日志+查询模式基线(如某Pod首次出现TXT查询大量子域);DNS查询指标接入SIEM。
05 · 服务网格安全
服务网格(Service Mesh)以Sidecar(或节点级代理)接管服务间通信,为东西向安全提供两项原生能力:工作负载身份(SPIFFE/SPIRE风格的证书身份)与默认mTLS加密,使"零信任"从口号变成默认配置。
5.1 主流方案安全特性对比
| 维度 | Istio | Linkerd | Cilium Service Mesh |
|---|---|---|---|
| 架构 | Envoy Sidecar为主;ambient模式(无Sidecar,ztunnel节点级+waypoint按需L7)自2023年起推进 | Rust微代理Sidecar,轻量 | 无Sidecar:eBPF内核级+L7代理按命名空间启用 |
| 身份与mTLS | SPIFFE身份、自动轮换、默认 STRICT mTLS | 自动mTLS | 基于Cilium身份(与NetworkPolicy统一) |
| L7策略 | AuthorizationPolicy(基于身份/方法/路径)、遥测生态最完整 | 基本授权策略 | Cilium L7 AuthorizationPolicy |
| 适用判断 | 功能最全、复杂度最高;多集群与存量异构治理 | 追求极简与低开销 | 已选Cilium、希望策略面统一 |
5.2 网格落地安全要点
- mTLS模式分级启用:按namespace从PERMISSIVE(兼容明文)灰度至STRICT,全量监控明文残留后再强制;遗留明文端点即明文漏洞。
- 授权策略最小化:默认拒绝(ALLOW策略白名单化),以"身份到身份+方法/路径"四元组表达;拒绝"全部允许"的长期存在。
- 入口与出口网关:东西向加密不覆盖南北向——入口仍走Gateway+WAF;出口经egress网关统一审计(与子课题01的SSE/CASB协同)。
- 网格自身即攻击面:控制面(istiod)证书签发能力=集群王冠;其暴露面、RBAC与升级SLA按控制面等级防护(第2页标准)。
- ambient模式的边界:无Sidecar降低资源开销,但L7能力依赖waypoint代理部署,评估其覆盖度再决定灰度范围。
5.3 网格CA与证书治理要点
- 根证书(root CA)离线保管:网格根密钥应离线生成、分片保管并登记轮换计划;根证书泄露等于整个网格身份体系失守。
- 工作负载证书短TTL:服务网格工作负载证书默认约24小时有效期并自动轮换——不要为"省事"调长;长TTL扩大泄露窗口。
- 企业CA集成:通过chained CA(中间CA)将网格CA挂接企业PKI,满足审计与合规对证书来源一致性的要求;南北向流量仍以企业证书终结。
- 证书可观测:监控证书签发速率与失败率——签发异常突增可能是身份滥用信号;轮换失败存量应在告警中清零。
06 · eBPF网络一体化方案
eBPF将网络策略执行从iptables规则链下沉到内核可编程路径,带来三项安全运营价值:万级Pod规模下的策略性能、原生L7策略与可观测(Hubble流量拓扑与策略命中计数)、以及与运行时检测(Tetragon,第4页)共享同一数据面。
演进建议:新建集群优先评估Cilium作为CNI与网络策略引擎;存量集群以"Hubble观测流量→生成L3/L4白名单→叠加L7策略"渐进收敛;多集群场景结合ClusterMesh实现跨集群身份与策略一致(与子课题05多云协同)。
本节参考来源(第5页)
Kubernetes官方文档——NetworkPolicy(语义与示例):kubernetes.io/docs/concepts/services-networking/network-policies;Ingress:kubernetes.io(Ingress);Gateway API:gateway-api.sigs.k8s.io(v1.0于2023年10月发布)。
NSA & CISA《Kubernetes Hardening Guidance》v1.1(2022):网络隔离与入口章节。
Cilium官方文档(NetworkPolicy L7、Hubble可观测、kube-proxy替代、ClusterMesh):docs.cilium.io;Calico文档:docs.tigera.io;Flannel项目仓库(说明其不提供策略执行):github.com/flannel-io/flannel。
Istio官方安全架构文档(mTLS模式、AuthorizationPolicy、ambient mesh):istio.io/latest/docs/concepts/security;Linkerd文档:linkerd.io(automatic mTLS)。
CoreDNS官方文档与NodeLocal DNSCache(Kubernetes官方集群管理指南):kubernetes.io(DNS定制);kubernetes.io(NodeLocal DNSCache);SPIFFE/SPIRE身份框架:spiffe.io。