当前位置: 首页 > news >正文

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 != "":
  1. 全不配置时,直接代理调取 calico-ipam 二进制
  2. 全配置时,失败
  3. 只配置 ipAddrsNoIpam 时,必须是 calico-ipam 类型,会配置成所指定的 IP
  4. 只配置 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 网络流量分析&#xff08;七&#xff09;Calico 介绍与原理&#xff08;二&#xff09;CNIIPAM指定 IP指定非 IPAM IPCNI 网络流量分析&#xff08;七&#xff09;Calico 介绍与原理&#xff08;二&#xff09; CNI 支持多种 datapath&#xff0c;默认是 linuxDa…...

API安全的最大威胁:三体攻击

最近《三体》火的一塌糊涂,动画片、电视剧和书都受到了大家的喜爱。在API安全上,最近也发现了三体攻击。 当然了,肯定是不来自于三体人的攻击,这里的三体攻击指的是(trinity,也称三位一体攻击),是一个新的攻击手法。具体的情况老李也找到了相关的介绍,下面就分享给大…...

分布式事务解决方案——TCC

TCC是Try、Confirm、Cancel三个词语的缩写&#xff0c;TCC要求每个分支事务实现三个操作&#xff1a;预处理Try、确认Confirm、撤销Cancel。1、Try 阶段是做业务检查(一致性)及资源预留(隔离)&#xff0c;此阶段仅是一个初步操作&#xff0c;它和后续的Confirm一起才能真正构成…...

ITSS认证分为几个级别,哪个级别最高

​一、什么是ITSS ITSS( 信息技术服务标准&#xff0c;简称ITSS)是国内第一套成体系和综合配套的信息技术服务标准库&#xff0c;全面规范了IT服务产品及其组成要素&#xff0c;用于指导实施标准化和可信赖的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的分布式锁实现①

前言 首先&#xff0c;为了确保分布式锁可用&#xff0c;我们至少要确保锁的实现同时满足以下四个条件&#xff1a; 互斥性。在任意时刻&#xff0c;只有一个客户端能持有锁。不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁&#xff0c;也能保证后续其他客户…...

十六、基于FPGA的CRC校验设计实现

1&#xff0c;CRC校验循环冗余校验&#xff08;Cyclic Redundancy Check&#xff0c; CRC&#xff09;是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术&#xff0c;主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的…...

2022爱分析 · DataOps厂商全景报告 | 爱分析报告

报告编委 李喆 爱分析合伙人&首席分析师 廖耘加 爱分析分析师 目录 1. 研究范围定义 2. 市场洞察 3. 厂商全景地图 4. 市场分析与厂商评估 5. 入选厂商列表 1. 研究范围定义 研究范围 在后疫情时代&#xff0c;以数据分析为代表的数据消费场景日益丰富&…...

京东前端react面试题及答案

useEffect 与 useLayoutEffect 的区别 &#xff08;1&#xff09;共同点 运用效果&#xff1a; useEffect 与 useLayoutEffect 两者都是用于处理副作用&#xff0c;这些副作用包括改变 DOM、设置订阅、操作定时器等。在函数组件内部操作副作用是不被允许的&#xff0c;所以需…...

TongWeb8数据源相关问题

问题一&#xff1a;数据源连接不足当TongWeb数据源连接用完时&#xff0c;除了监控中看到连接占用高以外&#xff0c;日志中会有如下提示信息。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人工智能&#xff0c;相信大家都不陌生&#xff0c;也都接触过不少。但是最近小编在网上冲浪的时候发现各大媒体又掀起了一阵AI热潮&#xff0c;AI不是很常见了吗&#xff1f;是又有什么新的发展吗&#xff1f; 带着强烈的好奇心&#xff0c;我在地铁上读完了一篇关于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? 软件产品线的工作原理是什么&#xff1f;25.3 Product Line Scope 产品线范围25.4 …...

Seata-server 源码学习(一)

Seata源码学习引入 学习了Seata的应用以后&#xff0c;我们从这开始要开始分析Seata的源码相关内容 源码下载 官方地址&#xff1a;https://seata.io/zh-cn/blog/download.html 通过idea打开seata-1.4.2版本的源码 回顾AT模式 其实在之前的应用课程中&#xff0c;我们已经用…...

2023新华为OD机试题 - 斗地主(JavaScript)

斗地主 题目 斗地主起源于湖北十堰房县, 据传是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的, 如今已风靡整个中国,并流行于互联网上 牌型: 单顺,又称顺子,最少5张牌,最多12张牌(3...A),不能有2, 也不能有大小王,不计花色 例如:3-4-5-7-8,7-8-9-1…...

素数相关(结合回文数,合数)线性筛素数(欧拉筛法)Euler【算法模板笔记】

一、朴素筛法&#xff08;埃拉托斯特尼筛法&#xff09;Eratosthenes 筛法&#xff08;埃拉托斯特尼筛法&#xff0c;简称埃氏筛法&#xff09;时间复杂度是O(nloglogn)不常用&#xff0c;被欧拉筛代替&#xff0c;略二、线性筛素数&#xff08;欧拉筛法&#xff09;简介线性筛…...

1.7配置OSPF手动汇总

实验7:配置OSPF手动汇总 实验目的实现OSPF路由汇总的配置阐明OSPF引入的外部路由时进行路由汇总的方法实验拓扑配置OSPF手动汇总实验拓扑如图1-17所示。 图1-17 配置OSPF手动汇总 实验步骤配置IP地址,配置OSPF(和实验6一致,此处略)在…...

多线程下载工具axel的安装和使用

多线程下载工具axel的安装和使用 Axel是一个轻量级下载程序&#xff0c;它和其他加速器一样&#xff0c;对同一个文件建立多个连接&#xff0c;每个连接下载单独的文件片段以更快地完成下载。 Axel 支持 HTTP、HTTPS、FTP 和 FTPS 协议。它也可以使用多个镜像站点下载单个文件…...

大数据专业职业前景如何

大数据专业毕业生未来的岗位选择空间比较大&#xff0c;有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位&#xff0c;在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类&#xf…...

拉格朗日乘数法在原材料选择问题上的具体应用

问题需求&#xff1a; 输入待制作的材料&#xff1a;(材料长&#xff0c;材料数量) 分别为(5401&#xff0c;124)、&#xff08;200&#xff0c;135&#xff09;、&#xff08;1350&#xff0c;45&#xff09;&#xff0c; 输入原材料长度最大值6500&#xff0c;最小值3500&…...

零信任-腾讯零信任iOA介绍(4)

​腾讯零信任介绍 腾讯零信任是一种信息安全架构&#xff0c;旨在通过限制对计算设备、数据和应用程序的访问来保护敏感信息。腾讯零信任的主要思想是&#xff0c;任何计算设备、数据或应用程序都不应被自动信任&#xff0c;并需要经过授权后才能访问敏感信息。 腾讯零信任的…...

Coze智能客服部署指南:从零搭建到生产环境最佳实践

最近在折腾智能客服系统的部署&#xff0c;发现市面上虽然方案不少&#xff0c;但真正能兼顾快速落地、稳定运行和成本可控的并不多。Coze 作为一个新兴的选项&#xff0c;以其灵活的架构和不错的性能吸引了我。经过一番从零到生产环境的摸索&#xff0c;我总结了一套部署指南&…...

定位精准度如何保障?住宅代理在本地SERP验证中的优势

本地SERP验证是企业优化地域营销、把控本地搜索展示效果的核心环节。如何在不同城市、不同区域准确获取真实的搜索结果&#xff1f;住宅代理凭借其独特的产品特性&#xff0c;成为解决这一问题的首选。提升结果精准度优质的住宅代理服务商拥有规模庞大、覆盖广泛的IP资源池&…...

cv_resnet101_face-detection_cvpr22papermogface 模型压缩与加速:面向边缘设备的部署探索

cv_resnet101_face-detection_cvpr22papermogface 模型压缩与加速&#xff1a;面向边缘设备的部署探索 1. 引言 想象一下&#xff0c;你手里有一台小巧的Jetson Nano开发板&#xff0c;想让它实时识别人脸&#xff0c;完成门禁或者客流统计。你兴冲冲地找到了一个效果不错的模…...

收藏 | 小白程序员必看:轻松入门RAG技术,让大模型拥有你的专业知识领域

收藏 | 小白程序员必看&#xff1a;轻松入门RAG技术&#xff0c;让大模型拥有你的专业知识领域 本文介绍了RAG&#xff08;检索增强生成&#xff09;技术&#xff0c;一种经济高效地解决大模型缺乏特定领域知识的方案。文章详细阐述了RAG的工作流程&#xff1a;用户请求→查询资…...

Windows/Mac双平台实测:Qt 6.9.0离线安装包+在线安装器对比评测

Qt 6.9.0跨平台安装全攻略&#xff1a;离线包与在线安装器的深度实测 当开发团队需要为Windows和macOS双平台部署Qt 6.9.0开发环境时&#xff0c;选择正确的安装方式往往能节省数小时的配置时间。本文将基于真实企业级部署场景&#xff0c;通过20组对照实验数据&#xff0c;揭示…...

NaViL-9B图文对话教程:上传图片即问即答,新手零基础快速上手

NaViL-9B图文对话教程&#xff1a;上传图片即问即答&#xff0c;新手零基础快速上手 1. 认识NaViL-9B&#xff1a;你的智能图文助手 NaViL-9B是一款强大的多模态大语言模型&#xff0c;它能同时理解文字和图片内容。想象一下&#xff0c;你有一个既能聊天又能"看"图…...

OpenClaw 最新保姆级飞书对接指南教程 搭建属于你的 AI 助手

OpenClaw 是什么&#xff1f; OpenClaw(原名 Clawdbot,后更名为 Moltbot,现正式命名为 OpenClaw)是一个运行在你本地环境的高权限 AI 智能体。它的核心特性包括&#xff1a; 本地部署&#xff1a;运行在你的服务器或电脑上,数据完全自主可控多平台支持&#xff1a;支持飞书、…...

Oracle 11g在Windows上的快速部署:使用Docker容器简化安装与配置

Oracle 11g容器化部署实战&#xff1a;Windows平台高效开发环境搭建指南 对于需要频繁搭建Oracle测试环境的开发者而言&#xff0c;传统安装方式耗时且容易出错。本文将介绍如何利用Docker技术&#xff0c;在Windows系统上快速部署Oracle 11g数据库&#xff0c;实现开发环境的秒…...

python-校园商家消费点评系统vue

目录需求分析技术栈选择前端实现后端实现数据库设计部署与测试扩展功能项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析 明确系统核心功能&#xff1a;商家信息展示、用户点评、评分系统、搜索与筛选、用户注册/登录。…...

保姆级教程:用HBuilderX给UniApp安卓项目制作支持MQTT插件的自定义基座

深度解析&#xff1a;UniApp安卓项目集成MQTT插件的自定义基座实战指南 当你在UniApp项目中尝试使用原生MQTT插件时&#xff0c;是否遇到过这样的困境&#xff1a;代码写好了&#xff0c;插件也购买了&#xff0c;但真机运行时却频频报错&#xff1f;这往往是因为官方基座缺少必…...