前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >白月光与朱砂痣-Flannel略糙,Cilium太美

白月光与朱砂痣-Flannel略糙,Cilium太美

作者头像
LanceZhang
发布于 2021-12-06 07:48:54
发布于 2021-12-06 07:48:54
9950
举报
文章被收录于专栏:二哥聊云原生二哥聊云原生

社交网络有一股神奇的力量,它总是能重新定义一些老的词汇。比如“白月光”和“朱砂痣”早已不是张爱玲小说里说的那个意思了,如今在网上它们会被用来表示人的喜新厌旧。借我们的专业术语来讲,这叫“词汇重载”。我想把K8s原生的Flannel比作朱砂痣,而本文及接下来几篇要说到的Cilium看成白月光。这个系列我老早就想跟大家分享了,因为Cilium它太香,太漂亮了。Cilim读音是 ['siliəm],译作纤毛;睫毛。

Cilium速览

图 1:Cilium的生态

Cilium是什么?它是一个K8s CNI插件,但这只是它的起点,它的目标是星辰大海。

上图是Cilium及以它作为数据源所形成的一个集Networking, Observability和Security于一体的生态,这个生态里包含ES,Redis,Service Mesh等等。而Cilium的核心是eBPF。

Networking方面:

  • 首先它是一个K8s CNI插件,所以它可以被无缝集成到K8s中。
  • 它可以代替kube-proxy,包括 ClusterIPNodePortExternalIPsLoadBalancer,同时提供更好的性能、可靠性以及可调试性,当然,这些都要归功于 eBPF。 我们知道kube-proxy是K8s的组件,它会监控API server上面的pod,service 和 endpoint的修改,并对宿主机的iptables做相应的更新,以便实现virtual service IP:Port 到多个Pod IP:Port的转变。这个过程也是一种Load Balance。 我忍不住强调一下,每一个Pod的创建和删除操作都会使得kube-proxy在所有的node上更新iptables。K8s的问题列表里面曾经记录了一个问题#44613:在100个Node的K8s集群里,kube-proxy有时会消耗70%的CPU。 还有一个更恐怖的对比数据:当K8s里有5k个services(每个service平均需要插入8条rule,一共40k iptables rules)的时候,插入一条新的rule需要11分钟;而当services数量scale out 4倍到20k(160k rules)时,需要花费5个小时,而非44分钟,才能成功加入一条新的rule。可以看到时间消耗呈指数增加,而非线性。
  • K8s多个Cluster间的连接。K8s cluster的规模会逐渐变大,但我们总归需要把cluster控制在合理的大小,而不可能让它无限膨胀,所以在某一个时间点会需要切割cluster成若干个规模相对小一点的集群。这种情况下,需要将支持service的所有endpoint(pod)分散编排部署在不同的cluster里,也即K8s需要跨集群编排,Pod需要跨集群服务请求。 这个功能开始慢慢变成刚需,但对我们而言,它又有点遥远,暂时略过。

Observability方面:

  • Identity-aware(身份感知)的网络可视化。如图2所示。传统的基于IP和Port的网络可视化对K8s来说已经不适用,因为Pod的创建和销毁非常频繁,这导致IP和Pod的关系是动态变化的,这一刻192.168.1.24是Pod A在使用,下一秒可能已经被另做它用。 Cilium所提供的网络可视化可以识别service/pod/container的类似name之类的标识,甚至到Pod Label的粒度,这无疑比用传统的IP+Port的方式更有实际意义。
  • 提供网络流量的metric,并可以无缝集成到Prometheus。这些Metric里面还会包含traffic是被哪些Network Policy所允许或禁止的。 可以和普罗米修斯无缝集成则意味着以Prometheus为数据源的Grafana可以直接将Cilium的metric显示在它优美的曲线图上。
  • 可以通过HTTP,gRPC,Kafka等协议和其它服务集成。

图 2:身份感知的网络可视化示意图

Security方面:

  • 支持K8s的Network Policy,例如Label + CIDR匹配方式。 注意:并不是每个CNI插件都实现了Network Policy,比如Flannel就没有。CNI规范也没有要求插件一定要支持Network Policy。
  • 基于DNS-aware的Policy,例如只允许查询 *.google.com的IP,而不允许查询 *.food.com。
  • 基于API-aware的Policy,例如不允许访问HTTP DELETE /concern。
  • 支持Cluster-scope的Network Policy,而K8s的Network Policy是Namespace scope。
  • Node-scope的防火墙
  • 透明加密。这是一个非常有意思的功能。这等于是将加密功能做成了一个对Pod无感的中间件和基础设施。
  • 提供丰富的基于Identity的audit log供安全取证(security forensics)分析。为什么基于Identity的audit log这么重要呢?如上文所说,基于IP和Port的log信息对安全取证分析来说已经没有参考价值。下面是基于Identity的audit log示例,可以看到IP已经被替换成了pod name: Sep 27 06:59:46.576: kube-system/hubble-ui-9b6d87f-vl5nq:60608 -> kube-system/hubble-relay-84999fcb48-cckqs:4245 to-endpoint FORWARDED (TCP Flags: ACK) Sep 27 06:59:46.576: kube-system/hubble-relay-84999fcb48-cckqs:4245 <> kube-system/hubble-ui-9b6d87f-vl5nq:60608 to-overlay FORWARDED (TCP Flags: ACK) Sep 27 06:59:46.585: kube-system/hubble-ui-9b6d87f-vl5nq:60608 <> kube-system/hubble-relay-84999fcb48-cckqs:4245 to-overlay FORWARDED (TCP Flags: ACK)

Cilium架构

每研究一个新的东西或者做一个新的项目时,我总喜欢看它的架构图。架构图的意义如同地图,拿着架构图做项目就像对着地图旅游,进可知细节,退可揽全局。我们来看看Cilium的架构。

它分为三大部分:Cilium本体,和编排系统集成部分,与Kernel集成部分。

图 3:Cilium架构

Cilium本体部分:

Cilium自身是一个庞大的系统,包含daemon(agent),CNI plugin,CLI,Policy repo等等。其中CLI用于Cilium的安装和对Cilium的配置。

其中agent是以DaemonSet方式部署的Pod(container name: cilium-agent),所以在每个node上都会有它的身影。一方面它会接收来自通过K8s和API等方式送过来的配置,另一方面它会尤其关注K8s里关于container的创建、停止、删除等事件并随之执行与eBPF Hook相关的动作。

从架构图中可以看出来,daemon是整个系统的信息、决策和执行中枢。

和编排系统集成部分:

Cilium首先是一个K8s CNI插件。一个平台要做成一个开放性的生态的话,设计上需要留下空间和接口,让平台里面的某一个功能模块可以被以插件形式任意替换。而一个插件,通常会作为一个工作在一线的使者专门与平台对接、打交道,并把平台安排的具体任务转交至它的背后团队处理。Cilium plugin作为一个插件,将K8s的网络相关的任务接下来并转移至后方的daemon进一步处理,我们将会在后文的IPAM中看到这个详细过程。

与Kernel集成部分:

这个部分满眼望去都是eBPF。是的,Cilium是eBPF的维护者。前文提到的Networking,Observability和Security三大方面的各式各样的功能很多都是得益于eBPF。没有了eBPF,在众多CNI插件中,Cilium也只能是普通的路人甲。

Cilium太大,要说的东西太多,但篇幅有限,今天我们只聊到这里。下一篇我们聊IPAM。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 二哥聊云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
最Cool Kubernetes网络方案Cilium入门教程
现代数据中心的应用系统已经逐渐转向基于微服务架构的开发体系,一个微服务架构的应用系统是由多个小的独立的服务组成,它们之间通过轻量通信协议如HTTP、gRPC、Kafka等进行通信。微服务架构下的服务天然具有动态变化的特点,结合容器化部署,时常会引起大规模的容器实例启动或重启。要确保这种向高度动态化的微服务应用之间的安全可达,既是挑战,也是机遇。
nevermosby
2020/05/11
3.8K0
Cilium install
现代数据中心应用程序的开发已经转向微服务,微服务应用程序往往是高度动态的,高度不稳定的容器生命周期让传统的 Linux 网络安全方法(例如 iptables)应付不断更新的负载均衡表和访问控制列表劣势显现出来。
后端云
2022/11/25
9290
Cilium 系列-3-Cilium 的基本组件和重要概念
如上所述,安装 Cilium 时,会安装几个运行组件(有些是可选组件), 它们各是什么用途?
东风微鸣
2023/09/01
6040
Cilium 系列-3-Cilium 的基本组件和重要概念
Cilium系列-5-Cilium替换KubeProxy
将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于:
东风微鸣
2023/09/01
4660
Cilium系列-5-Cilium替换KubeProxy
云原生 | 在 Kubernetes 中使用 Cilium 替代 Calico 网络插件实践指南!
Cilium 是一款开源软件,它基于一种名为eBPF的新的Linux内核技术提供动力,用于透明地保护使用 Docker 和 Kubernetes 等Linux 容器管理平台中部署的应用程序服务之间的网络连接,Cilium 主要使用场景是在 Kubernetes 中,但 Cilium 的优势并不仅限于 Kubernetes 环境。
全栈工程师修炼指南
2024/09/10
1.5K0
云原生 | 在 Kubernetes 中使用 Cilium 替代 Calico 网络插件实践指南!
被 Google 选择的下一代数据面 Cilium 是什么 - 上手实践
在我之前的文章 K8S 生态周报| Google 选择 Cilium 作为 GKE 下一代数据面[1] 一文中,我介绍了 Google 宣布使用 Cilium 作为 GKE 的下一代数据面,及其背后的故事。
Jintao Zhang
2020/09/14
1.1K0
被 Google 选择的下一代数据面 Cilium 是什么 - 上手实践
Cilium 容器网络的落地实践
随着越来越多的企业采用 Kubernetes,围绕多云、安全、可见性和可扩展性等新要求,可编程数据平面的需求用例范围越来越广。此外,服务网格和无服务器等新技术对 Kubernetes 底层提出了更多的定制化要求。这些新需求都有一些共同点:它们需要一个更可编程的数据平面,能够在不牺牲性能的情况下执行 Kubernetes 感知的网络数据操作。
用户5166556
2023/03/18
6870
Cilium 容器网络的落地实践
Cilium 系列-2-Cilium 快速安装
•Cilium 1.13.4•K3s v1.26.6+k3s1•OS•Debian 10, Kernel 4.19.232, arm64•Ubuntu 23.04, Kernel 6.2, x86
东风微鸣
2023/09/01
8890
Cilium 系列-2-Cilium 快速安装
Cilium系列-13-启用XDP加速及Cilium性能调优总结
将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于:
东风微鸣
2023/09/01
6620
Cilium系列-13-启用XDP加速及Cilium性能调优总结
Cilium完全替换kube-proxy
因为iptables的netfilter的低性能,Kubernetes的kube-proxy组件一直被诟病,Cilium和Calico都全面实现 kube-proxy 的功能,包括ClusterIP, NodePort, ExternalIPs 和 LoadBalancer,可以完全取代它的位置,同时提供更好的性能。
后端云
2022/11/25
1.7K0
为什么我们喜欢使用 Cilium
感谢 CNI(容器网络接口),Kubernetes 提供了许多选项来满足你的网络需求。在多年依赖简单的解决方案后,我们面临着由客户需求支持的高级功能的日益增长的需求。Cilium 将我们的 K8s 平台的网络提升到了新的水平。
我是阳明
2023/08/21
4570
为什么我们喜欢使用 Cilium
Cilium系列-1-Cilium特色 功能及适用场景
Cilium 是一个开源的云原生解决方案,用于提供、保护(安全功能)和观察(监控功能)工作负载之间的网络连接,由革命性的内核技术 eBPF 提供动力。Cilium 主要使用场景是在 Kubernetes中,但 Cilium 的优势并不仅限于 Kubernetes 环境。
东风微鸣
2023/09/01
1.7K0
Cilium系列-1-Cilium特色 功能及适用场景
用于 Kubernetes 网络的 Cilium:为什么我们使用它以及为什么我们喜欢它
感谢 CNI(容器网络接口),Kubernetes 提供了大量选项来满足您的网络需求。在多年依赖简单的网络解决方案之后,我们面临着对以客户需求为后盾的高级功能的日益增长的需求。Cilium 将我们 K8s 平台中的网络提升到了一个新的水平。
用户5166556
2023/03/18
1K0
用于 Kubernetes 网络的 Cilium:为什么我们使用它以及为什么我们喜欢它
【云原生技术研究】Cilium网络概述
Cilium[1]是一种开源网络实现方案,与其他网络方案不同的是,Cilium着重强调了其在网络安全上的优势,可以透明的对Kubernetes等容器管理平台上的应用程序服务之间的网络连接进行安全防护。
绿盟科技研究通讯
2020/07/14
6K0
【云原生技术研究】Cilium网络概述
Cilium使用 (Cilium 3)
Cilium要求的内核版本比较高,需要对内核进行升级,否则会运行失败。错误日志如minimal supported kernel version is 4.8.0; kernel version that is running is: 3.10.0"
charlieroro
2020/04/24
2.4K0
Cilium 1.11:服务网格的未来已来
Cilium 1.11测试版(Beta)为你带来了一系列引人注目的功能和增强功能,包括OpenTelemetry支持、感知拓扑的负载均衡、Kubernetes APIServer策略匹配,以及更多功能。本文将为您详细介绍这个令人振奋的版本,以及它为现代应用程序网络安全和性能带来的突破。
猫头虎
2024/04/09
4140
Cilium 1.11:服务网格的未来已来
基于 F5 和 Cilium 的 Kubernetes 集群网络架构设计
Kubernetes 的重要性和火爆程度已无需多言,但各公司风格迥异的 IT 基础环境必然催生出各式各样的 Kubernetes 集群架构方案,这对整个生态的发展未尝不是一件好事。今天我们主要聊聊网络,集群网络系统是 Kubernetes 的核心部分,得益于 Kubernetes 灵活的接口设计,现在已有许多成熟方案和使用案例,比如 Calico,Flannel,Kube-router等。
CNCF
2021/01/12
2.5K0
基于 F5 和 Cilium 的 Kubernetes 集群网络架构设计
Cilium 系列-7-Cilium 的 NodePort 实现从 SNAT 改为 DSR
将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能。但是通过对 Cilium 不同模式的切换/功能的启用,可以进一步提升 Cilium 的网络性能。具体调优项包括不限于:
东风微鸣
2023/09/01
4280
Cilium 系列-7-Cilium 的 NodePort 实现从 SNAT 改为 DSR
K8S 生态周报| Google 选择 Cilium 作为 GKE 下一代数据面
Google 声明[2]将选择 Cilium[3] 作为 GKE 网络的数据面 V2 以便增加其容器安全性和可观测性。
Jintao Zhang
2020/08/28
1.4K0
K8S 生态周报| Google 选择 Cilium 作为 GKE 下一代数据面
Cilium系列-9-主机路由切换为基于 BPF 的模式
将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于:
东风微鸣
2023/09/01
3610
Cilium系列-9-主机路由切换为基于 BPF 的模式
相关推荐
最Cool Kubernetes网络方案Cilium入门教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档