课题研究 云安全与容器安全 子课题02 · 第05页 / 共8页
02子课题 · 容器与Kubernetes安全

容器与Kubernetes安全第05页:网络隔离与服务网格安全

Kubernetes默认的扁平Pod网络让东西向流量处于"全通裸奔"状态——这既是微服务敏捷性的来源,也是横向移动的康庄大道。本页系统研究集群网络的纵深防御体系:CNI选型的安全语义差异(Flannel不实施策略、Calico与Cilium的策略能力对比);NetworkPolicy从"默认拒绝"到微分段的完整模式库;入口流量治理(Ingress与Gateway API)与CVE-2020-8554的教训;集群DNS作为被忽视的C2通道;服务网格(Istio/Linkerd)以工作负载身份+默认mTLS重塑东西向安全;以及eBPF网络方案(Cilium)带来的策略与观测一体化能力。

NetworkPolicyCNICalicoCilium微分段IngressGateway APICoreDNS服务网格IstiomTLSeBPF研究状态:研究中
所属专题云安全与容器安全 › 子课题02 容器与Kubernetes安全
目标受众网络架构师、平台工程、云安全与微服务治理团队
全文结构CNI选型 → 网络策略 → 入口治理 → DNS → 服务网格

01 · Pod网络模型与CNI选型

容器网络接口(CNI)插件负责为Pod分配IP并实现跨节点通信。关键认知:Kubernetes API本身不实施任何网络策略——NetworkPolicy资源只是声明,实际执行完全由CNI决定。选错CNI,等于集群网络裸奔。

CNI数据面NetworkPolicy支持L7能力安全定位
Flannel简单overlay(VXLAN/host-gw)不支持无仅连通性;不满足任何网络分段基线
Calico可路由(BGP)或overlay;iptables/eBPF双模式完整支持有限(需附加组件)策略成熟、文档丰富,网络策略基线的稳妥选项
CiliumeBPF(支持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 主流方案安全特性对比

维度IstioLinkerdCilium Service Mesh
架构Envoy Sidecar为主;ambient模式(无Sidecar,ztunnel节点级+waypoint按需L7)自2023年起推进Rust微代理Sidecar,轻量无Sidecar:eBPF内核级+L7代理按命名空间启用
身份与mTLSSPIFFE身份、自动轮换、默认 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页)共享同一数据面。

L3—L7
统一策略平面
以同一套策略表达覆盖IP/端口到HTTP方法、gRPC方法、Kafka topic的访问控制
Hubble
全流量可观测
服务依赖拓扑、策略命中/拒绝计数、DNS审计——策略运营的"眼睛"
0
Sidecar资源开销
Service Mesh能力经eBPF实现,无每Pod代理的内存/延迟税(L7按需)
1
统一数据面
网络策略+运行时检测(Tetragon)+DNS安全共享eBPF底座,降低多代理运维复杂度

演进建议:新建集群优先评估Cilium作为CNI与网络策略引擎;存量集群以"Hubble观测流量→生成L3/L4白名单→叠加L7策略"渐进收敛;多集群场景结合ClusterMesh实现跨集群身份与策略一致(与子课题05多云协同)。

本节参考来源(第5页)

[1]

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月发布)。

[2]

NSA & CISA《Kubernetes Hardening Guidance》v1.1(2022):网络隔离与入口章节。

[3]

Cilium官方文档(NetworkPolicy L7、Hubble可观测、kube-proxy替代、ClusterMesh):docs.cilium.io;Calico文档:docs.tigera.io;Flannel项目仓库(说明其不提供策略执行):github.com/flannel-io/flannel。

[4]

Istio官方安全架构文档(mTLS模式、AuthorizationPolicy、ambient mesh):istio.io/latest/docs/concepts/security;Linkerd文档:linkerd.io(automatic mTLS)。

[5]

CoreDNS官方文档与NodeLocal DNSCache(Kubernetes官方集群管理指南):kubernetes.io(DNS定制);kubernetes.io(NodeLocal DNSCache);SPIFFE/SPIRE身份框架:spiffe.io。