4、金融级网络方案:CNI插件选型(Calico、Cilium)、网络策略与安全组、多租户隔离

金融行业的网络,说白了就是命根子。我见过太多因为网络抖动导致交易中断的案例,所以每次做容器化网络方案,我都格外谨慎。今天咱们聊聊金融级网络方案的核心——CNI插件选型、网络策略与多租户隔离。

4.1 CNI插件选型:Calico vs Cilium

CNI插件是Kubernetes网络的基石。金融场景下,我主要推荐两个:Calico和Cilium。为什么?因为它们都支持网络策略,性能也够硬。

核心观点:金融级网络,首选Cilium(如果内核支持eBPF),其次Calico。别问我为什么,我在生产环境踩过坑。

4.1.1 Calico:老牌劲旅

Calico是我最早接触的CNI插件。它基于BGP协议,纯三层网络,没有overlay开销。说白了,就是直接路由。

  • 优点:性能稳定,社区成熟,文档齐全。我2018年做第一个金融容器项目时用的就是它,跑了三年没出过大问题。
  • 缺点:网络策略基于iptables,规则多了性能下降明显。我记得有一次客户配了2000条策略,节点上iptables规则数直接爆炸,CPU飙升到80%。
  • 适用场景:传统金融企业,对eBPF不熟悉,或者内核版本较低(3.10+即可)。

4.1.2 Cilium:后起之秀

Cilium基于eBPF,性能比Calico高一个量级。我去年帮某券商做容器化改造,从Calico切到Cilium后,网络延迟降低了40%。

  • 优点:网络策略性能极高,支持L7策略(HTTP/gRPC),可观测性强。你想想看,能直接看到每个Pod的TCP连接数、延迟分布,多爽。
  • 缺点:依赖内核版本(至少4.19,推荐5.10+)。有些老旧金融系统还在用CentOS 7,内核3.10,那就没法用。
  • 适用场景:对性能要求高的交易系统、微服务架构、需要L7策略的场景。
特性 Calico Cilium
数据平面 iptables / eBPF(可选) eBPF(原生)
网络策略性能 中等(规则多时下降明显) 高(规则多时几乎无影响)
L7策略支持 有限(需额外组件) 原生支持(HTTP/gRPC/Kafka等)
内核要求 3.10+ 4.19+(推荐5.10+)
运维复杂度 中(需理解eBPF)

我的建议:如果你们公司内核版本够新(5.10+),直接上Cilium。如果还在用老内核,Calico也够用,但记得控制网络策略数量,别超过500条。

4.2 网络策略与安全组

金融场景下,网络策略不是可选项,是必选项。为什么?因为监管要求。银保监会明确要求:不同业务系统之间必须网络隔离。

4.2.1 Kubernetes NetworkPolicy

Kubernetes原生NetworkPolicy只支持L3/L4,说白了就是IP+端口。但金融场景往往需要更细粒度的控制。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: finance-api-policy
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: finance-api
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: gateway
    - podSelector:
        matchLabels:
          app: api-gateway
    ports:
    - protocol: TCP
      port: 8080
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: finance-db
    ports:
    - protocol: TCP
      port: 3306

这段配置的意思是:只允许gateway命名空间下的api-gateway Pod访问finance-api的8080端口,同时finance-api只能访问finance-db的3306端口。嗯,这里要注意:默认拒绝所有流量,只放行明确允许的。这是金融安全的基本原则。

避坑指南:我曾经遇到一个案例,运维同学配了NetworkPolicy但忘了配Egress规则,结果Pod无法访问DNS服务器,导致服务发现全挂了。所以配策略时,记得把DNS(kube-dns的53端口)加到白名单里。

4.2.2 Cilium NetworkPolicy(L7策略)

如果你用Cilium,可以玩L7策略。比如只允许GET请求,拒绝DELETE请求。这在金融场景下非常有用。

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: finance-api-l7
  namespace: production
spec:
  endpointSelector:
    matchLabels:
      app: finance-api
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: api-gateway
    toPorts:
    - ports:
      - port: '8080'
        protocol: TCP
      rules:
        http:
        - method: GET
          path: '/api/v1/accounts/.*'
        - method: POST
          path: '/api/v1/transactions'

你看,这样就能精确控制API的访问权限。说白了,就是给网络策略加了一层应用防火墙。

4.3 多租户隔离

金融云上,多租户隔离是刚需。不同部门、不同业务线、甚至不同客户,都要严格隔离。我总结了三层隔离方案:

4.3.1 第一层:命名空间隔离

Kubernetes命名空间是最基础的隔离手段。但光靠命名空间不够,因为默认情况下,不同命名空间的Pod可以互相访问。

  • 做法:为每个租户创建独立命名空间,配合NetworkPolicy实现默认拒绝。
  • 注意:命名空间不是安全边界,只是逻辑分组。真正的隔离靠网络策略。

4.3.2 第二层:网络策略隔离

这是核心。我一般会配三层策略:

  1. 全局默认拒绝:所有命名空间默认拒绝所有入站和出站流量。
  2. 租户内部允许:同一租户内的Pod可以互相访问(通过标签选择器)。
  3. 跨租户白名单:只有明确允许的跨租户流量才能通过(比如日志收集、监控系统)。

经验之谈:我曾经帮某银行做多租户方案,他们要求A部门和B部门完全隔离,但都需要访问共享数据库。我的方案是:给共享数据库打上特殊标签,然后在两个部门的命名空间里分别配Egress策略,只允许访问这个标签的Pod。这样既隔离又共享。

4.3.3 第三层:节点级隔离(可选)

对于高安全要求的场景(比如核心交易系统),我建议用节点级隔离。说白了,就是把不同租户的Pod调度到不同节点上,配合节点安全组。

  • 做法:使用节点亲和性(nodeAffinity)和污点(Taints/Tolerations)实现。
  • 优点:物理隔离,即使Kubernetes层面出问题,网络也不通。
  • 缺点:资源利用率低,运维复杂。

4.4 知识体系图

下面这张图总结了金融级网络方案的核心逻辑,我画了很久,希望能帮你理清思路。

金融级网络方案核心逻辑 第一层:CNI插件选型 Calico(BGP/iptables) vs Cilium(eBPF) 选型依据:内核版本、性能要求、运维能力 第二层:网络策略与安全组 K8s NetworkPolicy(L3/L4) + Cilium L7策略(HTTP/gRPC) 默认拒绝 + 白名单模式 第三层:多租户隔离 命名空间隔离 网络策略隔离 节点级隔离 隔离层级递进,安全性与资源利用率平衡 核心原则:最小权限、默认拒绝、分层隔离、可审计

这张图展示了金融级网络方案的三个层次:底层选好CNI插件,中间配好网络策略,上层做好多租户隔离。每一层都不可或缺。

最后说一句:金融级网络方案没有银弹。我建议你先从Calico入手(如果内核支持),等团队熟悉了再考虑迁移到Cilium。网络策略一定要从第一天就开始配,别等出事了再补。多租户隔离要结合业务需求,别过度设计,也别偷工减料。

专注资料整理