1、Cilium:基于eBPF的Kubernetes CNI第三届 eBPF开发者大会中国 西安By 张子健-2020年获得武汉大学计算机科学学士学位-2022年获得哥伦比亚大学计算机科学硕士学位,主要研究方向是Linux内核-现就职于字节跳动,主要工作内容是Linux内核网络相关以及eBPF-Linux Netdev/eBPF模块以及Cilium开源贡献者第三届eBPF开发者大会0.个人介绍1.K8S 网络模型回顾2.CNI简介3.Cilium概述4.Cilium对K8S网络模型的实现5.Cilium对K8S负载均衡的实现6.Cilium对网络策略的实现7.总结第三届eBPF开发者大会目录Kub
2、ernetes(简称 K8s)是一个由 Google 开发、现由 CNCF 维护的开源容器编排平台,用于自动化容器化应用的部署、扩展和管理,帮助实现高效、可扩展、稳定的应用运行环境。第三届eBPF开发者大会1.K8S第三届eBPF开发者大会1.K8S 集群K8S 定义了一种简单、一致的网络模型,基于扁平网络结构的设计1.每个 Node 和 Pod 都有自己的 IP 地址,这个 IP 在集群范围内可达2.任意Node和Node,Pod和Pod,Node和Pod之间有连通性,而无需任何NAT3.Kubernetes 的组件之间可以相互通信,也可以与 Pod 通信第三届eBPF开发者大会1.K8S
3、网络模型第三届eBPF开发者大会1.K8S 网络模型CNI 是 Container Network Interface 的缩写,是一个用于配置Linux 容器网络的标准接口规范。它是 CNCF(Cloud Native Computing Foundation)下的一个项目。K8S本身不实现网络模型而是由CNI实现。当一个容器启动时,CNI 负责给这个容器分配网络、设置 IP、连接到网络桥、配置路由等事情,确保容器之间以及容器与外部世界之间能通信。第三届eBPF开发者大会2.CNI1.CNI 规范:定义了插件之间如何交互的规则。1.CNI 配置文件:定义插件的使用方式和参数1.CNI 插件:按
4、照规范实现的网络插件,不同的插件有不同的特性,比如:Calico、Flannel、Cilium第三届eBPF开发者大会2.CNI组件组成Flannel 是一个较为轻量级的 CNI 插件,专注于为 Kubernetes 提供基础的容器网络功能。它使用 overlay 网络来实现 Pod 之间的跨主机通信,用UDP包来封装原始数据包。Flannel 的架构简单,部署容易,适合对网络功能需求不高的小型或开发环境。但由于其主要定位是网络互通,缺乏复杂的网络策略控制、安全特性以及高级网络功能。第三届eBPF开发者大会2.CNI插件举例-FlannelCilium 是一个基于 eBPF 的 CNI 插件。
5、它不仅提供基础的容器网络功能,还支持 L7(应用层)可观测性与策略控制(比如对 HTTP、gRPC 等协议的可视化和控制),并与 Service Mesh、API 安全、透明加密等功能高度集成。得益于 eBPF,Cilium 在性能、扩展性和可调试性方面具有显著优势。第三届eBPF开发者大会3.Cilium概述第三届eBPF开发者大会3.Cilium概述第三届eBPF开发者大会3.Cilium概述第三届eBPF开发者大会3.Cilium概述第三届eBPF开发者大会3.Cilium概述第三届eBPF开发者大会3.Cilium概述第三届eBPF开发者大会3.Cilium概述-配置第三届eBPF开发
6、者大会3.Cilium概述-实验环境第三届eBPF开发者大会4.Cilium对K8S网络模型的实现-Pod的创建I.K8S给Cilium Agent发送一个“Endpoint Create”的请求第三届eBPF开发者大会II.Cilium Agent为Pod创建veth对,并且通过IPAM模块分配IP4.Cilium对K8S网络模型的实现-Pod的创建第三届eBPF开发者大会III.Cilium Agent为Pod的外层veth设备附加TC eBPF程序,4.Cilium对K8S网络模型的实现-Pod的创建第三届e