浅谈网络 | 容器网络之Cilium

目录

    • Cilium介绍
      • Cilium是什么
      • Cilium 主要功能特性
      • 为什么用Cilium?
    • 功能概述
    • 组件概况
    • BPF 与 XDP
      • eBPF (Extended Berkeley Packet Filter)
      • XDP (eXpress Data Path)

Cilium介绍

Cilium是什么

Cilium 是一个开源网络和安全项目,专为 Kubernetes、Docker 和 Mesos 等容器管理平台设计,旨在为容器化环境中的应用程序提供透明的网络连接和安全保护。它基于 Linux 内核中的 eBPF 技术,能够在内核层面上动态插入安全、可见性和网络控制逻辑,支持传统网络安全(如防火墙和访问控制)以及更精细的 API 和进程级安全,确保容器间通信不受威胁。
作为 Kubernetes 网络生态中的一款基于 eBPF 实现的网络插件,Cilium 不仅支持 Pod 间的基本通信,还能够进行 L4 和 L7 层的负载均衡,并取代了传统的 kube-proxy。它还内建服务网格、DNS 代理和流量追踪等高级功能,使其成为一个全面的解决方案,提升容器化应用的网络性能、安全性和可见性,简化网络架构,增强服务治理和监控能力。

Cilium 主要功能特性

Cilium 主要功能特性包括:

  • 安全性:支持 L3/L4/L7 级别的安全策略,这些策略可按应用方式分为:
    • 基于身份的安全策略(Security Identity):为每个工作负载分配唯一的安全身份,并基于此身份实施访问控制,而非依赖传统的 IP 地址。
    • 基于 CIDR 的安全策略:支持基于 IP 地址范围(CIDR)的访问控制规则,以兼容现有的网络安全策略。
    • 基于标签的安全策略:利用 Kubernetes 标签进行策略匹配,实现细粒度的安全控制。
  • 网络功能:支持三层平面网络(Flat Layer 3 Network),包括:
    • 覆盖网络(Overlay):支持 VXLAN 和 Geneve 等隧道技术,为多主机通信提供透明的虚拟网络。
    • Linux 原生路由:包括基于 Linux 内核的路由机制,以及云服务商提供的高级网络路由,确保高效的流量转发。
  • 负载均衡:基于 eBPF 实现高性能的 L4/L7 负载均衡,无需依赖 iptables 或 kube-proxy,提高网络吞吐量并降低延迟。
  • 可观测性与故障排查:提供丰富的监控和故障排除工具,包括流量可视化、DNS 解析监控、延迟分析以及事件追踪,帮助用户高效定位和解决网络问题。
    在这里插入图片描述

为什么用Cilium?

Cilium 的使用基于现代数据中心应用程序向微服务架构的转变,特别是当容器化和动态微服务环境中的应用程序通过轻量级协议(如 HTTP)进行通信时,传统的网络安全方法面临许多挑战。传统的 Linux 网络安全工具(如 iptables)依赖 IP 地址和端口进行访问控制,但在高度动态的容器环境中,IP 地址和端口经常发生变化,这使得传统方法难以应对容器生命周期的不稳定性和大规模的网络规则更新需求。此外,微服务的快速扩展和滚动更新使得基于 IP 地址的识别变得不可靠,且仅依赖协议端口(如 TCP 端口 80)来区分应用流量也不再适用。
Cilium 通过利用 Linux 内核中的 eBPF 技术,解决了这一问题。它不再依赖传统的 IP 地址,而是通过容器、Pod 和服务的标识来执行网络安全和访问控制。这使得 Cilium 能够在高度动态的环境中高效地实施安全策略,并能在应用层(如 HTTP)进行更精细的安全隔离和流量过滤。与传统的基于 IP 的安全策略不同,Cilium 将安全性与寻址解耦,可以更好地适应微服务架构中频繁变化的网络拓扑。
通过 eBPF,Cilium 实现了高度可扩展的网络安全和可视性,即使在大规模环境中也能稳定运行。这种方法使得 Cilium 成为处理现代微服务架构中安全性、可见性和网络控制的理想解决方案。

功能概述

透明保护和加密 API
Cilium 能够透明地保护和加密现代应用程序协议,如 REST/HTTP、gRPC 和 Kafka。传统防火墙通常仅在第3层和第4层运行,协议端口要么完全受信任,要么完全被阻止,而 Cilium 提供了更精细的应用层协议请求过滤。例如:

  • 允许所有使用 GET 方法且路径为 /public/.* 的 HTTP 请求,拒绝所有其他请求。
  • 允许 service1 在 Kafka 主题 topic1 上生成消息,并允许 service2 消费 topic1 上的消息,拒绝其他 Kafka 消息。
  • 强制所有 REST 调用中 HTTP 标头 X-Token 必须包含数字(如 [0-9]+)。

基于身份的服务间安全通信
随着现代分布式应用程序依赖容器化技术(如 Kubernetes)进行按需扩展和敏捷部署,Cilium 为共享相同安全策略的容器组分配唯一的安全标识。该标识与容器发出的网络数据包关联,确保容器之间的安全通信。Cilium 使用键值存储管理安全身份,通过对网络数据包进行验证,避免了传统防火墙的 IP 地址限制,使得容器环境更具可扩展性。
安全访问外部服务
Cilium 支持基于标签的安全性,作为集群内部的首选访问控制方式。对于外部服务的访问,Cilium 还支持传统的基于 CIDR 的安全策略。通过这些策略,Cilium 可以限制对外部服务的访问,仅允许特定 IP 范围内的容器访问,从而增加安全性。
简单网络
Cilium 提供简化的三层平面网络,能够跨多个集群连接所有应用程序容器。网络通过主机范围分配器简化 IP 地址的分配,避免了复杂的协调工作。Cilium 支持两种多节点网络模型:

  • Overlay:基于封装的虚拟网络,支持 VXLAN 和 Geneve 等封装格式。适用于主机之间已有 IP 连接的环境,具有最小的基础设施要求。
  • Native Routing:使用 Linux 主机的常规路由表,适用于需要更多底层网络控制的用户,支持原生 IPv6 网络和云服务商的路由器集成。

负载均衡
Cilium 提供基于 eBPF 的高效负载均衡,支持应用程序容器之间以及容器与外部服务之间的流量分布。通过高效的哈希表,Cilium 可以扩展到大规模环境,并支持直接服务器返回(DSR)模式,无需在源主机上执行负载均衡操作。
监控和故障排除
Cilium 提供强大的监控和故障排查能力,是分布式系统运维的基础。除了传统的工具(如 tcpdump 和 ping),Cilium 提供了以下增强功能:

  • 元数据监控:报告丢包时,不仅提供源 IP 和目标 IP,还提供完整的发送方和接收方标签信息,帮助更精确地定位问题。
  • 策略决策跟踪:追踪丢包或拒绝请求的原因,帮助理解策略决策过程,并支持基于标签的策略追踪。
  • Prometheus 指标导出:集成 Prometheus,导出关键指标,方便与现有监控系统和仪表板集成。

集成
Cilium 支持广泛的集成选项,确保其可以与不同的容器和云原生平台兼容:

  • 网络插件集成:支持 CNI(容器网络接口)和 libnetwork。
  • 容器运行时事件:与 containerd 兼容。
  • Kubernetes:支持 Kubernetes 的 NetworkPolicy、Labels、Ingress、Service 等功能。
  • 日志:支持 syslog 和 fluentd 集成,帮助管理日志流和事件监控。

组件概况

在这里插入图片描述
Cilium的关键组件

  1. Cilium Agent (cilium-agent)
    Cilium 代理在每个 Linux 容器主机上运行,负责以下功能:
  • 提供 API 供运维/安全团队配置网络安全策略。
  • 监听容器事件,收集元数据并生成高效的 BPF 程序。
  • 管理 IP 地址分配(IPAM),与容器平台网络插件交互。
  • 使用 clang/LLVM 编译 BPF 程序,传递给 Linux 内核处理数据包转发和安全行为。
  1. Cilium CLI Client (cilium)
    Cilium CLI 是一个命令行工具,用于与 Cilium Agent API 交互:
  • 查询容器的 Cilium 状态。
  • 配置和查看网络安全策略。
  • 配置网络监控行为。
  1. eBPF (Extended Berkeley Packet Filter)
    Cilium 使用 eBPF 技术执行高效的网络数据路径操作:
  • 在 Linux 内核中运行 BPF 程序,进行数据包过滤、转发和监控。
  • 需要 Linux 内核 4.9 或更高版本,自动适应内核功能更新。
  • 提供高效、低开销的流量处理能力,避免频繁上下文切换。
  1. Hubble
    Hubble 提供流量监控、可视化和日志记录功能:
  • 显示服务间流量和网络拓扑。
  • 提供实时监控和流量追踪,帮助诊断和优化网络性能。
  1. Cilium Operator
    Cilium Operator 管理集群中的配置和状态同步:
  • 通过 Kubernetes CRD 自动应用网络策略。
  • 确保集群中每个节点的 Cilium 状态一致性。

BPF 与 XDP

eBPF (Extended Berkeley Packet Filter)

eBPF 是对传统 BPF(cBPF)的扩展,最早用于网络数据包过滤。其核心思想是在 Linux 内核中提供一个虚拟机,允许用户在内核中动态加载和执行自定义程序,进而过滤和处理数据包。eBPF 通过以下特点提升了 BPF 的能力:

  • 指令集扩展:比 cBPF 更强大,支持更丰富的操作,如数据包修改、流量分析等。
  • 内核虚拟机:允许在内核空间运行用户定义的指令,无需修改内核源代码。
  • 性能优化:使用 JIT 编译技术,将程序编译为与 CPU 架构匹配的本地指令,提高执行效率。
    自 Linux 3.15 版本引入 eBPF 后,它被广泛应用于网络、监控、安全等领域。用户可以通过 eBPF 编写定制化的网络策略、流量监控工具等,极大地增强了 Linux 网络的可编程性和灵活性。

XDP (eXpress Data Path)

XDP 是 eBPF 的一种应用,专门用于提升 Linux 网络栈的性能。它允许网络数据包在进入网络协议栈之前进行处理,直接在网卡驱动程序层处理数据,从而显著降低延迟并提高吞吐量。与 DPDK 类似,XDP 提供了极高的网络性能,但它有一些额外的优势:

  • 无需外部库:不像 DPDK 需要第三方库,XDP 是内核原生支持的,免去外部依赖。
  • 灵活的网络模式支持:同时支持轮询和中断模式,不限制硬件配置。
  • 不需要大页内存:避免了 DPDK 对大页内存的需求,简化了配置。
  • 无需专用 CPU 资源:XDP 可以在普通 CPU 上运行,而不需要专门为网络处理分配 CPU 核心。
    尽管 XDP 提供了显著的性能提升,但也有一些权衡:
  • 丢包风险:当 TX(发送)设备的处理速度跟不上 RX(接收)设备时,XDP 会直接丢弃包,不支持缓存队列(如 qdisc)。
  • 专用程序:XDP 程序是专门为某个应用设计的,缺乏网络协议栈的通用性,可能无法处理所有类型的网络流量。

eBPF 和 XDP 之间的关系

  • XDP 是 eBPF 在高性能网络处理中的应用,专注于数据包在进入 Linux 网络协议栈之前的高速处理。
  • eBPF 提供了基础的可编程能力,而 XDP 则利用这一能力优化数据路径,提供低延迟和高吞吐量的网络处理。
  • XDP 在处理速度上优于传统网络栈,但也牺牲了部分通用性和公平性。

总结来说,eBPF 是一种强大的内核级编程模型,XDP 是其在网络数据处理中的具体实现,二者相辅相成,使得 Linux 网络栈具备了更高效的可编程性和灵活性。

BPF 和 XDP 参考官网指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/972971.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端知识点---vue的声明周期(vue)

文章目录 创建挂载更新销毁 vue的生命周期有四个阶段: 创建 挂载, 更新和销毁 创建 是vue组件从创建到准备渲染的过程 dom还没挂载到页面中 进行了初始化工作: 初始化数据(data,props) . 设置计算属性computed 初始化方法 methods 绑定事件watch 创建阶段的钩子函数beforeCrea…

MySQL如何解决幻读?

目录 一、什么是幻读? 1.1 幻读的定义 1.2 幻读的示例 1.3 幻读产生的原因? 1.4?读已提交(Read Committed) 1.4.1 确定事务等级 1.4.2 非锁定读取 准备 示例 结论 1.4.3 锁定读取 准备 示例 分析 结论 1.5?可重…

Day15-后端Web实战-登录认证——会话技术JWT令牌过滤器拦截器

目录 登录认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试 2. 登录校验2.1 问题分析2.2 会话技术2.2.1 会话技术介绍2.2.2 会话跟踪方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技术 2.3 JWT令牌2.3.1 介绍2.3.2 生成和校…

支持所有模拟器根证书一键植入方便快捷

qq 点-我咨-】--询 群 Android系统中的安全证书分为“用户证书”和“系统证书”两类。用户可以在设备的设置 -> 安全 -> 查看安全证书页面中,分别查看“系统”和“用户”两个独立的证书列表。其中,用户证书通常是通过浏览器下载安装,或…

WinMerge深度解析:开源免费的文件与文件夹比较利器

在文件与文件夹比较工具中,WinMerge凭借其开源免费、功能全面的特点,赢得了广大用户的喜爱。本文将对WinMerge进行深度解析,帮助大家更好地了解这款工具。 一、开源免费,持续更新 WinMerge是一款专为Windows设计的开源免费文件与文件夹比较工具,自2000年诞生以来,至今已…

OpenCV形态学操作

1.1. 形态学操作介绍 初识: 形态学操作是一种基于图像形状的处理方法,主要用于分析和处理图像中的几何结构。其核心是通过结构元素(卷积核)对图像进行扫描和操作,从而改变图像的形状和特征。例如: 腐蚀&…

PHP旅游门票预订系统小程序源码

🌍 旅游门票预订系统:一站式畅游新体验,开启您的梦幻旅程 🌟 一款基于ThinkPHPUniapp精心雕琢的旅游门票预订系统,正翘首以待,为您揭开便捷、高效、全面的旅游预订新篇章!它超越了传统预订平台…

第8章作业

接口ip配置 r2 [r2]interface GigabitEthernet 0/0/0 [r2-GigabitEthernet0/0/0]ip address 13.0.0.3 24 [r2-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1 [r2-GigabitEthernet0/0/1]ip address 100.1.1.254 24 [r2-GigabitEthernet0/0/1]interface GigabitEthernet…

连续学习、增量学习有哪些应用场景?

游戏场景 在游戏环境中,智能体需要不断学习如何在复杂的环境中取得高分。例如: Atari游戏:智能体通过观察游戏画面(状态)并输出操作(动作)来玩游戏。由于游戏的动态性和复杂性,智能体…

java项目之学术成果管理系统源码(ssm+前端+mysql)

项目简介 学术成果管理系统实现了以下功能: 宠物医院信息管理系统的主要使用者分为管理员:个人中心、用户管理、医生管理、医学知识管理、科室信息管理、医生信息管理、预约挂号管理、医嘱信息管理、药品信息管理、订单信息管理、留言板管理、系统管理…

【Spring+MyBatis】_图书管理系统(下篇)

图书管理系统上篇、中篇如下: 【SpringMyBatis】_图书管理系统(上篇)-CSDN博客 【SpringMyBatis】_图书管理系统(中篇)-CSDN博客 目录 功能5:删除图书 6.1 约定前后端交互接口 6.2 后端接口 6.3 前端…

《STL 六大组件之容器探秘:深入剖析 string》

目录 一、string 类简介二、string 类的常用接口1. 构造函数(constructor function)2. 与容量相关的接口(capacity)3. 与迭代器有关的接口(iterator)4. 与元素访问有关的接口(element access&am…

深⼊理解指针(1)

1. 内存和地址 1.1 内存 我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的 数据也会放回内存中。 那这些内存空间如何高效的管理呢? 其实也是 把内存划分为⼀个个的内存单元&…

解决element-ui的el-select使用filterable属性时,下拉框展开后,点击箭头图标收不回去问题

问题&#xff1a;当el-select下拉组件设置filterable属性时&#xff0c;下拉框展开后&#xff0c;再点击箭头图标下拉框收不回去了 解决方法&#xff1a; 在el-select标签上新增事件 visible-change“selectVisibleChange” focus"selectFocus"的处理 <el-select…

Es的text和keyword类型以及如何修改类型

昨天同事触发定时任务发现es相关服务报了一个序列化问题&#xff0c; 今天早上捕获异常将异常堆栈全部打出来看&#xff0c;才发现是聚合的字段不是keyword类型的问题。 到kibbna命令行执行也是一样的错误 使用 /_mapping查看索引的字段类型&#xff0c;才发现userUniqueid是te…

EasyExcel实现excel导入(模版上传)

目录 效果pom.xmlapplication.ymlcontrollerservice依赖类前台vue代码某个功能如果需要添加大量的数据,通过一条条的方式添加的方式,肯定不合理,本文通过excel导入的方式来实现该功能,100条数据导入成功85条,失败15条,肯定需要返回一个表格给前台或者返回1个错误excel给前…

BFS算法——层层推进,最短之路,广度优先搜索算法的诗意旅程(下)

文章目录 引言一. 迷宫中离入口最近的出口1.1 题目链接&#xff1a;https://leetcode.cn/problems/nearest-exit-from-entrance-in-maze/1.2 题目分析&#xff1a;1.3 思路讲解&#xff1a;1.4 代码实现: 二. 最小基因变化2.1 题目链接&#xff1a;https://leetcode.cn/problem…

Linux----Makefile基础

Makefile 是自动化构建工具 make 的配置文件&#xff0c;用于定义编译规则和依赖关系&#xff0c;实现高效增量编译。 初识makefile 1. 什么是 make&#xff1f; 定义&#xff1a; make 是一个命令行工具&#xff08;可执行程序&#xff09;&#xff0c;用于解析并执行 Makef…

leetcode876.链表的中间结点

目录 问题描述示例提示 具体思路思路一 代码实现 问题描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 题目链接&#xff1a;链表的中间结点 示例 提示 链表的结点数范围是 [1, 100]   1 &…

设计变更滞后导致生产计划混乱?PLM与MES集成实时同步

当产品设计在PLM系统中发生变更时&#xff0c;这些变更信息却无法及时、准确地传递到MES系统中。结果是&#xff0c;车间生产现场仍然按照旧的设计指令执行&#xff0c;导致生产出的产品与设计要求不符&#xff0c;不仅引发质量问题&#xff0c;还可能造成停工、物料浪费甚至客…