cilium 网路安全设计

43 阅读6分钟

Cilium 基于身份的安全方案与传统架构对比分析

1. 一段话总结

Kubernetes 等容器管理系统为每个 Pod 分配独立 IP,虽简化架构、避免不必要 NAT 并提供全端口范围,但导致网络层需管理大量 IP;

传统安全架构基于 IP 地址过滤器,当实现如 role=frontend Pod 连接 role=backend Pod 的规则时,Pod 启停需更新运行对应 Pod 的集群节点规则,可能延迟新 Pod 启动且难高效扩展;

Cilium 将安全与网络地址分离,基于 Pod 标签衍生的****身份(可在 Pod 间共享)实现安全策略,新 role=frontend Pod 启动仅需通过键值存储解析身份,无需更新运行 role=backend Pod 的集群节点规则,解决了传统架构的扩展性与灵活性问题。


2. 思维导图

image.png


3. 详细总结

一、容器管理系统的网络模型特点

容器管理系统(以 Kubernetes 为代表)采用特定的网络部署模型,其核心机制与影响如下:

  1. IP 分配规则:为每个 Pod(容器组)分配独立的 IP 地址,这是该网络模型的基础。

  2. 模型优势

    1. 简化整体网络架构,降低复杂度;
    2. 避免不必要的网络地址转换(NAT) 操作,减少性能损耗;
    3. 为每个容器提供完整的端口号范围供使用,满足多样化服务需求。
  3. 潜在挑战网络层需管理的 IP 地址数量庞大,具体数量取决于集群规模Pod 总数量,对网络管理效率提出要求。

毫无疑问 容器比虚拟机需要更多的 IP,几乎端口的使用的数量就是 IP 使用的数量

二、传统基于 IP 地址过滤器的安全架构

传统安全 enforcement 架构依赖 IP 地址过滤器实现访问控制,存在明显局限性,具体如下:

(1)规则实现示例

若需实现“所有带 role=frontend 标签的 Pod 可主动连接所有带 role=backend 标签的 Pod”这一规则,需在至少运行一个 role=backend Pod 的每个集群节点上,安装对应的 IP 地址过滤器。例如,当目标地址为 10.1.1.2(某 role=backend Pod IP)时,仅允许源地址为 [10.1.2.2, 10.1.2.3, 20.4.9.1]role=frontend Pod IP 列表)的连接请求,其他请求均拒绝。

(2)架构弊端

弊端类型具体表现影响
规则更新频繁每当带 role=frontendrole=backend 标签的 Pod 启停时,需在所有运行这些 Pod 的集群节点上更新规则(添加/删除对应 IP)在大型分布式应用中,若 Pod 变动率(churn rate)高,可能需每秒多次更新数千个集群节点的规则,消耗大量资源
新 Pod 启动延迟role=frontend Pod 启动前,必须等待所有运行 role=backend Pod 的服务器完成安全规则更新,否则新 Pod 的连接请求可能被误拒严重影响系统的灵活性与部署效率,难以实现高效扩展

三、Cilium 基于身份的安全方案

为解决传统架构的问题,Cilium 提出全新安全理念,核心内容如下:

  1. 核心设计:完全将安全网络地址分离,不再依赖 IP 地址实现访问控制。

  2. 身份机制

    1. 安全策略的依据是 Pod 的身份,该身份由 Pod 的标签衍生而来;
    2. 身份支持在多个 Pod 间共享,例如所有带 role=frontend 标签的 Pod 可共享同一“frontends”身份,所有带 role=backend 标签的 Pod 可共享同一“backends”身份。
  3. 策略执行流程

    1. 当首个 role=frontend Pod 启动时,Cilium 为其分配“frontends”身份,并配置该身份允许主动连接“backends”身份(role=backend Pod 的身份);
    2. 后续新增 role=frontend Pod 时,仅需通过键值存储解析“frontends”身份即可,无需对运行 role=backend Pod 的集群节点执行任何操作。
  4. 方案优势:新 Pod 启动仅需等待自身身份解析完成,该操作远简单于更新所有其他节点的安全规则,有效提升了系统的扩展性灵活性


4. 关键问题

问题1:Kubernetes 等容器管理系统的网络模型为每个 Pod 分配独立 IP,这一设计带来的优势与潜在挑战分别是什么?

  • 优势:一是简化了网络架构,降低了整体复杂度;二是避免了不必要的网络地址转换(NAT)操作,减少性能损耗;三是为每个容器提供了完整的端口号范围供使用,满足多样化服务需求。

  • 潜在挑战:网络层需要管理的 IP 地址数量会非常庞大,具体数量取决于集群的规模和 Pod 的总数量,对网络管理的效率提出了较高要求。

问题2:传统基于 IP 地址过滤器的安全架构在实现“role=frontend Pod 连接 role=backend Pod”规则时,存在哪些难以解决的问题?

  • 规则更新成本高:每当带 role=frontendrole=backend 标签的 Pod 启动或停止时,所有运行这些 Pod 的集群节点都必须更新规则(添加或删除对应 IP),在大型分布式应用中,若 Pod 变动率高,可能需每秒多次更新数千个集群节点的规则,资源消耗极大。

  • 新 Pod 启动延迟:新 role=frontend Pod 必须等待所有运行 role=backend Pod 的服务器完成安全规则更新后才能启动,否则其连接请求可能被误拒,严重影响系统部署效率与灵活性,阻碍高效扩展。

问题3:Cilium 基于身份的安全方案如何解决传统 IP 地址过滤器架构的扩展性与灵活性问题?

  • Cilium 首先将安全与网络地址完全分离,不再依赖 IP 地址制定安全策略而是以 Pod 标签衍生的“身份”作为安全控制依据,且身份可在 Pod 间共享(如所有 role=frontend Pod 共享“frontends”身份)。
  • 在策略执行上,首个特定标签的 Pod 启动时会被分配对应身份并配置好访问规则,后续新增同标签 Pod 仅需通过键值存储解析已有身份,无需像传统架构那样更新大量集群节点的规则。新 Pod 启动仅需等待自身身份解析完成,操作简单高效,避免了规则频繁更新和新 Pod 启动延迟的问题,从而显著提升了系统的扩展性与灵活性。

参考:

  1. docs.cilium.io/en/stable/s…