系列文章

Cilium 简介

Cilium 是一个开源的云原生解决方案,用于提供、保护(安全功能)和观察(监控功能)工作负载之间的网络连接,由革命性的内核技术 eBPF 提供动力。Cilium 主要使用场景是在 Kubernetes中,但 Cilium 的优势并不仅限于 Kubernetes 环境。

在 Kubernetes 环境中,Cilium 可充当网络插件,提供 pod 之间的连接。它通过执行网络策略(network policy)和透明加密来提供安全性,而 Cilium 的 Hubble 组件则提供了网络流量流的深度可见性(监控功能)。

得益于 eBPF,Cilium 的网络、安全和可观察性逻辑可以直接编程到内核中,从而使 Cilium 和 Hubble 的功能对应用工作负载完全透明。这些将是 Kubernetes 集群中的容器化工作负载,不过 Cilium 也能连接虚拟机和标准 Linux 进程等传统工作负载。

关于 Cilium 可观察性, 典型的案例是: pod 中的应用无需启用 Tracing 功能, 也无需通过 exporter 将 http requests metrics 发给 Prometheus, 仅通过 Cilium 的 Hubble 功能, 就能直接获取到该应用的 http requests 的 RED(Requests, Errors, Durations).

Cilium 适用场景 - 解决大规模容器联网的挑战

在高度动态复杂的微服务世界中,主要从 IP 地址和端口的角度考虑网络问题可能会导致挫败感。使用传统的网络工具(通过五元组)实施可能会非常低效,只能提供粗粒度的可见性和过滤,从而限制了排除故障和保护容器网络安全的能力。这些都是 Cilium 要解决的难题。

从一开始,Cilium 就是为大规模、高动态的容器化环境而设计的。它能原生理解容器和 Kubernetes 身份,并解析 HTTP、gRPC 和 Kafka 等 API 协议,提供比传统防火墙更简单、更强大的可视性和安全性。

所以, Cilium 的功能要点集中在以下 3 点:

  • 高性能
  • 安全
  • 可观察性

Cilium - 基于 eBPF 构建

eBPF 使 Cilium 强大的安全可视性和控制逻辑能够动态插入 Linux 内核。eBPF 使 Linux 内核可编程,因此 Cilium 等应用可以 hook Linux 内核子系统,将用户空间应用上下文引入内核操作。

Notes:

也因此, 要使用完整的 Cilium 功能, 需要非常新版本的 Linux 内核. 目前官方推荐的 Linux Kernel 是 ≥ 5.10.

由于 eBPF 在 Linux 内核中运行,因此 Cilium 安全策略的应用和更新无需更改应用程序代码或容器配置。eBPF 程序与 Linux 网络数据路径挂钩,可用于在数据包进入网络套接字时,根据网络策略规则采取丢弃数据包等操作。

eBPF 能够以前所未有的粒度和效率实现对系统和应用程序的可见性和控制。它以完全透明的方式实现了这一点,而无需以任何方式更改应用程序。Cilium 利用 eBPF 的强大功能,将高效身份识别概念分层;将 Kubernetes 上下文信息(如元数据标签)引入 eBPF 驱动的网络逻辑。

接下来就让我们来谈谈 Cilium 能做些什么。

Cilium 功能

网络功能

Cilium 提供网络连接,允许 pod 和其他组件(Kubernetes 集群内部或外部)进行通信。Cilium 实现了一个简单的扁平 3 层网络,能够跨越多个集群连接所有应用容器(ClusterMesh 功能)。

默认情况下,Cilium 支持 overlay 网络模型,其中一个虚拟网络跨越所有主机。Overlay 网络中的流量经过封装,可在不同主机之间传输。之所以选择这种模式作为默认模式,是因为它对基础设施和集成的要求最低,只需要主机之间的 IP 连接。

Cilium 还提供本地路由(native routing)网络模式选项,使用每台主机上的常规路由表将流量路由到 pod(或外部)IP 地址。这种模式适用于高级用户,需要对底层网络基础设施有一定的了解。它与本地 IPv6 网络、云网络路由器或预先存在的路由守护程序配合使用效果很好。

身份感知网络策略执行

网络策略定义允许哪些工作负载相互通信,通过防止意外流量来确保部署安全。Cilium 可同时执行本地 Kubernetes NetworkPolicies 和增强型 CiliumNetworkPolicy 资源(CRD)类型。

传统防火墙通过过滤 IP 地址和目标端口来保护工作负载。在 Kubernetes 环境中,每当集群中的 pod 启动时,都需要对所有节点主机上的防火墙(或 iptables 规则)进行操作,以便重建与所需网络策略执行相对应的防火墙规则。这并不能很好地扩展。

为了避免这种情况,Cilium 根据 Kubernetes 标签等相关元数据为应用容器组分配一个身份(identity)。然后将该身份与应用容器发出的所有网络数据包关联起来,使 eBPF 程序能够在接收节点有效验证身份,而无需使用任何 Linux 防火墙规则。例如,当扩展部署并在集群中创建新 pod 时,新 pod 与现有 pod 共享相同的身份。与网络策略执行相对应的 eBPF 程序规则无需再次更新,因为它们已经知道 pod 的身份!

传统防火墙在第 3 层和第 4 层运行,而 Cilium 还能确保 REST/HTTP、gRPC 和 Kafka 等现代第 7 层应用协议的安全(除了在第 3 层和第 4 层执行外)。它能根据应用协议请求条件执行网络策略,例如

  • 允许方法为 GET、路径为 /public/.* 的所有 HTTP 请求。拒绝所有其他请求。
  • 要求所有 REST 调用都包含 HTTP 标头 X-Token:[0-9]+

透明加密

现在,服务之间的数据加密已成为 PCI 或 HIPAA 等许多监管框架的要求。Cilium 支持使用 IPSec 或 WireGuard 进行简单配置的透明加密,启用后无需重新配置任何工作负载即可确保节点之间流量的安全。

多集群网络

Cilium 的 Cluster Mesh 功能可让工作负载轻松与不同 Kubernetes 集群中托管的服务进行通信。您可以在不同区域的群集中运行服务,并使用 Cilium Cluster Mesh 将它们连接起来,从而实现服务的高可用性。

负载均衡

Cilium 为应用程序容器和外部服务之间的流量实现分布式负载平衡。事实上,Cilium 可以完全替代 kube-proxy 等组件,也可以用作独立的负载均衡器。eBPF 使用高效的哈希表实现负载平衡,几乎可以无限扩展。

增强的网络可观察性

虽然我们对 tcpdump 和 ping 等工具情有独钟,它们在我们心中永远占据着特殊的位置,但它们无法胜任在动态 Kubernetes 集群环境中排除网络问题的任务。Cilium 致力于提供可观察性工具,让您能够快速识别和修复集群网络问题。

为此,Cilium 推出了名为 Hubble 的专用网络可观察性组件。Hubble 利用 Cilium 的身份概念,以可操作的方式轻松过滤流量,并提供以下功能:

  • 第 3/4 层(IP 地址和端口)和第 7 层(API 协议)的网络流量可见性
  • 带元数据的事件监控: 当数据包被丢弃时,该工具不仅会报告数据包的源 IP 和目标 IP,还会提供发送方和接收方的完整标签信息以及大量其他信息
  • 可配置的 Prometheus 指标导出
  • 可视化集群网络流量的图形用户界面

具体效果如下:

Prometheus 指标

如前文提到的那样, Cilium 和 Hubble 通过 Prometheus 输出有关网络性能和延迟的指标,因此您可以将 Cilium 指标集成到现有的 Grafana 仪表板中。

Notes:

最新消息, Cilium 和 Grafana 合作有初步成果了 —— Grafana Hubble 数据源.

具体可以阅读这篇文章: Monitor Kubernetes network and security events with Hubble and Grafana

Service Mesh

如上所述,Cilium 支持服务间的负载平衡、应用层可见性和各种与安全相关的功能,所有这些都是 Kubernetes 服务网格的功能。Cilium 还支持 Kubernetes 的 Ingress 和 Gateway API,可提供全套服务网格功能,但不需要在每个 pod 中注入 sidecar 的开销

总结

Cilium 是一个开源的云原生解决方案,用于提供、保护(安全功能)和观察(监控功能)工作负载之间的网络连接,由革命性的内核技术 eBPF 提供动力。Cilium 主要使用场景是在 Kubernetes中.

Cilium 最主要的特点是:

  • 高性能
  • 安全功能
  • 可观察性

Cilium 除了作为 Kubernetes CNI 之外, 还有很多其他功能, 包括不限于:

  • 多集群网络
  • 负载均衡(完全替代 kube-proxy)
  • Service Mesh

让我们继续前进!

️参考文档

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

Cilium系列-1-Cilium特色 功能及适用场景的更多相关文章

  1. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  2. H3C系列之三层交换机dhcp功能的开启

    环境介绍>>>>>>>>>>>>>>>>>>>>交换机名牌:H3C交换机类型:三 ...

  3. Bing Maps进阶系列四:路由功能服务(RouteService)

    Bing Maps进阶系列四:路由功能服务(RouteService) Bing Maps提供的路由功能服务(RouteService)可以实现多方位的计算地图上的路线指示,路径行程等功能,比如说实现 ...

  4. OpenvSwitch系列之五 网桥特性功能配置

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

  5. 痞子衡嵌入式:浅谈i.MXRT1xxx系列MCU时钟相关功能引脚的作用

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列MCU时钟相关功能引脚作用. 如果我们从一颗 MCU 芯片的引脚分类来看芯片功能,大概可以分为三大类:电源.时钟 ...

  6. Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍

    大家好,又见面了. 到这里呢,已经是本SpringData JPA系列文档的第三篇了,先来回顾下前面两篇: 在第1篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring ...

  7. VSPackge插件系列:常用IDE功能的封装

    继上一篇VSPackge插件系列简单介绍如何正确的获取DTE之后,就一直没发VSPackge插件系列的文章了,最近同事也想了解如何在代码中与VS交互,特发一篇文章示例一些简单功能是如何调用,也以备以后 ...

  8. Office365开发系列——开发一个全功能的Word Add-In

    2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发”48小时黑客马拉松“,我开发的一个Word Add-In Demo——WordTemplate ...

  9. 学习ASP.NET Core Razor 编程系列九——增加查询功能

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  10. NRF52840相对于之前的NRF52系列、NRF51系列增加了什么功能

    现在广大客户的蓝牙采用NORDIC越来越多了,NORDIC一直在不断进行技术改进更好的满足市场需求 推出了新款NRF52840.NRF52840更为先进些,支持的功能也多点,比如IEEE802.15. ...

随机推荐

  1. Springboot3整合使用ja-captcha行为验证码解决方案

    截止到目前,Springboot最新稳定版本已经迭代到3.0.5,而我们项目中使用的行为验证码框架ja-captcha还没有适配Springboot3,码云上类似的请求也没有得到过回应,于是决定自己动 ...

  2. 【Python毕业设计】基于Python+Flask+MySQL的学生信息管理系统(附完整源码)

    1.项目说明基于python+Flask+mysql的学生信息管理系统项目实战 项目需要安装pycharm专业版,mysql数据库以及项目所需的所有模块创建数据库名称db_online_notes,然 ...

  3. OpenAI ChatGPT 能取代多少程序员的工作?导致失业吗?

    阅读原文:https://bysocket.com/openai-chatgpt-vs-developer/ ChatGPT 能取代多少程序员的工作?导致我们程序员失业吗?这是一个很好的话题,我这里分 ...

  4. FLV文件分析

    很久没看,做下关于FLV文件格式知识点回顾! 一.简单介绍        FLV(Flash Video)是Adobe公司推出的一种媒体封装格式.一个FLV文件,每个Tag类型都属于一个流.也就是说一 ...

  5. Python-获取Local Storage和Session Storage

    一.简介 LocalStorage 是只读的.数据存储也是跨浏览器会话.LocalStorage 类似于SessionStorage. 区别在于,数据存储在 LocalStorage 是无期限的,而当 ...

  6. Python-pytest-repeat的简单使用

    前言: 一.简介 pytest-repeat是pytest的插件,重复执行单个用例,或多个测试用例,并指定重复次数. 二.安装 1.执行如下命令 pip3 install pytest-repeat ...

  7. vivo积分任务体系的架构演进-平台产品系列05

    作者:vivo 互联网平台产品研发团队- Mu JunFeng 积分体系作为一种常见营销工具,几乎是每一家企业会员营销的必备功能之一,在生活中随处可见,随着vivo互联网业务发展,vivo积分体系的能 ...

  8. 联想win8改win7

    知识点分析:目前联想出厂预装Windows 8的台式和一体机使用都是UEFI+GPT硬盘的组合,并且开启了安全启动,但是目前除Window 8以外的其他Windows系统均不支持这种模式,因此如果需要 ...

  9. 2022-06-13:golang中,[]byte和结构体如何相互转换?

    2022-06-13:golang中,[]byte和结构体如何相互转换? 答案2022-06-13: []byte和结构体的转换的应用场景是数据解析. 代码里有两种方法,一种是内存不共用,另一种是内存 ...

  10. 2022-05-14:语法补全功能,比如“as soon as possible“, 当我们识别到“as soon as“时, 基本即可判定用户需要键入“possible“。 设计一个统计词频的模型,

    2022-05-14:语法补全功能,比如"as soon as possible", 当我们识别到"as soon as"时, 基本即可判定用户需要键入&quo ...