Cilium CNI深度指南

Cilium是基于eBPF的功能强大的CNI插件,为云原生环境提供了强大的网络和安全支持。原文: Cilium CNI: A Comprehensive Deep Dive Guide for Networking and Security Enthusiasts!

🌓简介

欢迎阅读为网络和安全爱好者提供的全面深入的指南!

本文将以一种初学者也能理解的方式解析Cilium的概念和复杂性,如果你对如何通过Cilium网络性能和安全性感到好奇,那就来对地方了!

Cilium是一个功能强大的容器网络接口(CNI)插件,已经成为领先的解决方案,彻底改变了云原生环境中的网络和安全。

但是Cilium到底是什么,是如何工作的呢?不要害怕,我们会用简单易懂的语言一步一步引导你走完这段旅程。无论你是开发人员、系统管理员,还是仅仅是对尖端网络和安全技术着迷的人,本指南都将为你打下探索Cilium功能的坚实基础。

alt
🔭目标

本文将介绍Cilium基础知识,包括核心功能、如何与Kubernetes等容器编排系统集成,以及如何利用eBPF技术来增强网络可见性和安全性。最后你将清楚了解Cilium如何帮助我们为应用构建健壮、可扩展、安全的网络解决方案。

准备好进入Cilium的世界了吗?让我们一起踏上这段激动人心的旅程吧!

TLDR;
服务网格(Service Mesh): 🐝

Cilium支持Service Mesh相关的各种用例。本节将探讨Cilium需要什么,如何配置,以及通过eBPF管理这些组件的好处。

Ingress:

Cilium可以作为Ingress Controller,如果进行了相应配置,就可以管理Ingress(Cilium文档提供了根据需求启用不同参数的详细信息)。

将Cilium部署为Ingress Controller,可以像其他Ingress Controller一样定义Ingress。只需在规范中指定ingressClassName: cilium即可依赖Cilium。

除了简单的Ingress之外,Cilium还支持相对较新的Gateway API。🎉[最佳功能😃]

Gateway API: 🚪

alt

Kubernetes Gateway API是针对不同Kubernetes资源的规范,通过提供接口来扩展集群功能,该接口可以由各种k8s服务提供者(如Cilium)以不同方式实现。

这是一个可以遵循的标准,可以为Kubernetes集群提供更容易的外部服务互操作性。

一旦服务在集群和Cilium的Helm Chart中启用(- set gatewayAPI.enabled=true),就可以创建符合Gateway API规范的资源(Gateway, HTTPRoute等):

alt

Cilium现在可以提供了完全一致的Gateway API实现,这是Kubernetes集群中North-South Load-Balancing(南北负载均衡) 和流量路由的新标准。在保持和扩展Ingress支持的同时,Gateway API代表了流量管理的未来。

Gateway API的发展是由Ingress API的局限性所驱动的。Ingress缺乏高级负载平衡功能,只支持基本的基于内容的HTTP流量请求路由。此外,管理Ingress越来越具有挑战性,供应商依赖注解来处理功能差异,从而导致不一致。

为了克服这些限制,Gateway API从头开始设计,解决了核心路由需求,并结合多年来从Ingress中学到的经验。该API遵循面向角色的方法,允许网络架构师为多个团队构建共享的网络基础设施,而不会出现协调问题。🕸

✅在Cilium 1.13中,Gateway API通过了所有一致性测试,并支持各种用例,例如:

  • HTTP Routing(HTTP路由)
  • TLS Termination(TLS终结)
  • HTTP Traffic Splitting / Weighting(HTTP流量拆分/加权)
  • HTTP Header Modification(HTTP报头修改)
L7负载均衡和流量管理与Cilium:🚥

Cilium由Envoy技术驱动,在服务网格架构中提供先进的L7流量管理[1]功能。

它允许开发人员和运维人员在命名空间或全局级别定义Envoy配置,从而启用负载均衡、流量分割、镜像、修改和加密等特性。通过启用正确配置,Cilium使用户能够优化性能、增强安全性,并获得有关L7流量的宝贵见解。

alt

在Cilium 1.13中,引入了使用Cilium的嵌入式Envoy代理实现Kubernetes服务的L7负载均衡的新功能。通过在Kubernetes服务上应用一个简单的注解service.cilium.io/lb-l7: enabled,可以在集群内无缝启用L7负载均衡,支持基于Cilium ClusterMesh的多集群场景。

该功能解决了gRPC负载均衡的运维复杂性,并消除了对额外工具或服务网格的需求。

此外,Cilium为Ingress API资源提供了改进功能。在1.13版本中,Cilium Ingress支持共享LoadBalancer模式,即多个Ingress资源共享相同的LoadBalancer资源和IP地址。这大大降低了与云负载均衡器和公共IP相关的成本,从而为云工程师提供了更好的成本效益。

这些特性突出了Cilium在管理L7流量、与Envoy集成以及为Kubernetes服务提供高效负载均衡解决方案方面的强大功能。

在L7 Ingress/Egress流量控制和SNI支持下保护流量:

确保通信安全性是任何软件架构的基本面。Cilium作为容器网络接口(CNI),在保持简单而富有表现力的配置体验的同时,充分认识到了安全的重要性。

为了加强安全性,Cilium基于网络策略(例如CiliumNetworkPolicy),限制来自预批准的源的传入流量。通过应用策略,从标记为org=myorg的端点发出的流量可以限制为特定的完全限定域名(FQDN),如secure.my-corp.com,确保没有其他流量离开这些端点并与外部FQDN通信。

要注意,将网络流量策略应用于出口并将端点策略从Default Allow(默认允许)模式转换为Default Deny(默认拒绝)模式,从而提供受控环境。

在网络策略上下文中,需要考虑kube-system/kubedns和端口53,从而确保端点内的pod有效利用DNS解析。由于应用上述策略将端点转换为Default Deny模式,因此必须显式允许端点发送DNS查询。

此外,Cilium 1.13在网络策略中引入了对SNI (Server Name Indication) 的支持,进一步增强了网络安全性。SNI是传输层安全(TLS) 协议的扩展,允许单个IP地址服务多个域名。

有了这个新功能,运营商可以限制其网络中允许的TLS SNI值,从而打造更安全的环境。在实现方面,SNI支持是通过Envoy重定向实现的,根据客户端消息中存在的SNI值将连接重定向到不同的端点。

为了利用Cilium中的SNI支持,在Cilium网络策略中添加了一个名为ServerNames的新字段,该字段允许运营商指定允许的TLS SNI值列表。如果ServerNames字段不为空,则必须存在TLS,并且必须在TLS握手期间指定SNI。

使用以下策略,可以允许流量访问amit.cilium.rocks SNI:

alt
使用Cilium检查TLS加密连接:

TLS加密的广泛使用,特别是HTTPS这样的协议,已经成为日常交互中数据安全的基石,这些协议确保对承载的有价值数据提供安全保障。

因为加密使连接不透明,有人可能会认为这对网络流量的管理和可观察性提出了挑战。然而由于TLS inspection机制,情况并非如此,这种机制类似于由Cilium精心策划的中间人攻击。

alt

与典型egress流程不同,Cilium能够执行以下操作:

  1. 拦截来自Cilium端点的新创建请求,该请求由使用Cilium认可的内部证书颁发机构生成。
  2. 终结TLS,从而获得对请求内容的访问权。
  3. 执行网络策略和其他相关操作。
  4. 使用公共证书颁发机构(或至少为组织集群内的出站流量批准的证书颁发机构)重新创建新的TLS请求。
  5. 向原始目标发出新创建的HTTPS请求,然后执行其标准终结过程。

通过这个过程,Cilium可以在不影响安全性的情况下检查TLS连接。它利用拦截和重新创建请求的能力,从而在加密流量中有效实施网络策略和可观察性。

通过使用TLS连接检测,Cilium在安全加密和必要的网络流量管理和监控之间取得了平衡,确保了数据安全和运维可见性。

Cilium服务网格中的双向认证: mTLS支持介绍

双向认证受到服务网格用户的高度重视,被认为是至关重要的特性,这一功能在Cilium Service Mesh中的实现始终备受期待。在Cilium 1.13中,在数据路径级别引入了对mTLS(双向传输层安全)的支持,使得Cilium能够对集群内对等节点上的端点进行身份验证,并基于成功的双向身份验证来控制数据平面的连通性。

虽然此实现可能不会立即面向用户发布,但为将来的开发奠定了基础,使mTLS为用户做好了准备。

现有双向身份验证实现通常会对用户施加各种限制,以增强安全性。这些限制包括使用TCP+TLS进行身份验证和加密,或者要求在数据平面中使用(sidecar)代理。然而,这样的限制增加了复杂性和处理成本。我们相信,通过结合基于会话的身份验证和基于网络的身份验证的优势,可以提供比以前的方法更快、更灵活的安全实现。

我们的长期目标包括为pod提供一种机制来选择对等身份验证,支持可插拔的证书管理系统(如SPIFFE、Vault、SMI、Istio、cert-manager等),提供可配置的证书粒度,以及利用现有的对数据平面的加密协议支持。

alt
Cilium和Grafana合作: 增强网络可观测性

在Grafana和Isovalent的合作[2]中,Cilium与Grafana相互集成,能够全面监控Kubernetes中云原生应用之间的网络连接。该集成利用Prometheus指标、Grafana仪表板和警报,以及Grafana Tempo跟踪来观察网络的健康状况和性能。

随着Cilium 1.13的发布,双方的合作关系取得了重大进展。一个显著的改进是通过合并跟踪对分布式系统进行故障排除的能力。以前,应用开发人员可以将跟踪发送到首选跟踪后端,例如Grafana Tempo。然而,网络指标并不包括在内。现在,有了Cilium 1.13,这个鸿沟就被弥合了。

在Cilium 1.13中,Hubble的L7 HTTP可见性功能从L7 HTTP请求中提取OpenTelemetry traceParent报头,并链接到Hubble flow。这种集成允许用户在Hubble的L7 HTTP指标中查看其应用程序的traceID,提供从指标到跟踪的无缝过渡。

此外,Cilium 1.13引入了Hubble数据源插件,扩展了Grafana生态系统。该插件可以详细了解网络流量,允许与应用级遥测相关联。集成了存储Hubble指标的Prometheus,存储分布式跟踪的Tempo,以及Hubble Timescape,等价于Cilium企业级可观测平台。

有了这些进步,用户可以利用Grafana获得数据源的全面视图,实现增强的网络可观察性以及网络流量和应用遥测之间的相关性。

alt
在Cilium中使用BIG TCP增强性能:

Cilium是云服务商、金融机构和电信服务商青睐的选择,由于能够最大限度提高网络性能,正在被广泛采用。这些组织都有一个共同目标,即寻求网络性能的增量收益,特别是当他们构建能够处理100Gbps及更高速度的网络时。

然而,采用高速100Gbps网络适配器带来了一个挑战: CPU如何有效处理大量数据包?假设MTU为1538字节,每秒可以达到800万个数据包。系统处理每个数据包的可用时间只有120纳秒,很明显,现有方法是不现实的。此外,为了处理如此巨大的数据包负载,管理接口对上层协议层需要大量开销。

BIG TCP是一个突破性解决方案。如果数据包有效负载可以组合成超大大小的数据包会怎么样?通过增加数据包大小,可以减少开销,从而潜在提高吞吐量并减少延迟。

在最新发布的Cilium 1.13版本中,现在可以在集群中使用BIG TCP令人兴奋的新特性,提供增强的性能优势。

alt
🔚结论:

Cilium CNI是Kubernetes强大的网络和安全解决方案。它基于eBPF的数据平面提供了高性能和灵活性。通过加密、负载均衡和分布式防火墙等特性,支持安全的微服务架构。

Cilium的可观察性和安全能力提供了对网络流量和攻击防护的深刻见解,与Kubernetes RBAC的集成支持细粒度安全策略。

对于网络和安全爱好者来说,探索Cilium为Kubernetes的部署打开了令人兴奋的可能性。让我们深入了解Cilium,利用Cilium CNI提升网络的性能和安全性!


你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

参考资料
[1]

Cilium L7 Traffic Management: https://docs.cilium.io/en/stable/network/servicemesh/l7-traffic-management

[2]

Grafana Labs Partners with Isovalent to Bring Best-in-Class Grafana Observability to Cilium's Service Connectivity on Kubernetes: https://grafana.com/about/press/2022/10/24/grafana-labs-partners-with-isovalent-to-bring-best-in-class-grafana-observability-to-ciliums-service-connectivity-on-kubernetes/?pg=blog&plcmt=body-txt

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】_传输层协议UDP与TCP

目录 1. 开发中常见的数据组织格式 1.1 XML 1.2 JSON 1.3 Protobuf 2. 端口号 3. UDP协议 4. TCP协议 4.1 特点 4.2 TCP报文格式 4.3 TCP可靠性机制 4.3.1 确认应答机制 4.3.2 超时重传机制 4.3.2.1 丢包的两种情况 4.3.2.2 重传时间 4.3.3 连接管理机制 4.3.3…

VSCode如何让先前打开的文件不被自动关闭,一直保持在标签栏里(关闭预览模式)

第一次接触VSCode-Huawei IDE编辑器,每次打开一个新的代码文件,旧的代码文件都会被自动关闭(现在才知道是因为文件默认是以预览模式打开展示的)。 那么如何才能让先前打开的文件一直保持在标签栏里呢? 我们需要去设置…

MySQL 升级脚本制作

当数据库更新字段后或添加一些基础信息,要对生产环境进行升级,之前都是手动编写sql,容易出错还容易缺失。 通过 Navcat 工具的数据库结构同步功能和数据同步功能完成数据库脚本的制作。 一、结构同步功能 1、选择 工具–结构同步&#xff1…

【项目技术点总结之三】使用Java生成复杂好看的word或pdf报告的解决方案

前言 项目中往往会遇到需要生成报告的场景,不管是简单报告还是复杂报告,其实都需要找很多资料去尝试,本文会提出几种个人完美解决报告生成的解决方案,而且会提出几个失败但是能生成报告的设想,当然都是踩过坑的&#…

Web3智能合约:重新定义商业合作的未来

随着区块链技术的飞速发展,Web3时代正逐渐到来,而其中的智能合约成为推动商业合作变革的关键力量。本文将深入探讨Web3智能合约的概念、特点以及对商业合作未来的巨大影响。 什么是Web3智能合约? 智能合约是一种以代码形式编写、自动执行合同…

Linux——进程间通信:管道

我们在开发过程中,可能会碰到两个或多个进程需要协同进行,这两个进 程之间有着一定的关系,这个进程可能会需要另一个进程的某些消息来达 到自己的目的,或者是一个进程控制着另一个进程,又或者是需要某种资 源的共享。但…

Blazor入门100天 : 自做一个支持长按事件的按钮组件

好长时间没继续写这个系列博客了, 不知道大家还记得我吗? 话不多说,直接开撸. 配套源码 demo https://blazor.app1.es/b19LongPressButton ####1. 新建 net8 blazor 工程 b19LongPressButton 至于用什么模式大家各取所需, 我创建的是ssr单工程, 如果大家不小心建立错了按页…

C#上位机与三菱PLC的通信03--MC协议之A-1E报文解析

1、MC协议帧 MC协议可以在串口通信,也可以在以太网通信,有A-1E和Qna-3E两种模式,这两种都是三菱PLC通信协议中比较常用的两种,一般我们使用比较多的是以太网通信,对于FX5U系列/Q系列/Qna系列/L系列的PLC,…

深度学习入门笔记(八)可以不断思考的模型:RNN与LSTM

8.1 循环神经网络RNN 之前学到的 CNN 和全连接,模型的输入数据之间是没有关联的,比如图像分类,每次输入的图片与图片之间就没有任何关系,上一张图片的内容不会影响到下一张图片的结果。但在自然语言处理领域,这就成了…

spring boot(2.4.x 开始)和spring cloud项目中配置文件application和bootstrap加载顺序

在前面的文章基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 spring boot 2.4.x 版本之前通过 ConfigFileApplicationListener 加载配置 https://github.com/spring-projects/spring-boot/blob/v2.3.12.RELEASE/spring-boot-project/spring-boot/src/mai…

Redis Centos7 安装到启动

文章目录 安装Redis启动redis查看redis状况连接redis服务端 安装Redis 1.下载scl源 yum install centos-release-scl-rh2.下载redis yum install rh-redis5-redis 3. 创建软连接 1.cd /usr/bin 2. In -s /opt/rh/rh-redis5/root/usr/bin/redis-server ./redis-server 3. …

【RT-DETR进阶实战】利用RT-DETR进行过线统计(可用于人 、车过线统计)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 Hello,各位读者,最近会给大家发一些进阶实战的讲解,如何利用RT-DETR现有的一些功能进行一些实战, 让我们不仅会改进RT-DETR,也能够利用RT-DETR去做一些简单的小工作,后面我也会将这些功能利用PyQt或者是p…

机器学习系列——(十九)层次聚类

引言 在机器学习和数据挖掘领域,聚类算法是一种重要的无监督学习方法,它试图将数据集中的样本分组,使得同一组内的样本相似度高,不同组间的样本相似度低。层次聚类(Hierarchical Clustering)是聚类算法中的…

幻兽帕鲁服务器创建私服教程(新版教程更简单)

幻兽帕鲁官方服务器不稳定?自己搭建幻兽帕鲁服务器,低延迟、稳定不卡,目前阿里云和腾讯云均推出幻兽帕鲁专用服务器,腾讯云直接提供幻兽帕鲁镜像系统,阿里云通过计算巢服务,均可以一键部署,鼠标…

项目02《游戏-07-开发》Unity3D

基于 项目02《游戏-06-开发》Unity3D , 接下来做UI框架的逻辑系统,管理器和UI背包, 首先闯将UI框架的两个重要脚本 BasePanel.cs 和 UIManager.cs , 双击BasePanel.cs脚本修改代码: using UnityEngine; pu…

【java苍穹外卖项目实战一】苍穹外卖项目介绍

文章目录 1、项目介绍1、项目概述2、 产品原型3、技术选型 1、项目介绍 在开发苍穹外卖这个项目之前,我们需要全方位的来介绍一下当前我们学习的这个项目。接下来,我们将从项目简介、产品原型、技术选型三个方面来介绍苍穹外卖这个项目。 1、项目概述 …

绝缘栅极晶体管IGBT

IGBT(绝缘栅极晶体管): 常用于百V百A级使用,外观上看相比于MOS最大的区别是比较大,mos主要用于中小功率器件中。 本质是一个电子开关,相比于MOS和三极管来说其最大的特点是耐压很高,可达6000V以上&#xf…

【LeetCode每日一题】525连续数组 303区域和检索(前缀和的基本概念和3个简单案例)

前缀和 // 构造prefix let prefix [0] arr.forEach(num > {prefix.push(prefix.at(-1) num); })如果想要计算某个区间 i 到 j 这个子数组的和时,可以根据 prefix[j1] - prefix[i] 获得。 例题1:303.区域和检索 - 数组不可变 给定一个整数数组 num…

【开源】SpringBoot框架开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

npm---设置淘宝镜像时报“certificate has expired“的错误

今天使用vue create my-app 创建项目时,竟然报错: Error: Command failed: npm info vue-cli-version-marker --json --registryhttps://registry.npm.taobao.org npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request t…