Cilium 系列-3-Cilium 的基本组件和重要概念
系列文章
前言
安装完了,我们看看 Cilium 有哪些组件和重要概念。
Cilium 组件
如上所述,安装 Cilium 时,会安装几个运行组件(有些是可选组件), 它们各是什么用途?
Cilium Operator
Cilium Operator 可以理解为 Cilium 的管理平面或操作运维平面。Cilium Operator 不处于任何转发或网络策略决策的关键路径上。如果 Operator 暂时不可用,集群一般也能继续运行。
Cilium Agent
Cilium Agent 以 daemonset 的形式运行,因此 Kubernetes 集群的每个节点上都有一个 Cilium agent pod 在运行。该 agent 执行与 Cilium 相关的大部分工作:
- 与 Kubernetes API 服务器交互,同步集群状态
- 与 Linux kernel 交互--加载 eBPF 程序并更新 eBPF map
- 通过文件系统 socket 与 Cilium CNI 插件可执行文件交互,以获得新调度工作负载的通知
- 根据要求的网络策略,按需创建 DNS 和 Envoy Proxy 服务器
- 启用 Hubble 时创建 Hubble gRPC 服务
Cilium Client
Cilium Agent 守护进程中的每个 pod 都带有一个 Cilium Client 可执行文件,可用于检查该节点上安装的 Cilium Agent 和 eBPF map 资源的状态。Client 通过守护进程 pod 与 Cilium Agent 的 REST API 通信。
Warning:
上图图上没有画。
Cilium Client 不是 Cilium CLI.
这与安装在操作机/堡垒机上的 Cilium CLI 工具可执行文件不同。Cilium Client 可执行文件包含在每个 Cilium Agent pod 中,必要时可用作诊断工具,帮助排除 Cilium Agent 运行故障。在正常操作中,你很少会与 Cilium Client 交互,但在某些实验中,当我们使用某些 Cilium 功能时,我们会使用它来帮助我们查看 Cilium 网络状态的内部结构。
Cilium CNI Plugin
Cilium Agent 守护进程还会将 Cilium CNI 插件可执行文件安装到 Kubernetes 主机文件系统中,并重新配置节点的 CNI 以使用该插件。CNI 插件可执行文件与 Cilium Agent 分开,作为 Agent 守护程序初始化的一部分进行安装(即 install-cni-binaries
init container)。需要时,Cilium CNI 插件将使用主机文件系统 socket 与运行中的 Cilium Agent 通信。
Hubble Relay
当 Hubble(哈勃望远镜) 作为 Cilium 管理集群的一部分启用时,每个节点上运行的 Cilium Agent 将重新启动,以启用 Hubble gRPC 服务,提供节点本地可观测性(会损耗一部分性能,但这是值得的)。为了实现集群范围内的可观测性,集群中将添加 hubble relay deploy 以及两个附加服务:Hubble Observer 服务和 the Hubble Peer 服务。
Hubble Relay Deploy 通过充当整个集群的 Hubble Observer 服务和每个 Cilium Agent 提供的 Hubble gRPC 服务之间的中介,提供集群范围内的可观测性。Hubble Peer 服务可让 Hubble Relay 在集群中启用新的 Hubble Cilium 代理时进行检测。作为用户,通常会使用 Hubble CLI 工具或 Hubble UI 与 Hubble Observer 服务交互,以便深入了解 Hubble 提供的群集网络流量。
Cluster Mesh API Server
Cluster Mesh API 服务器是一种可选部署,只有在启用 Cilium Cluster Mesh 功能时才会安装。Cilium Cluster Mesh 允许多个群集共享 Kubernetes 服务。
Cilium Cluster Mesh 会在每个群集中部署一个 etcd 键值存储,以保存有关 Cilium 身份的信息。它还为每个 etcd 存储提供代理服务。在同一集群网中的任何成员中运行的 Cilium 代理都可以使用该服务在整个集群网中读取有关 Cilium 身份状态的全局信息。这样就可以创建和访问跨越群集网格的全局服务。一旦 Cilium Cluster Mesh API 服务可用,在作为 Cluster Mesh 成员的任何 Kubernetes 集群中运行的 Cilium 代理就能安全地从每个集群的 etcd 代理中读取信息,从而了解整个集群的 Cilium 身份状态。这样就有可能创建跨越集群网状结构的全局服务。
Cilium 重要概念
Cilium Endpoints
简单理解就是一个 Pod, 以及 pod 被分配的 ip.
简单理解为基本等价于 Kubernetes 的 endpoints, 但是包含的信息更多。
示例如下:
$ k3s kubectl get ciliumendpoints.cilium.io -A
NAMESPACE NAME ENDPOINT ID IDENTITY ID INGRESS ENFORCEMENT EGRESS ENFORCEMENT VISIBILITY POLICY ENDPOINT STATE IPV4 IPV6
default my-nginx-754c4d44b4-949p2 1238 30982 <status disabled> <status disabled> <status disabled> ready 10.0.0.77
kube-system local-path-provisioner-76d776f6f9-d75kl 2157 12431 <status disabled> <status disabled> <status disabled> ready 10.0.0.133
default my-nginx-754c4d44b4-zs6fl 205 30982 <status disabled> <status disabled> <status disabled> ready 10.0.0.125
kube-system coredns-59b4f5bbd5-9q24h 646 55256 <status disabled> <status disabled> <status disabled> ready 10.0.0.82
kube-system svclb-traefik-29b9c193-67lk8 2511 4457 <status disabled> <status disabled> <status disabled> ready 10.0.0.211
kube-system traefik-57c84cf78d-wqq48 1515 52140 <status disabled> <status disabled> <status disabled> ready 10.0.0.218
kube-system metrics-server-566c578db4-h59fh 4083 892 <status disabled> <status disabled> <status disabled> ready 10.0.0.158
kube-system hubble-ui-68fb44f6f5-69ggm 2960 40657 <status disabled> <status disabled> <status disabled> ready 10.0.0.6
kube-system hubble-relay-5f68b89b76-pzkb5 483 37481 <status disabled> <status disabled> <status disabled> ready 10.0.0.119
这里可以看到,两个 my-nginx pod 的 endpoint id 不同,但是身份是同一个,都是 30982
.
Cilium Identity(身份)
使 Cilium 能够高效工作的一个关键概念是 Cilium 的 身份 概念。所有 Cilium Endpoints 都有一个基于标签的标识。
Cilium 身份由标签决定,在整个集群中是唯一的。端点会被分配与端点安全相关标签相匹配的身份,也就是说,共享同一组安全相关标签的所有端点将共享相同的身份。与每个身份相关的唯一数字标识符会被 eBPF 程序用于网络数据路径中的快速查找,这也是 Hubble 能够提供 Kubernetes 感知网络可观察性的基础。
当网络数据包进入或离开节点时,Cilium 的 eBPF 程序会将源地址和目标 IP 地址映射到相应的数字身份标识符,然后根据引用这些数字身份标识符的策略配置来决定应采取哪些数据路径行动。每个 Cilium Agent 负责通过观察相关 Kubernetes 资源的更新,用与节点上本地运行的端点相关的数字标识符更新与身份相关的 eBPF 映射。
示例如下:
$ k3s kubectl get ciliumidentities.cilium.io -A
NAME NAMESPACE AGE
55256 kube-system 2d23h
892 kube-system 2d23h
12431 kube-system 2d23h
4457 kube-system 2d23h
52140 kube-system 2d23h
30982 default 33h
40657 kube-system 37m
37481 kube-system 37m
总结
本文趁热打铁介绍了 Cilium 的基本组件和重要概念。为我们后续 Cilium 的深入使用做好铺垫。
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
Cilium 系列-3-Cilium 的基本组件和重要概念的更多相关文章
- JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)
前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue ...
- SpringBoot系列之Spring容器添加组件方式
SpringBoot系列之Spring容器添加组件方式 本博客介绍SpringBoot项目中将组件添加到Spring容器中的方法,SpringBoot项目有一个很明显的优点,就是不需要再编写xml配置 ...
- 极客时间_Vue开发实战_05.Vue组件的核心概念(1):属性
05.Vue组件的核心概念(1):属性 代码地址: https://github.com/tangjinzhou/geektime-vue-1/blob/master/%E6%BC%94%E7%A4% ...
- 极客时间_Vue开发实战_06.Vue组件的核心概念(2):事件
06.Vue组件的核心概念(2):事件 通过emit传递给父组件 我们点击了重置失败,上层的div的click=handleDivClick是接收不到.重置失败的点击的行为的 通常情况下,你不用.st ...
- 极客时间_Vue开发实战_07.Vue组件的核心概念(3):插槽
07.Vue组件的核心概念(3):插槽 严格来的说在2.0之后已经不分区这两种插槽的概念了. 因为它底层的实现已经趋向于相同了. 2.6为了兼容2.5的版本,现在依然可以用这两种写法 作用域插槽就是多 ...
- java高并发系列 - 第4天:JMM相关的一些概念
JMM(java内存模型),由于并发程序要比串行程序复杂很多,其中一个重要原因是并发程序中数据访问一致性和安全性将会受到严重挑战.如何保证一个线程可以看到正确的数据呢?这个问题看起来很白痴.对于串行程 ...
- C#组件系列———又一款日志组件:Elmah的学习和分享
前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...
- C#组件系列——又一款日志组件:Elmah的学习和分享
前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...
- Vue系列(三):组件及数据传递、路由、单文件组件、vue-cli脚手架
上一篇:Vue系列(二):发送Ajax.JSONP请求.Vue生命周期及实例属性和方法.自定义指令与过渡 一. 组件component 1. 什么是组件? 组件(Component)是 Vue.js ...
- Spring源码系列(三)--spring-aop的基础组件、架构和使用
简介 前面已经讲完 spring-bean( 详见Spring ),这篇博客开始攻克 Spring 的另一个重要模块--spring-aop. spring-aop 可以实现动态代理(底层是使用 JD ...
随机推荐
- YOLO4论文中文版
文章目录 YOLO4论文中文版 摘要 1.介绍 2.相关工作 2.1.目标检测模型 2.2.Bag of freebies 2.3.Bag of specials 3.方法 3.1.架构选择 3.2. ...
- P1008 [NOIP1998 普及组] 三连击,置顶题解的问题
题目链接: https://www.luogu.com.cn/problem/P1008 置顶题解 暴力,加简化的判断,数学原理,2个集合内所有数相加相乘结果一样,2个集合的内容一样(没错我自己编得, ...
- 一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应处理器
作者:京东物流 覃玉杰 1. 简介 Graceful Response是一个Spring Boot体系下的优雅响应处理器,提供一站式统一返回值封装.异常处理.异常错误码等功能. 使用Graceful ...
- C# 实现窗体启动时隐藏
在某些时候需要实现一个界面的后台程序,程序自动运行,但起初不显示窗体,在满足触发条件时显示,此时需要在运行程序时先自动隐藏窗体. 修改窗体对应的Program.cs: using System; us ...
- 2023-04-15:ffmpeg的filter_audio.c的功能是生成一个正弦波音频,然后通过简单的滤镜链,最后输出数据的MD5校验和。请用go语言改写。
2023-04-15:ffmpeg的filter_audio.c的功能是生成一个正弦波音频,然后通过简单的滤镜链,最后输出数据的MD5校验和.请用go语言改写. 答案2023-04-15: 代码见gi ...
- 2023-03-10:YUV420P像素数据编码为JPEG图片,请用go语言实现。
2023-03-10:YUV420P像素数据编码为JPEG图片,请用go语言实现. 答案2023-03-10: 方法一.使用 github.com/moonfdd/ffmpeg-go 库,基于雷霄骅的 ...
- Node 调试利器,前端、Node 开发必备 - VSCode JS Debug Terminal
经常看到有同学抱怨 Node 调试麻烦或者是搞不清怎么调试各种脚本.Jest.Webpack 等等,而偶尔看到的调试相关的文章又全都是在写 inspect.launch.json 这些方案,其实有一定 ...
- Django4全栈进阶之路21 项目实战(在线报修):创建App应用和Model模型
创建应用App python manage.py startapp RepairApp 创建模型 在models.py文件中定义一个Repair模型来表示报修单,其中包含以下字段: repair_id ...
- SQL Server:User, group, or role 'iemis' already exists in the current database.
--最新的解决方法 --先创建用户帐户,不进行授权,然后通过下面的SQL语句将该用户帐户关联至对应的数据库用户.优点是避免了重新授权的操作. USE tempdbEXEC sp_change_user ...
- 【CF】掉分总结
比赛总结 前情提要 自从前段时间连续掉分,就心态崩了,还是自己太菜,一直想写个总结,看看这几场比赛都干了啥,以后准备怎么办.鸽了这么久的总结,是该写写了. 这是正文 首先大致提一下情感曲线(菜的真实) ...