【星海出品】Calico研究汇总
Calico项目由Tigera公司发起并主导开发
源码
https://github.com/projectcalico/calico?tab=readme-ov-file#-join-the-calico-community
简介
Tigera是一家专注于云原生安全的公司,于2016年成立,其核心产品包括开源的Calico项目以及商业版的Calico Enterprise。
Calico项目的首次提交出现在2015年(根据GitHub提交历史)
项目早期专注于为容器和Kubernetes提供网络连接与安全策略,后续持续迭代成为云原生领域的核心网络方案。
作为Kubernetes的CNI(容器网络接口)插件,提供Pod间的网络通信和IP地址管理(IPAM)。
与K8S兼容的插件有很多 例如:
Calico、Flannel、Canal、Cilium、kube-router
Calico和Flannel的区别
Calico是纯三层网络(L3):基于 IP 路由实现通信,不依赖覆盖网络(Overlay Network)。
使用边界网关协议(BGP)在节点间交换路由信息,支持直接路由模式(无隧道)或 Overlay 模式(如 IPIP、VXLAN)。
性能接近物理网络,易与现有网络设备集成。不对数据包进行封装,不需要NAT和端口映射,扩展性和性能都很好。
网络安全策略:原生支持 Kubernetes NetworkPolicy,提供细粒度流量控制(如基于标签、端口、协议的规则)。
高级功能:支持 eBPF、服务网格集成、威胁检测等。
Flannel:
覆盖网络(Overlay Network):通过 VXLAN、UDP 等隧道技术构建虚拟网络。
子网分配:为每个节点分配一个子网,容器通过隧道跨节点通信。
模式:支持 host-gw(直接路由,无隧道)、vxlan、udp 等。
基础网络连通:仅提供容器间通信,无原生网络策略支持。
依赖外部工具:需结合 Calico 或其他插件实现安全策略。
calico
calico把每个节点都作为一个虚拟路由器,并把每个节点上的Pod当作是节点路由器后的一个终端设备并为其分配一个IP地址。各节点路由器通过BGP协议生成路由规则,从而实现不通节点上Pod间的通信。
BGP是一个去中心化自治路由协议,它通过维护IP路由表或“前缀”来实现自治系统之间的可达性,通常作为大规模数据中心维护不同自治系统之间路由信息的矢量路由协议。Linux内核原生支持BGP,因此可以把一台Linux主机配置为边界网关。
BGP里包含AS(Autonomous System)自治系统, 独立维护着一个路由表,具有去中心化,防止单点故障的功能。
BGP 使用路径矢量(AS_PATH)记录路由经过的 AS 列表,防止路由环路。
AS 之间通过 BGP 对等体建立连接,自主协商路由信息,无需第三方介入。
Calico工作模式:
• IPIP:Overlay Network方案,源数据包封装在宿主机网络包里进行转发和通信。(默认)
• BGP:基于路由转发,每个节点通过BGP协议同步路由表,写到宿主机。 (值设置Never)
• CrossSubnet:同时支持BGP和IPIP,即根据子网选择转发方式。(折中方案,集群当中是有两个网段,又想使用路由的高性能)
通过调整参数改变工作模式:
- name: CALICO_IPV4POOL_IPIP
value: "Always"
由于默认是IPIP模式,如果需要启用BGP模式,则需要修改相关配置: 即将CALICO_IPV4POOL_IPIP 和 CALICO_IPV4POOL_VXLAN 的值设置为Never
这两个参数设置为never后,跨节点之间的通信,就不会经过overlay的封装。自然而然就是通过路由的方式实现跨节点pod通信了。
- name: CALICO_IPV4POOL_IPIPvalue: "Never"# Enable or Desable VXLAN on the default IP pool.
- name: CALICO_IPV4POOL_VXLANvalue: "Never"
BGP的几种模式:
1.Full-mesh (全互联模式)
启用 BGP 后,Calico 的默认行为是创建完整的内部 BGP (iBGP)连接,其中每个节点相互对等。
这允许 Calico 在任何 L2 网络上运行,无论是公有云还是私有云全网格非常适合 100 个或更少的中小型部署
但在更大的规模下,Full-mesh的效率会降低,官方建议使用路由反射模式。2.Route reflectors (路由器反射模式)
若要构建内部BGP(iBGP)的大型集群,可以使用 BGP 路由反射器来减少每个节点上使用的 BGP 对等互连数。
在此模型中,一些节点充当路由反射器,并配置为在它们之间建立Full-mesh模式。
然后,将其他节点配置为与这些路由反射器的子集(通常为2 个用于冗余)对等互连,与Full-mesh模式相比,
减少了BGP对等连接的总数。3.Top of Rack(物理边缘路由器)
在使用Top of Rack模式时,可考虑与路由器反射模式一起使用。
在本地部署中,可以将 Calico 配置为直接与物理网络基础结构对等互连。
通常,这涉及禁用 Calico 的默认Full-mesh模式,而是将 Calico与L3 Top of Rack 路由器对等。
构建本地 BGP 网络的方法有很多种。
如何配置 BGP 由您决定 - Calico 适用于 iBGP 和 eBGP 配置\
您可以有效地将 Calico 视为网络设计中的任何其他路由器。
参考文献:
https://www.cnblogs.com/amsilence/p/18229363
配置文件
节点主机目录:/etc/calico/calico-node 文件位于每个 Kubernetes 节点主机的文件系统中
Calico 以 DaemonSet 形式部署,虽然其核心组件(如 Felix、BIRD)运行在 Calico 容器中,但配置文件需要在节点主机上可见,以便:
调试和管理:管理员可以直接在节点主机上查看和修改配置文件,而无需进入容器。
持久化存储:节点主机的文件系统提供了更稳定的存储,避免容器重启或重建时配置文件丢失。
Felix:calico的核心组件,运行在每个节点上。主要的功能有接口管理、路由规则、ACL规则和状态报告
以DaemonSet方式部署,主要负责维护宿主机上路由规则以及ACL规则。(从别的节点学习路由表的信息)接口管理:Felix为内核编写一些接口信息,以便让内核能正确的处理主机endpoint的流量。特别是主机之间的ARP请求和处理ip转发。
路由规则:Felix负责主机之间路由信息写到linux内核的FIB(Forwarding Information Base)转发信息库,保证数据包可以在主机之间相互转发。
通过 proxy_arp 设置解决跨节点 ARP 请求问题
Veth Pair:每个 Pod 通过 veth 对连接到宿主机的网络命名空间
/etc/calico/calico-node 文件用于配置 Calico 在节点上的运行参数,例如:
网络模式:选择 BGP 模式或 IPIP 模式。
IP 地址池:定义 Pod 的 IP 地址范围和子网。
路由规则:配置路由分发和同步策略。
其他参数:如日志级别、健康检查间隔等。
查看节点 BGP 邻居状态
calicoctl node status
网络策略
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:name: deny-db-accessnamespace: default
spec:selector: role == 'db'ingress:- action: Denysource:namespaceSelector: name == 'default'egress:- action: Allow
监控指标
felix_resync_state:数据同步状态
bgp_peer_up:BGP 邻居状态
iptables_chain_update_seconds:策略更新时间
常用命令
验证 BGP 会话状态:
calicoctl node status
查看路由表:
ip route show table all
检查网络策略:
calicoctl get networkpolicy -A
优化
eBPF
调整BGP
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:name: default
spec:logSeverityScreen: InfonodeToNodeMeshEnabled: trueasNumber: 64512
相关文章:
【星海出品】Calico研究汇总
Calico项目由Tigera公司发起并主导开发 源码 https://github.com/projectcalico/calico?tabreadme-ov-file#-join-the-calico-community 简介 Tigera是一家专注于云原生安全的公司,于2016年成立,其核心产品包括开源的Calico项目以及商业版的Calico Ent…...
观成科技:摩诃草组织Spyder下载器流量特征分析
一、概述 自2023年以来,摩诃草组织频繁使用Spyder下载器下载远控木马,例如Remcos。观成安全研究团队对近几年的Spyder样本进行了深入研究,发现不同版本的样本在数据加密、流量模式等方面存在差异。基于此,我们对多个版本样本的通…...
中心极限定理(CLT)习题集 · 题目篇
中心极限定理(CLT)习题集 题目篇 共 18 题,覆盖经典 CLT、Lyapunov/Lindeberg 条件、Berry–Esseen 评估、 以及工程/数据科学应用与编程仿真。推荐先独立完成,再看《答案与解析篇》。 之前已经出过相关的知识点文章,…...
ITL和TTL线程间值的传递
InheritableThreadLocal InheritableThreadLocal 继承自 ThreadLocal,增加了父线程到子线程的值传递功能。当一个新线程被创建时,InheritableThreadLocal 会将父线程中 ThreadLocal 变量的值拷贝到子线程(浅拷贝),子线…...
Android学习总结之Room篇
一、Room 框架基础 1. 实体类(Entity) 实体类用于描述数据库表的结构。通过使用 Entity 注解,可以将一个 Java 类映射到数据库中的一张表。例如,以下是一个简单的 User 实体类: import androidx.room.Entity; impor…...
java IO流
一:概述 (1)IO (2)流 二:分类 (1)流向 (2)数据单位 (3)IO流角色 三:API (1)InputStream ÿ…...
STM32 串口USART
目录 常见的通信方式 串行通信和并行通信 全双工,半双工和单工通信 同步通信和异步通信 通信速率 常见的通信协议 串口基础知识 电平特性 串口传输协议 STM32F103的USART资源 端口引脚 数据寄存器单元 发送接收控制单元 实现串口发送 printf…...
数字IC后端项目典型问题之后端实战项目问题记录(2025.04.24)
今天给大家分享下近两天小编帮助学员解决的几个经典后端项目问题。希望能够对大家的学习和工作有所帮助。 Q1:在做a7top顶层物理验证Calibre LVS检查时提示NOT COMPARED,请问是什么原因? 我们在用calibre检查LVS后,其结果基本上就是以下三种…...
关于边缘计算盒子的外部接口保护
边缘计算盒子是一种基于边缘计算和人工智能技术的智能设备,它内置了灵活可配的多样化AI算法库,所以也被称为AI算法盒子或智能边缘分析一体机,可以将数据处理和分析的能力推至离数据源最近的边缘位置,提供高效的数据处理和实时响应…...
OCP考试需要注意什么?
一、OCP考试需要准备的资料 身份证件:携带有效的身份证件(如身份证、护照等),以便在考试当天进行身份验证。确保身份证件在考试当天仍然有效,并且与报名时使用的证件一致。 准考证:打印并携带准考证&…...
git Http改用户下载
用原先别人账号,无权下更新 http方式设置自己账号 例如 git fetch --all 提示没有权限从 http://192.168.1.2/gitlab/项目路径.git下载 git remote set-url origin http://your-username192.168.1.2/gitlab/项目路径.git your-username修改成自己的git账号 需要输入一个Tok…...
postgres 导出导入(基于数据库,模式,表)
在 PostgreSQL 中,导出和导入数据库、模式(schema)或表的数据可以使用多种工具和方法。以下是常用的命令和步骤,分别介绍如何导出和导入整个数据库、特定的模式以及单个表的数据。 一、导出数据 1. 使用 pg_dump 导出整个数据库…...
把dll模块注入到游戏进程的方法_挂起进程注入
一. 概述 挂起进程注入是指在创建进程的时候把运行状态设置为挂起,然后创建一个远程线程,来注入。挂起进程注入作为远线程注入的一个补充,可以在进程创建的时候就注入,从而注入时间较早,不宜被拦截。易知挂起进程注入的局限性也就是如果进程已经启动,那么这种注入方式就…...
TypeScript 开发实战:如何安全替换字符串中的关键字
在 TypeScript 开发中,我们经常需要处理字符串替换的场景。最近我在开发一个表达式解析功能时,遇到了一个有趣的挑战:如何将用户输入的简化数学表达式(如"sin")替换为标准形式(如"Math.sin&…...
ES6 模块化 与 CommonJS 的核心概念解析
以下是关于 ES6 模块化 与 CommonJS 的核心概念解析、知识点总结及使用场景说明: 1. ES6 模块化与 CommonJS 是什么? ES6 模块化(ECMAScript Modules, ESM) 定义:ES6 标准引入的模块系统,使用 import 和 …...
【踩坑记录】stm32 jlink程序烧录不进去
最近通过Jlink给STM32烧写程序时一直报错,但是换一个其他工程就可以烧录,对比了一下jink配置,发现是速率选太高了“SW Device”,将烧录速率调整到10MHz以下就可以了...
CS144 Lab 6 实战记录:构建 IP 路由器
1 实验背景与目标 在 CS144 的 Lab 6 中,我们需要在之前实现的 NetworkInterface(Lab 5)基础上构建一个完整的 IP 路由器。路由器的主要任务是根据路由表将接收到的 IP 数据报转发到正确的网络接口,并发送给正确的下一跳…...
AI与智能能源管理:如何通过AI优化能源分配和消耗?
引言:能源管理面临的新挑战 在“双碳”目标持续推进的背景下,能源管理已经不再是简单的节电节水问题,而是关乎可持续发展和企业长期竞争力的核心议题。无论是工业园区、写字楼,还是家庭用户,能源的使用正在变得越来越复…...
【蓝桥杯】产值调整
产值调整 题目描述 偏远的小镇上,三兄弟共同经营着一家小型矿业公司“兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用非负整数 A A A、 B B B 和 C C C 表示。这些矿山的产出是小镇经济的核心,支撑着…...
使用Next.js构建单页面React应用
最近遇到一个问题 突然要一个单页面的项目 用惯了Next.js 而 create-react-app 又不推荐且不灵活 最终找发现Nextjs也支持单页面应用 以下是使用Next.js构建单页面React应用过程 1 正常创建项目 (我选择的是Pages Router 而非 AppRoute) 2 修改配置文件 next.config.ts impor…...
Python字符串三剑客:len()、split()、join()深度解析
目录 一、len():字符串的"测谎仪" 二、split():字符串的"解剖刀" 参数解析: 实战场景: 三、join():字符串的"缝合怪" 性能优势: 实战案例: 高级技巧&…...
大模型是如何生成内容的?
大模型(如 GPT、Claude、LLaMA 等)生成内容的过程,其实就是一个 逐词预测上下文推理 的过程。我们可以把它想象成一个“超级自完成引擎”:每一步都在问自己—— “在目前上下文下,最合理的下一个词是什么?”…...
Python元组全面解析:从基础到高级应用指南
一、元组基础概念与核心特性 1.1 元组的本质定义 元组(Tuple)是Python中重要的不可变序列类型,由多个元素组成的有序集合。其核心特性表现在: 元素按插入顺序存储,支持索引访问所有元素存储在连续内存空间ÿ…...
Docker部署DeepSeek常见问题及解决方案
在使用Docker部署DeepSeek的过程中,许多开发者可能会遇到一些常见问题。本文整理了几个高频问题及其解决方案,帮助大家更顺利地完成部署。 镜像拉取失败 问题现象 执行 docker pull 命令时,提示超时或镜像不存在。 可能原因 1. 网络环境不稳定,导致连接Docker Hub失败…...
身份证实名认证接口数字时代的信任基石-node.js实名认证集成
在互联网深度渗透生活的当下,从线上购物、社交娱乐到金融理财、政务办理,每一次指尖的触碰都在虚拟世界中留下痕迹。身份证实名认证作为连接现实身份与网络身份的桥梁,正以其不可替代的作用,重塑着数字时代的信任体系。它不仅是保…...
多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究)
多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究) 目录 多维时序 | LightGBM多变量时序预测(Matlab完整源码和数据,适合基础小白研究)效果一览基本介绍程序设计参考资料 效果一览…...
强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)
强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)是人工智能领域两个重要的研究方向,虽然二者可以结合(如深度强化学习),但其核心思想、目标和应用场景存在本质区…...
图论---Prim堆优化(稀疏图)
题目通常会提示数据范围: 若 V ≤ 500,两种方法均可(朴素Prim更稳)。 若 V ≤ 1e5,必须用优先队列Prim vector 存图。 #include <iostream> #include <vector> #include <queue> #include <…...
【优秀三方库研读】【C++基础知识】odygrd/quill -- 折叠表达式
compute_encoded_size_and_cache_string_lengths 方法中这段代码是一个C的折叠表达式(fold expression)的应用,用于计算多个参数编码后的总大小。下面我将详细解释这段代码的每个部分,并说明为什么这样写。 代码如下: …...
优化Nginx的下载功能
缘起: 我购置了一台阿里云ECS,其EIP带宽3m/s,但是在其上的作为下载文件的服务器nginx提供的下载速度仅有几百KB。 分析: 既然没有达到带宽瓶颈,肯定存在优化的空间。浮现脑海的想法,nginx没有进行最佳配置…...
Vue3集成浏览器API实时语音识别
效果示例 用法 <!-- 浏览器语音识别 --> <BrowserSpeechRecognitionModal v-if"showModal" :isOpen"showModal" close"showModal false" confirm"handleRecognitionResult" />const showModal ref(false); const input…...
Python3 基础:函数定义与调用
Python3 基础:函数定义与调用 什么是函数?一、函数的定义二、函数的调用三、函数参数3.1位置参数3.2关键字参数3.3默认参数值3.4可变数量的参数args:接收任意数量的位置参数**kwargs:接收任意数量的关键字参数 3.5 综合使用各种参…...
Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比,从核心机制、使用方式、代码示例及优缺点展开
以下是 Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比,从核心机制、使用方式、代码示例及优缺点展开: 1. Vue 2 的响应式 API 核心机制 基于 Object.defineProperty: 通过劫持对象的 getter 和 setter 实现数据变化追踪。限制&…...
修改了Element UI中组件的样式,打包后样式丢失
修改了Element UI中组件的样式,在本地运行没有问题,但是打包到线上发现样式丢失(样式全部不生效、或者有一部分生效,一部分不生效),问题在于css的加载顺序导致代码编译后样式被覆盖了, 解决办法…...
大模型工业化元年:GPT-5开启通用AI新纪元,中国技术如何破局?
过去一周,AI领域的焦点无疑是OpenAI发布的GPT-5预览版,以及全球大模型技术从实验室迈向工业化的关键转折。这场变革不仅标志着通用人工智能(AGI)的进一步逼近,更掀起了全球产业链的竞争与反思。本文将从技术突破、产业…...
离线电脑安装python包
离线电脑安装python第三方库 在联网电脑上下载Python包 使用pip安装所需的包,例如 pip install requests numpy导出已安装的包列表 pip freeze > requirements.txt根据requirements.txt下载包及其所有依赖项到指定目录: pip download -r require…...
【Unity AR开发插件】一、高效热更新:Unity AR 插件结合 HybridCLR 与 ARFoundation 的开源仓库分享
摘要 本篇博客详细介绍了我基于 HybridCLR 与 AR Foundation 的 Unity AR 开发插件,旨在为开发者提供高效的跨平台热更新方案。文章从背景与动机出发,覆盖一键安装工具、环境配置、热更新数据制作与示例程序运行等核心模块,并展示代码结构与使…...
深入浅出学会函数(下)
5. return语句 在函数的设计中,函数中经常会出现return语句,这里讲一下return语句使用的注意事项。 return 后面可以是一个数值,也可以是一个表达式,如果是表达式先执行表达式,再返回表达式的结果。return 后面也可以…...
架构-软件工程
一、软件过程模型(核心高频考点) 1. 瀑布模型 知识点:严格分阶段(需求→设计→编码→测试→维护),前一阶段输出是后一阶段输入,阶段间因果紧密,适合需求明确且稳定的项目。缺点&am…...
Redis 及其在系统设计中的作用
什么是Redis Redis 是一个开源的内存数据结构存储系统,可用作数据库、缓存和消息代理。它因其快速的性能、灵活性和易用性而得到广泛应用。 Redis 数据存储类型 Redis 允许开发人员以各种数据结构(例如字符串、位图、位域、哈希、列表、集合、有序集合…...
运维打铁:Centos 7 使用yum安装 mysql5.7
文章目录 一、安装前信息说明二、安装步骤1. 下载并安装官网 RPM 安装包2. 修改配置文件 /etc/my.cnf3. 创建 MySQL 数据相关目录并授权4. 启动 MySQL 服务 三、修改数据库访问密码1. 修改配置文件 /etc/my.cnf2. 重启 MySQL 服务3. 登录数据库并修改密码4. 恢复配置文件并重启…...
第二章:MCP服务器分类
Chapter 2: MCP服务器分类 🌟 从上一章到本章 在第一章:Model Context Protocol (MCP)中,我们学习了如何通过MCP让LLM安全访问文件系统。现在,让我们想象一个更复杂的需求:假设你需要让LLM同时处理文件、查询数据库、…...
遨游三防|30200mAh、双露营灯三防平板,见证堆料天花板
在工业4.0与智能化转型的浪潮中,专业设备对性能、防护及场景适应性的要求日益严苛。遨游通讯作为国家级高新技术企业,依托“危、急、特”场景的深耕经验,推出的旗舰级产品AORO-P300三防平板,以30200mAh超大容量电池、双露营灯设计…...
OFDM 信道表示(3)
上节我们令得到频域相关系数与PDP是一对傅里叶变换对。这次我们令即只考虑同一个RE上随时间变化得过程。 为接收信号自相关函数,令即为上式 所以可得Doppler 功率谱和子相关函数一对傅里叶变换对。 上面给出多径DPL信道接受信号表示,其中为t时间多径时延…...
MongoDB副本集搭建与核心机制
一、节点架构解析 1.1 节点角色分工 主节点(Primary) 唯一写入口:处理所有写操作(插入/更新/删除) Oplog生成器:记录操作日志到local.oplog.rs集合 同步中枢:向所有从节点推送oplog变更 典型…...
深度学习-数值稳定性和模型初始化
到目前为止,我们实现的每个模型都是根据某个预先制定的分布来初始化模型的参数,有人会认为初始化方案时理所当然的,忽略了如何做出这些选择的细节,甚至有人可能会觉得,初始化方案的选择并不是特别重要,实际…...
详解Linux中的定时任务管理工具crond
在 Linux 容器环境中,/etc/cron.d/ 目录可能不存在,特别是在精简的容器镜像(如 Alpine、BusyBox 或某些定制化的镜像)中。这是因为容器通常追求轻量级,默认不包含完整的 cron 系统(如 cronie 或 vixie-cron…...
【element plus】解决报错error:ResizeObserver loop limit exceeded的问题
当我们在使用element plus框架时,有时会遇到屏幕突然变暗,然后来一句莫名其妙的报错ResizeObserver loop limit exceeded,其实这是因为改变屏幕大小时el-table导致的报错 网上给出了几种解决方案,我试了其中两种可以实现 方案一&…...
GD32E23x flash作为静态存储的读写操作
目录 一、前言 二、GD32E23x flash扇区地址划分 三、GD32E23x 固件库下载 四、GD32E23x falsh擦写操作函数封装 五,引用示例 一、前言 在只有芯片没有外部存储时需要存储一些配置信息,使用flash进行存储是很好的选择了,在GD32E23x中以flash…...
空闲列表:回收和再利用
空闲列表:回收和再利用 手动与自动内存管理 手动管理:程序员需要明确地分配和释放内存。自动管理:例如使用垃圾收集器(GC),它能够自动检测并回收未使用的对象,不需要程序员干预。 对于某些数据结构如B树,…...