首页 > 其他分享 >cilium 基础

cilium 基础

时间:2024-05-27 15:23:43浏览次数:20  
标签:容器 eBPF IP 基础 应用程序 Cilium cilium

cilium 概述

Cilium 是一种网络、可观察性和安全解决方案,具有基于 eBPF 的数据平面。它提供了一个简单的扁平第 3 层网络,能够以本机路由或覆盖模式跨越多个集群。它具有 L7 协议感知能力,可以使用与网络寻址分离的基于身份的安全模型在 L3-L7 上实施网络策略。
Cilium 为 Pod 之间和外部服务之间的流量实现分布式负载均衡,并且能够完全取代 kube-proxy,在 eBPF 中使用高效的哈希表,从而实现几乎无限的规模。它还支持集成ingress和egress网关、带宽管理和服务网格等高级功能,并提供深入的网络和安全可观测性和监控。
Cilium 的基础是一种名为 eBPF 的新 Linux 内核技术,它可以在 Linux 本身内动态插入强大的安全可观测性和控制逻辑。由于 eBPF 在 Linux 内核内部运行,因此可以应用和更新 Cilium 安全策略,而无需对应用程序代码或容器配置进行任何更改。

cilium 优点

eBPF 能够以前所未有的粒度和效率对系统和应用程序进行可观测性和控制。它以完全透明的方式完成此操作,无需应用程序以任何方式进行更改。eBPF 同样能够处理现代容器化工作负载以及更传统的工作负载(例如虚拟机和标准 Linux 进程)。
现代数据中心应用程序的开发已转向面向服务的架构(通常称为微服务),其中大型应用程序被拆分为小型独立服务,这些服务通过使用 HTTP 等轻量级协议的 API 相互通信。微服务应用程序往往是高度动态的,随着应用程序横向扩展/收缩以适应负载变化以及作为持续交付的一部分部署的滚动更新期间,各个容器会启动或销毁。
这种向高度动态微服务的转变对于确保微服务之间的连接既是挑战也是机遇。传统的 Linux 网络安全方法(例如 iptables)会根据 IP 地址和 TCP/UDP 端口进行过滤,但 IP 地址在动态微服务环境中经常发生变化。容器的高度不稳定的生命周期导致这些方法难以与应用程序一起扩展,因为负载均衡表和访问控制列表携带数十万条规则,需要以不断增长的频率进行更新。出于安全目的,协议端口(例如用于 HTTP 流量的 TCP 端口 80)不能再用于区分应用程序流量,因为该端口用于跨服务的各种消息。
另一个挑战是提供准确可观测性的能力,因为传统系统使用 IP 地址作为主要识别工具,而在微服务架构中,其生命周期可能会大大缩短,仅为几秒钟。
通过利用Linux eBPF,Cillium保留了透明插入安全可见性+强制执行的能力,但这样做的方式是基于service / pod / container标识(与传统系统中的IP地址标识不同),并可以在应用层上进行过滤(如HTTP)。因此,Cillium不仅通过将安全性与寻址解耦,使在高度动态的环境中应用安全策略变得简单,而且除了提供传统的第3层和第4层外,还可以通过在HTTP层操作提供更强的安全隔离。
eBPF 的使用使 Cilium 能够以高度可扩展的方式实现所有这一切,即使对于大规模环境也是如此。

cilium 功能

cilium 功能结构图

透明地保护 API 的安全

能够保护 REST/HTTP、gRPC 和 Kafka 等现代应用程序协议。传统防火墙在第 3 层和第 4 层运行。在特定端口上运行的协议要么完全信任,要么完全阻止。Cilium 提供了过滤单个应用程序协议请求的能力,例如:
1. 允许所有GET方法和路径 /public/.* 的 HTTP 请求。拒绝所有其他请求。
2. 允许 service1 作为 Kafka 主题 topic1的生产者,并允许 service2 在 topic1 上进行消费。拒绝所有其他 Kafka 消息。
3. 要求 HTTP 标头 X-Token: [0-9]+ 出现在所有 REST 调用中。

基于身份的安全服务间通信

现代分布式应用程序依赖应用程序容器等技术来促进部署的敏捷性和按需扩展。这导致短时间内会启动大量的应用容器。典型的容器防火墙通过过滤源 IP 地址和目标端口来保护工作负载。这个概念要求每当容器在集群中的任何位置启动时,所有服务器上的防火墙都可以被操作。
为了避免这种限制规模的情况,Cilium 为共享相同安全策略的应用程序容器组分配一个安全身份。然后,该身份与应用程序容器发出的所有网络数据包相关联,从而允许在接收节点验证身份。安全身份管理是使用键值存储来执行的。

安全地访问和访问外部服务

基于标签的安全性是集群内部访问控制的首选工具。为了保护对外部服务的访问和从外部服务的访问,支持基于传统 CIDR 的入口和出口安全策略。这允许将应用程序容器的访问限制到特定的 IP 范围。

简单的组网

一个简单的扁平第 3 层网络能够跨越多个集群,连接所有应用程序容器。通过使用主机范围分配器,IP 分配变得简单。这意味着每个主机都可以分配 IP,而无需主机之间进行任何协调。支持以下多节点网络模型:

Overlay 

跨越所有主机的基于封装的虚拟网络。目前已内置 VXLAN 和 Geneve,但可以启用 Linux 支持的所有封装格式。
何时使用此模式:此模式具有最低的基础架构和集成要求。它几乎适用于任何网络基础设施,因为唯一的要求是主机之间的 IP 连接,而这通常已经给出。

Native Routing 

使用 Linux 主机的常规路由表。网络需要能够路由应用程序容器的 IP 地址。
何时使用此模式:此模式适用于高级用户,需要对底层网络基础设施有一定的了解。此模式适用于:
1. 本机 IPv6 网络
2. 与云网络路由器结合
3. 已经在运行路由守护程序

负载均衡

Cilium 为应用程序容器之间和外部服务之间的流量实现分布式负载均衡,并且能够完全替代 kube-proxy 等组件。负载平衡是在 eBPF 中使用高效的哈希表实现的,允许几乎无限的规模。
对于南北向类型的负载平衡,Cilium 的 eBPF 实现针对最大性能进行了优化,可以附加到 XDP(eXpress Data Path),并且如果不在源主机上执行负载平衡操作,则支持直接服务器返回(DSR)以及Maglev一致性哈希。
对于东西向类型的负载平衡,Cilium 直接在 Linux 内核的套接字层(例如在 TCP 连接时)执行高效的服务到后端转换,从而可以在较低层中避免每个数据包的 NAT 操作开销。

带宽管理

Cilium 通过基于 EDT(最早出发时间)的高效速率限制以及 eBPF 对流出节点的容器流量实施带宽管理。与带宽 CNI 插件中使用的 HTB(层次结构令牌桶)或 TBF(令牌桶过滤器)等传统方法相比,这可以显着减少应用程序的传输尾延迟,并避免在多队列 NIC 下锁定。

监控和故障排除

获得可见性和解决问题的能力是任何分布式系统运行的基础。虽然我们逐渐喜欢上了 tcpdump 和 ping 等工具,而且它们总是在我们心中占有特殊的位置,但我们仍努力提供更好的故障排除工具。这包括提供以下工具:
1. 使用元数据进行事件监控:当数据包丢失时,该工具不仅报告数据包的源和目标 IP,还提供发送者和接收者的完整标签信息以及许多其他信息。
2. 通过 Prometheus 导出指标:通过 Prometheus 导出关键指标,以便与现有仪表板集成。
3. Hubble:专门为 Cilium 编写的可观测平台。它提供服务依赖关系图、操作监控和警报以及基于流日志的应用程序和安全可见性。

cilium 使用场景

可以将 Cilium 用于各种目的,例如多租户安全实施、多集群负载平衡和高性能网络。 Cilium 的一些多样化用例包括:
1. 高效、可扩展、灵活的容器网络。
2. 无 Sidecar、eBPF 加速的服务网格解决方案,包括入口和网关 API 支持。
3. 基于身份的网络策略和API 感知过滤。
4. DNS 过滤和加密(IPsec、WireGuard 和 TLS)。
5. Hubble、Prometheus 和 Grafana 支持的可观测性。
6. 完全替代 kube-proxy组件。

高性能云原生网络 CNI

Cilium 的控制和数据平面是为大规模和高度动态的云原生环境而从头开始构建的,在这些环境中,数百甚至数千个容器在几秒钟内被创建和销毁。 Cilium 的控制平面经过高度优化,运行在具有 1,000 个节点和 100K pod 的 Kubernetes 集群中。 Cilium 的数据平面使用 eBPF 进行高效的负载平衡和增量更新,避免大型 iptables 规则集的陷阱。

cilium 可扩展性

Cilium 是按比例构建的。无论运行几个节点还是管理数千个节点的集群,Cilium 都可以处理。 Cilium 的 eBPF 支持的网络针对大规模运营进行了优化。这意味着可以扩大运营规模,而不必担心网络成为瓶颈。

网络安全

Cilium 不仅性能出色,还带来强大的安全功能。凭借超越传统基于 IP 地址的 ACL 的基于身份的安全性,Cilium 提供细粒度的策略实施。这使您可以控制谁可以与谁交谈,减少攻击面并帮助保护您的云本机应用程序。

参考文档

https://docs.cilium.io/en/stable/

https://github.com/cilium/cilium

标签:容器,eBPF,IP,基础,应用程序,Cilium,cilium
From: https://www.cnblogs.com/wangguishe/p/17872172.html

相关文章

  • Python编程入门:从零开始掌握基础
    Python编程入门:从零开始掌握基础Python是一门简单易学但功能强大的编程语言。它广泛应用于数据科学、机器学习、web开发、自动化任务等领域。本系列文章将带你从零开始学习Python,逐步掌握这门语言的基础知识。本文是系列的第一篇,涵盖Python的基本语法、变量和数据类型等内......
  • Python基础-容器数据
    一、容器类型介绍容器就是存放数据的python中的容器数据有多种形式,每种形式有自己的存储格式,数据存储特性不一样字符串str就是容器存放一个一个字母格式:单引号'数据',双引号"数据",三个引号"""数据"""列表list格式:[数据1,数据2,数据3.....]元祖tuple......
  • MySQL语句基础
    SQL规范关键字不区分大小写用;结尾SQL注释单行注释--注释-注释多行注释/*注释*/SQL类型数据定义语言(DDL:Datadefinitionlanguage)1.操作(DML:datamanuplatelanguage)1.控制(DCL:datacontrollanguage)1.SQL常用命令helpstatusexitquit\c......
  • javaEE—图书管理系统(基础代码版)
                           前言:本篇博客是集合了javaEE所学的知识构建的一个基础框架,讲述着面向对象的过程是如何做到多对象交互协作完成框架的构建的。利用了数组,接口,类和对象,抽象类,Object类等知识来完成。后续会加入数据库,网页......
  • 零基础如何学习挖漏洞(技巧篇)
    总结了下新手常遇到的问题,pou个大纲,将一点一点答疑**(大牛请绕路,总结了一些漏洞挖掘技巧,**不喜勿喷,适合小白或者还挖不倒漏洞的小伙伴)1.零基础能独立挖漏洞需要学哪些知识点(文末附图)2.从如何找漏洞->怎么挖漏洞->提交!一条龙(挖src)流程3.漏洞去哪挖?怎么才能才不犯法?一、......
  • Linux C编程一站式学习-x86汇编基础
    要彻底搞清楚C语言的原理,必须要深入到指令一层去理解。你写一行C代码,编译器会生成什么样的指令,要做到心中有数。本章介绍汇编程序的一些基础知识。1.最简单的汇编程序#PURPOSE:Simpleprogramthatexitsandreturnsa#statuscodebacktotheLinuxkernel##INPUT:no......
  • pgsq的学习记录②——PostgreSQL基础用法
    PostgreSQL基础用法创建一个数据库操作数据库创建表删除表表插入数据查询表多表联查创建一个数据库创建一个名为postgres的数据库createdbpostgres操作数据库创建表创建表weatherCREATETABLEweather(cityvarchar(80),temp_lo......
  • Linux基础
    Linux基础基础知识系统结构Kernel(内核):Linux内核是操作系统的核心部分,负责管理系统的资源、提供硬件与软件的接口、调度进程等。它是Linux系统最基本的组件,也是与硬件交互的桥梁。Shell(命令解释器):Shell是用户与Linux系统交互的主要方式,用户通过Shell可以输入命令来操作系统、......
  • 服务器硬件基础知识
    服务器作为网络环境中的核心设备,其硬件性能直接影响到整个网络系统的稳定性和运行效率。下面将从多个方面详细介绍服务器硬件的基础知识。一、处理器(CPU)处理器(CPU)是服务器的核心组件,负责执行计算和处理数据。它决定了服务器的运算能力和响应速度。以下是一些关于处理器的重要......
  • 在stable-DreamFusion的基础上部署ProlificDreamer
    ProlificDreamer是清华大学朱军团队发布的一款text-3D模型,是基于stable-DreamFusion代码库构建而成,主要的创新在于NeRF场的损失优化算法上,由SDS算法更新为VSD算法,得到了更好的生成结果,下面是对基于stable-DreamFusion复现完成的基础上对ProlificDreamer的部署。这种部署方式仅适......