# cilium-openkylin **Repository Path**: kylincloudnative/cilium-openkylin ## Basic Information - **Project Name**: cilium-openkylin - **Description**: 基于eBPF的容器云网络解决方案 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: cilium-openkylin - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-12-05 - **Last Updated**: 2024-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 介绍 cilium-openkylin项目基于cilium 1.13版本进行二次开发,计划长期基于1.13进行功能 开发和必要特性的回合。[cilium](http://https://github.com/cilium/cilium.git)是 k8生态中的一个网络插件, 实现了基于eBPF的高性能网络互联互通,以及无应用侵入的网络观测、 网络隔离、网络追踪、网络安全等能力。cilium-openkylin实现了对组播的支持,支持 underlay模式下的组播功能。cilium-openkylin支持多IP池和固定IP的功能。 cilium-openkylin同时在性能、安全性、 功能使用方面进行了改进和开发,基于eBPF数据 平面提供网络、观测和安全解决方案。具备跨集群能力,支持本机路由和overlay网络模式。 具有L7协议感知功能,可以使用基于身份的安全模型在L3-L7上执行网络 策略。 #### 新增特性 | 特性类型 | 特性内容 | |------|------| | 组播 | [组播功能](https://gitee.com/kylincloudnative/cilium-openkylin#%E7%BB%84%E6%92%AD%E5%8A%9F%E8%83%BD) | | 多IP池 | [多IP池支持](https://gitee.com/kylincloudnative/cilium-openkylin#%E5%A4%9Aip%E6%B1%A0) | | 固定IP | [固定Pod IP](https://gitee.com/kylincloudnative/cilium-openkylin#%E5%9B%BA%E5%AE%9Aip) | #### 软件架构 ![软件架构.png](docs%2F%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84.png) #### cilium-openkylin镜像编译 1. 下载cilium-openkylin源码 ``` git clone https://gitee.com/openkylin/cilium-openkylin.git cd cilium-openkylin ``` 2. 构建docker镜像并上传到私有harbor 2.1. 构建cilium镜像并上传到harbor ``` ARCH=amd64 DOCKER_DEV_ACCOUNT=harbor.openkylin.top/cilium-openkylin DOCKER_IMAGE_TAG=1.13 make docker-cilium-image ``` 2.2 构建operator-generic镜像并上传到harbor ``` ARCH=amd64 DOCKER_DEV_ACCOUNT=harbor.openkylin.top/cilium-openkylin DOCKER_IMAGE_TAG=1.13 make docker-operator-generic-image ``` #### cilium-openkylin部署 1. 下载项目 ``` git clone https://gitee.com/openkylin/cilium-openkylin.git cd cilium-openkylin/install/kubernetes/cilium ``` 2. 创建部署所用的配置文件,可参考docs/install/values_merge.yaml 3. 部署cilium-openkylin ``` helm install cilium . -f values_merge.yaml -n kube-system ``` #### 组播功能 ##### 组播功能介绍 cilium-openkylin组播功能与Cilium社区目前尚在开发的组播功能相比, cilium-openkylin版本支持动态加入多个组播组,openkylin社区版本同时支持IGMPv1、 IGMPv2、IGMPv3协议。cilium-openkylin支持underlay模式下的组播使用场景,同时 支持在XDP层面的组播数据转发。cilium-openkylin限制组播组最多65536个,每个组播 组下的组播成员限制最多40个,组播版本存储组播成员map的key和value均为ifindex, 组播功能要求内核版本>5.13。详细设计参考:[cilium-openkylin组播设计方案](https://docs.google.com/document/d/14ekQd1MoKK9_NX0ru9rrhIHSfOyk_WkKQF7-aTLt3I0/edit#heading=h.5mwz58y9syps)。 ##### 开启组播 需要在部署cilium-openkylin时开启组播支持。 ``` multicast: enabled: true snat: true ``` #### 多IP池 cilium多ip池功能在1.14版本正式加入,cilium-openkylin引入了上游1.14和1.15中 关于目前支持多ip池的功能,增加了IPv4/IPv6双栈模式下多IP池的指定功能,并提交到 cilium上游社区。添加了支持开启原生路由前提条件下的多ip池功能。支持多IP池与命名 空间的绑定,同时支持Pod/Deployment绑定IP池。支持双栈IP池组合、指定单栈IP池和 默认IP池组合、仅指定单栈IP池等几种组合使用方式。cilium社区关于多ip池的设计和原理 参考:[cilium社区多ip池设计和原理](https://docs.cilium.io/en/latest/network/concepts/ipam/multi-pool/)。 ##### 部署多ip池 在部署时指定IPAM模式为multi-pool即可。 ``` ipam: mode: "multi-pool" operator: autoCreateCiliumPodIPPools: default: ipv4: cidrs: - "10.10.0.0/16" maskSize: 27 tunnel: "disabled" autoDirectNodeRoutes: true ipv4NativeRoutingCIDR: "10.0.0.0/8" endpointRoutes: enabled: true ``` ##### 多ip池创建和使用 ``` $ cat <