CNI 网络流量分析(七)Calico 介绍与原理(二)
文章目录
- CNI 网络流量分析(七)Calico 介绍与原理(二)
- CNI
- IPAM
- 指定 IP
- 指定非 IPAM IP
CNI 网络流量分析(七)Calico 介绍与原理(二)
CNI
- 支持多种 datapath,默认是 linuxDataplane,支持 CRI 调用时 选择 grpc 实现的 dataplane,还支持 ebpf,vpp
- 通过 ipam 获取到 ip 后,DoNetworking
func (d *linuxDataplane) DoNetworking(ctx context.Context,calicoClient calicoclient.Interface,args *skel.CmdArgs,result *cniv1.Result,desiredVethName string,routes []*net.IPNet,endpoint *api.WorkloadEndpoint,annotations map[string]string,
)
- Ns 里创建 veth 设备
- Host 端网卡 calixxx 配置 mac ee:ee:ee:ee:ee:ee
- 如果有 ipv6 地址,关闭 DAD
- Linkup 网卡
- 通过 annotation 查 是否指定 mac,指定则配置指定的 mac
- 配置 ns 里路由 default via 169.254.1.1 dev eth0,169.254.1.1 dev eth0 scope link
- 如果有 ipv6,设置 /proc/sys/net/ipv6/conf/all/disable_ipv6 = 0, /proc/sys/net/ipv6/conf/default/disable_ipv6 = 0,/proc/sys/net/ipv6/conf/lo/disable_ipv6 = 0,创建 ip route6
- 为 ns 里网卡配置 ip
- 开启 ipforwarding
- 开启 /proc/sys/net/ipv4/conf/calixxx/route_localnet = 1,Enable routing to localhost
- /proc/sys/net/ipv4/neigh/calixxx/proxy_delay = 0,arp 延迟,calico 不需要
- /proc/sys/net/ipv4/conf/calixxx/proxy_arp = 1,开启 arp 代理
- /proc/sys/net/ipv4/conf/calixxx/forwarding。
- 在 host 配置到该 ip 的路由指向 calixxx。
- 通过 annotation 检查是否有浮动 ip 配置,创建 ipnat
- 创建 WorkloadEndpoints
- done
Pod 创建完后,pod 内部默认路由指向 169.254.1.1,且 veth host 端配置了 arp_proxy,配置的 mac 是 ee:ee:ee:ee:ee:ee,所以 pod 内部下一跳都是 169.254.1.1
# ip netns exec cni-138c93d8-c975-8b38-3154-1dccf5ed9d83 ip r
default via 169.254.1.1 dev eth0
169.254.1.1 dev eth0 scope link # ip netns exec cni-138c93d8-c975-8b38-3154-1dccf5ed9d83 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc noqueue state UP group default link/ether 32:21:45:c4:c5:d5 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.244.153.204/32 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::3021:45ff:fec4:c5d5/64 scope link valid_lft forever preferred_lft forever# ip netns exec cni-138c93d8-c975-8b38-3154-1dccf5ed9d83 ip neighbor
169.254.1.1 dev eth0 lladdr ee:ee:ee:ee:ee:ee REACHABLE
172.18.22.111 dev eth0 lladdr ee:ee:ee:ee:ee:ee STALE
IPAM
- 默认使用 “calico-ipam” IPAM
- 先获取 namespace 是否通过 annotation 配置 ippool,pod 是否配置 ippool
- 获取 pod annotation 是否有 cni.projectcalico.org/ipAddrsNoIpam,cni.projectcalico.org/ipAddrs
ipAddrsNoIpam := annot["cni.projectcalico.org/ipAddrsNoIpam"]ipAddrs := annot["cni.projectcalico.org/ipAddrs"]// Switch based on which annotations are passed or not passed.switch {case ipAddrs == "" && ipAddrsNoIpam == "":case ipAddrs != "" && ipAddrsNoIpam != "":case ipAddrsNoIpam != "":case ipAddrs != "":
- 全不配置时,直接代理调取 calico-ipam 二进制
- 全配置时,失败
- 只配置 ipAddrsNoIpam 时,必须是 calico-ipam 类型,会配置成所指定的 IP
- 只配置 ipAddrs 时,必须是 calico-ipam 类型,先 calico.IPAM().ReleaseIPs ip,再使用指定的 IP 去代理调用 calico-ipam
- 通过调用 calicoClient.IPAM().AutoAssign(ctx, assignArgs) 获取 ip
- 获取 预留 IP 和 cidr,预留 IP 和 cidr 可以通过 资源 IPReservation 进行配置
- 通过 node 相关的 cidr 去获取一个 ip。
指定 IP
apiVersion: v1
kind: Pod
metadata:name: pod5namespace: defaultannotations:cni.projectcalico.org/ipAddrs: "[\"10.244.153.250\"]"
spec:containers:- name: pod5image: nginxports:- name: nginx-portcontainerPort: 80protocol: TCP
default pod5 1/1 Running 0 115s 10.244.153.250
指定非 IPAM IP
需要先开启 feature
# kubectl edit configmap calico-config -n kube-system
// 添加"feature_control": {"ip_addrs_no_ipam": true,"floating_ips": true}
apiVersion: v1
kind: Pod
metadata:name: pod5namespace: defaultannotations:cni.projectcalico.org/ipAddrsNoIpam: "[\"80.90.100.200\"]"
spec:containers:- name: pod5image: nginxports:- name: nginx-portcontainerPort: 80protocol: TCP
pod5 1/1 Running 0 54s 80.90.100.200 node112
当然只有本节点能通,其他节点需要自己解决路由问题
Floating_ips
apiVersion: v1
kind: Pod
metadata:name: pod5namespace: defaultannotations:cni.projectcalico.org/floatingIPs: "[\"172.18.22.113\"]"
spec:containers:- name: pod5image: nginxports:- name: nginx-portcontainerPort: 80protocol: TCP
- apiVersion: projectcalico.org/v3kind: WorkloadEndpointmetadata:creationTimestamp: "2023-02-14T02:03:01Z"labels:projectcalico.org/namespace: defaultprojectcalico.org/orchestrator: k8sprojectcalico.org/serviceaccount: defaultname: node112-k8s-pod5-eth0namespace: defaultresourceVersion: "4509106"uid: beb345d3-6e9f-4144-918d-4f96fa8aada5spec:containerID: dc36d90f05c1890f78b8bb8ddc72426c2730ce60b58bf926b946d0131f620c78endpoint: eth0interfaceName: cali8e9fad9b07cipNATs:- externalIP: 172.18.22.113internalIP: 10.244.146.203ipNetworks:- 10.244.146.203/32node: node112orchestrator: k8spod: pod5ports:- hostIP: ""hostPort: 0name: nginx-portport: 80protocol: TCPprofiles:- kns.default- ksa.default.defaultserviceAccountName: default
kind: WorkloadEndpointList
metadata:resourceVersion: "4509937"
相关文章:
CNI 网络流量分析(七)Calico 介绍与原理(二)
文章目录CNI 网络流量分析(七)Calico 介绍与原理(二)CNIIPAM指定 IP指定非 IPAM IPCNI 网络流量分析(七)Calico 介绍与原理(二) CNI 支持多种 datapath,默认是 linuxDa…...
API安全的最大威胁:三体攻击
最近《三体》火的一塌糊涂,动画片、电视剧和书都受到了大家的喜爱。在API安全上,最近也发现了三体攻击。 当然了,肯定是不来自于三体人的攻击,这里的三体攻击指的是(trinity,也称三位一体攻击),是一个新的攻击手法。具体的情况老李也找到了相关的介绍,下面就分享给大…...
分布式事务解决方案——TCC
TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。1、Try 阶段是做业务检查(一致性)及资源预留(隔离),此阶段仅是一个初步操作,它和后续的Confirm一起才能真正构成…...
ITSS认证分为几个级别,哪个级别最高
一、什么是ITSS ITSS( 信息技术服务标准,简称ITSS)是国内第一套成体系和综合配套的信息技术服务标准库,全面规范了IT服务产品及其组成要素,用于指导实施标准化和可信赖的IT服务。 ITSS是在工业和信息化部、国家标准化管理委员会的联合指导下…...
ZigBee案例笔记 - USART
文章目录1.串行通信接口简述2.串行通信接口寄存器U0CSR (0x86) -USART 0 控制和状态U0UCR (0xC4)–USART 0 UART 控制U0GCR (0xC5)–USART 0 通用控制U0BUF (0xC1) – USART 0 接收/传送数据缓存U0BAUD (0xC2) – USART 0 波特率控制3.设置串行通信接口比特率控制寄存器4.外设I…...
java | 基于Redis的分布式锁实现①
前言 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户…...
十六、基于FPGA的CRC校验设计实现
1,CRC校验循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的…...
2022爱分析 · DataOps厂商全景报告 | 爱分析报告
报告编委 李喆 爱分析合伙人&首席分析师 廖耘加 爱分析分析师 目录 1. 研究范围定义 2. 市场洞察 3. 厂商全景地图 4. 市场分析与厂商评估 5. 入选厂商列表 1. 研究范围定义 研究范围 在后疫情时代,以数据分析为代表的数据消费场景日益丰富&…...
京东前端react面试题及答案
useEffect 与 useLayoutEffect 的区别 (1)共同点 运用效果: useEffect 与 useLayoutEffect 两者都是用于处理副作用,这些副作用包括改变 DOM、设置订阅、操作定时器等。在函数组件内部操作副作用是不被允许的,所以需…...
TongWeb8数据源相关问题
问题一:数据源连接不足当TongWeb数据源连接用完时,除了监控中看到连接占用高以外,日志中会有如下提示信息。2023-02-14 10:24:43 [WARN] - com.tongweb.web.jdbc.pool.PoolExhaustedException: [TW-0.0.0.0-8088-3] Timeout: Pool empty. Una…...
关于最近大热的AI,你怎么看?
AI人工智能,相信大家都不陌生,也都接触过不少。但是最近小编在网上冲浪的时候发现各大媒体又掀起了一阵AI热潮,AI不是很常见了吗?是又有什么新的发展吗? 带着强烈的好奇心,我在地铁上读完了一篇关于Chatgp…...
25.架构和软件产品线
文章目录25 Architecture and Software Product Lines架构和软件产品线25.1 An Example of Product Line Variability 产品线可变性的一个例子25.2 What Makes a Software Product Line Work? 软件产品线的工作原理是什么?25.3 Product Line Scope 产品线范围25.4 …...
Seata-server 源码学习(一)
Seata源码学习引入 学习了Seata的应用以后,我们从这开始要开始分析Seata的源码相关内容 源码下载 官方地址:https://seata.io/zh-cn/blog/download.html 通过idea打开seata-1.4.2版本的源码 回顾AT模式 其实在之前的应用课程中,我们已经用…...
2023新华为OD机试题 - 斗地主(JavaScript)
斗地主 题目 斗地主起源于湖北十堰房县, 据传是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的, 如今已风靡整个中国,并流行于互联网上 牌型: 单顺,又称顺子,最少5张牌,最多12张牌(3...A),不能有2, 也不能有大小王,不计花色 例如:3-4-5-7-8,7-8-9-1…...
素数相关(结合回文数,合数)线性筛素数(欧拉筛法)Euler【算法模板笔记】
一、朴素筛法(埃拉托斯特尼筛法)Eratosthenes 筛法(埃拉托斯特尼筛法,简称埃氏筛法)时间复杂度是O(nloglogn)不常用,被欧拉筛代替,略二、线性筛素数(欧拉筛法)简介线性筛…...
1.7配置OSPF手动汇总
实验7:配置OSPF手动汇总 实验目的实现OSPF路由汇总的配置阐明OSPF引入的外部路由时进行路由汇总的方法实验拓扑配置OSPF手动汇总实验拓扑如图1-17所示。 图1-17 配置OSPF手动汇总 实验步骤配置IP地址,配置OSPF(和实验6一致,此处略)在…...
多线程下载工具axel的安装和使用
多线程下载工具axel的安装和使用 Axel是一个轻量级下载程序,它和其他加速器一样,对同一个文件建立多个连接,每个连接下载单独的文件片段以更快地完成下载。 Axel 支持 HTTP、HTTPS、FTP 和 FTPS 协议。它也可以使用多个镜像站点下载单个文件…...
大数据专业职业前景如何
大数据专业毕业生未来的岗位选择空间比较大,有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位,在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类…...
拉格朗日乘数法在原材料选择问题上的具体应用
问题需求: 输入待制作的材料:(材料长,材料数量) 分别为(5401,124)、(200,135)、(1350,45), 输入原材料长度最大值6500,最小值3500&…...
零信任-腾讯零信任iOA介绍(4)
腾讯零信任介绍 腾讯零信任是一种信息安全架构,旨在通过限制对计算设备、数据和应用程序的访问来保护敏感信息。腾讯零信任的主要思想是,任何计算设备、数据或应用程序都不应被自动信任,并需要经过授权后才能访问敏感信息。 腾讯零信任的…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
