K8s学习笔记(二十二) 网络组件 Flannel与Calico - 详解

news/2025/11/23 22:37:37/文章来源:https://www.cnblogs.com/tlnshuju/p/19261737

K8s学习笔记(二十二) 网络组件 Flannel与Calico - 详解

2025-11-23 22:30  tlnshuju  阅读(0)  评论(0)    收藏  举报

K8s学习笔记(二十二) 网络组件 Flannel与Calico

1 为什么需要 Flannel/Calico?

K8s 集群中,每个 Node 会通过 Docker 默认创建一个「网桥(如docker0)」,Pod 的 IP 是从网桥的子网中分配的(如 Node1 的 Pod IP 是10.244.1.0/24,Node2 的是10.244.2.0/24)。

默认情况下,不同 Node 的网桥是隔离的——Node1 的 Pod 无法访问 Node2 的 Pod,因为 Node 之间没有「路由规则」告知 “10.244.2.0/24网段的 Pod 在 Node2 上”。

Flannel/Calico 的核心作用就是:

  1. 为整个集群分配一个统一的「Pod 网络网段」(如10.244.0.0/16),并给每个 Node 划分一个子网;
  2. 通过某种技术(如 Overlay 封装、BGP 路由),实现跨 Node 的 Pod IP 互通;
  3. (部分组件如 Calico)提供「网络策略(Network Policy)」,控制 Pod 间的访问权限。

2 Flannel:简单易用的 “入门级” CNI

Flannel 是 CoreOS 推出的轻量级 CNI 插件,设计目标是「最小化复杂度」,适合新手入门或对网络功能要求不高的场景(如测试环境、简单业务)。

2.1 Flannel 的核心工作原理

Flannel 通过「Overlay 网络(叠加网络)」或「路由模式」实现跨 Node Pod 互通,核心是在 Node 间构建一个虚拟的 “隧道”,让 Pod 数据包能跨 Node 传输。

目前 Flannel 支持两种主流模式:vxlan(默认)host-gw,二者的区别如下:

模式实现方式优点缺点适用场景
vxlan把 Pod 的 IP 数据包封装在「Node 的 IP 数据包」里(类似 “快递套盒子”),通过 Node 网络传输无需网络设备支持,跨网段友好数据包需封装 / 解封装,性能损耗约 10-20%Node 不在同一网段(如跨机房)
host-gw直接在每个 Node 的「路由表」中添加规则:“访问 Node X 的 Pod 网段,下一跳是 Node X 的 IP”无需封装,性能接近物理网络要求所有 Node 在同一网段(二层互通)Node 在同一局域网(如同一机房)

2.2 Flannel 的核心组件

Flannel 的架构非常简单,只有 2 个核心部分:

  • flanneld:运行在每个 Node 上的守护进程(DaemonSet),负责:
    1. 从 etcd 中获取集群的 Pod 网络配置(如总网段10.244.0.0/16);
    2. 为当前 Node 分配一个子网(如10.244.1.0/24),并将 “Node IP → 子网” 的映射存入 etcd;
    3. 根据模式(vxlan/host-gw)配置 Node 的路由表或虚拟网卡(如 vxlan 模式下创建flannel.1网卡)。
  • etcd:存储 Flannel 的网络配置(如总网段、Node 子网映射),确保所有 Node 的配置一致(K8s 集群若用 etcd 作为 APIServer 后端,可复用 etcd)。

2.3 Flannel 的优缺点

优点缺点
部署极简单(1 条命令搞定)不支持「网络策略」(无法控制 Pod 访问)
架构轻量,资源占用少vxlan 模式性能有损耗
对网络环境要求低(跨网段友好)功能单一(仅解决互通,无高级特性)

3 Calico:高性能 + 强管控的 “生产级” CNI

Calico 是 Tigera 推出的企业级 CNI 插件,设计目标是「高性能」和「强网络管控」,核心基于BGP 协议(边界网关协议) 实现路由同步,支持网络策略,适合生产环境(尤其是对性能和安全有要求的场景)。

3.1 Calico 的核心工作原理

Calico 的核心是「不依赖 Overlay 封装,通过 BGP 协议同步 Node 间的路由规则」,实现 Pod 互通。目前支持两种主流模式:BGP 模式(默认)IPIP 模式

(1)BGP 模式(推荐,无封装)

BGP 是互联网中用于 “路由器之间交换路由信息” 的协议,Calico 将每个 Node 视为一个 “虚拟路由器”,通过 BGP 协议让 Node 之间互相告知 “我负责的 Pod 网段”:

  1. 为集群分配总 Pod 网段(如10.244.0.0/16),每个 Node 分配一个子网(如 Node1:10.244.1.0/24,Node2:10.244.2.0/24);
  2. 每个 Node 上的 Calico 组件(BIRD)会将 “本地 Pod 子网 → 本地 Node IP” 的路由规则,通过 BGP 协议同步给其他所有 Node;
  3. 当 Node1 的 Pod 要访问 Node2 的 Pod 时,Node1 的路由表已知道 “10.244.2.0/24的下一跳是 Node2 的 IP”,直接将数据包发给 Node2,无需任何封装
(2)IPIP 模式(Overlay,跨网段兼容)

若 Node 不在同一网段(如跨机房),BGP 协议无法直接同步路由(需网络设备支持 BGP,很多场景不满足),此时 Calico 会用 IPIP 模式:

将 Pod 的 IP 数据包封装在「Node 的 IP 数据包」里(类似 Flannel 的 vxlan),通过 Node 网络传输,本质是 Overlay 网络,性能略低于 BGP 模式,但跨网段友好。

3.2 Calico 的核心组件

Calico 的架构比 Flannel 复杂,但功能更强大,核心组件以 DaemonSet 或 Deployment 形式运行:

组件运行位置功能
calico-node每个 Node核心守护进程,包含多个子组件(Felix、BIRD、confd)
Felix内嵌于 calico-node配置 Node 的网络(如路由表、iptables 规则),确保 Pod 互通和网络策略生效
BIRD内嵌于 calico-nodeBGP 客户端,负责与其他 Node 的 BIRD 交换路由信息(同步 Pod 网段路由)
confd内嵌于 calico-node监听 etcd 中的 Calico 配置,动态生成 BIRD 的配置文件
calico-kube-controllers集群中 1 个 Pod控制平面组件,负责同步 K8s 资源(如 Node、Namespace)到 Calico,确保网络配置与 K8s 一致
etcd集群(可复用 K8s 的 etcd)存储 Calico 的网络配置(如 Pod 网段、路由规则、网络策略)

3.3 Calico 的核心优势:网络策略(Network Policy)

这是 Flannel 完全没有的功能,也是生产环境选择 Calico 的核心原因 ——通过 Network Policy 定义 “哪些 Pod 可以访问哪些 Pod”,实现 Pod 级别的访问控制。

例如,可定义如下策略:“只允许default命名空间下的web标签 Pod 访问db命名空间下的mysql标签 Pod(3306 端口)”,其他 Pod 无法访问mysql

# 示例:只允许web Pod访问mysql Pod
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web-to-mysql
namespace: db
spec:
podSelector:
matchLabels:
app: mysql  # 目标Pod(mysql)
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: default  # 来源命名空间(default)
podSelector:
matchLabels:
app: web       # 来源Pod(web)
ports:
- protocol: TCP
port: 3306        # 允许的端口

3.4 Calico 的优缺点

优点缺点
性能优秀(BGP 模式无封装)配置比 Flannel 复杂(需理解 BGP 基础)
支持网络策略(生产级安全管控)BGP 模式要求 Node 在同一网段(或网络设备支持 BGP)
功能丰富(如流量监控、加密)资源占用比 Flannel 略高
支持跨网段(IPIP 模式)学习成本较高

4 Flannel vs Calico:核心差异对比

对比维度FlannelCalico
网络模式vxlan(默认,Overlay)、host-gw(路由)BGP(默认,路由)、IPIP(Overlay)
性能中等(vxlan 有封装损耗)优秀(BGP 无封装,接近物理网络)
网络策略不支持支持(核心优势,生产级)
部署复杂度极低(1 条命令)中等(需配置网络模式、策略等)
资源占用低(flanneld 进程轻量)中等(calico-node 包含多个子组件)
适用场景测试环境、简单业务、新手入门生产环境、高性能需求、安全管控需求
高级特性流量监控(Calico Observability)、数据加密(IPsec)、BGP 路由反射器

5 实操:部署 Flannel 和 Calico 到 K8s 集群

前提:已搭建好 K8s 集群(至少 1 个 Master + 1 个 Node),kubectl命令可用。

5.1 部署 Flannel(简单版)

  1. 下载 Flannel 的 CNI 配置文件(官方维护):

    kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.22.0/Documentation/kube-flannel.yml
  2. 验证部署:

  3. 测试 Pod 互通:

5.2 部署 Calico(生产级,BGP 模式)

  1. 下载 Calico 的部署文件(官方推荐,适配 K8s 1.24+):

    kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml
  2. 验证部署:

    • 查看calico-system命名空间下的 Pod(calico-node是 DaemonSet,每个 Node1 个;calico-kube-controllers是 Deployment,1 个):

      kubectl get pods -n calico-system

      输出类似(均为Running表示正常):

      NAME                                       READY   STATUS    RESTARTS   AGE
      calico-kube-controllers-xxxxxxxxx-xxxxx    1/1     Running   0          8m
      calico-node-xxxx                           1/1     Running   0          8m
      calico-node-yyyy                           1/1     Running   0          8m
  3. 测试网络策略(可选):

    • 创建前面提到的「allow-web-to-mysql」策略;
    • 用非web标签的 Pod 尝试访问mysql Pod,会被拒绝;用web标签的 Pod 访问,能通则表示策略生效。

6 总结:如何选择?

  • 如果需要快速搭建测试环境,对网络性能和安全要求不高 → 选Flannel(简单、省心);
  • 如果需要生产环境,对性能(低延迟)安全管控(Pod 访问控制) 有要求 → 选Calico(高性能、支持网络策略);
  • 若 Node 跨网段(如跨机房):Flannel 用 vxlan,Calico 用 IPIP,二者均可兼容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:人脸识别4-Windows下基于MSVC编译SeetaFace6

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CF1483D-Useful Edges

CF1483D-Useful Edges 题目大意 有一个 \(n\) 个结点的无向加权图,以及 \(q\) 个三元组,\((u,v,l)\) ,其中 \(u\) , \(v\) 是顶点,\(l\) 是正整数。 如果存在至少一个三元组和一个具有以下特性的路径(不一定简单…

Paddle-CLS图像分类_环境安装

Paddle-CLS图像分类_环境安装 paddle-cls 图像分类的组件,依赖于`paddle`环境,因此需要先安装`paddle`的环境,而`paddle-cls`对paddle的版本依赖度较高,容易出错,因此建议第一次安装遵循本安装文档,后续再进行其…

2025年11月短视频运营公司最新TOP5推荐:业绩增长与效率筛选标准

随着短视频成为企业数字化营销的核心阵地,市场对专业运营服务商的需求持续攀升。本榜单基于技术创新力、行业适配性、服务效能三大核心维度,结合企业实战案例与客户续约率等关键指标,深度解析2025年云南及西南地区五…

实用指南:【10】MFC入门到精通——MFC 创建向导对话框、属性页类、属性表类、代码

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025-09-10-Wed-T-Kubernetes

1. 介绍说明 1.1 基础设施的变革单机场景单机(操作系统+app)--> 虚拟化(VM+OS+APP) --> 容器化(Container + APP)集群场景 IAAS集群场景 PAASKubernetes优势服务发现和负载均衡 存储编排(添加任何本地或云服…

一文入门 Dify平台的插件开发

一文入门 Dify平台的插件开发 欢迎开始 Dify 插件开发 - https://docs.dify.ai/plugin-dev-zh/0111-getting-started-dify-plugin Dify Plugin 开发速查表 - https://docs.dify.ai/plugin-dev-zh/0131-cheatsheet#环境…

20232326 2025-2026-1 《网络与系统攻防技术》实验六实验报告

1. 实验内容 本实践目标是掌握metasploit的用法。 指导书参考Rapid7官网的指导教程。 https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/ 下载官方靶机Metasploitable2,完成下面实验内容。…

2025年11月小程序开发公司TOP5评测:功能落地与适配筛选标准,西南地区企业选择指南

随着数字化转型加速,小程序已成为企业连接用户、提升运营效率的核心载体。本榜单基于技术实现能力、行业适配深度、服务交付效能三大维度,结合企业服务平台公开数据及客户案例反馈,权威解析2025年西南地区五大小程序…

2025年11月云南数字人供应商最新TOP5推荐:精细建模优质选择

在数字经济加速渗透的当下,数字人技术正从概念走向规模化应用,成为企业降本增效、创新服务模式的核心工具。据艾瑞咨询《2025年中国数字人行业研究报告》显示,2024年中国数字人市场规模突破600亿元,企业级服务需求…

第二讲下梯度下降算法

梯度下降算法 梯度下降有时会使loss不降反而上升原因是: 核心结论是:loss 上升主要源于学习率过高、数据 / 特征问题或模型设置不当,导致优化偏离最优方向。 关键原因学习率过大:步长超过最优解范围,每次更新都跳…

Java云计算技术怎样应对故障

Java云计算技术通过一系列的策略和工具来应对故障,确保系统的稳定性和可用性。以下是一些关键的策略和工具: 故障排查策略CPU问题排查:使用jstack工具分析堆栈情况,定位CPU异常的原因,如死循环或频繁的垃圾回收(…

2025-08-02-Sat-T-RabbitMQ

基础篇1. 初识MQ 1.1 同步调用 同步调用是一种线性执行模式。当你调用一个函数后,程序会暂停在当前位置,直到这个函数执行完毕并返回结果后,才会继续执行下一行代码。这就像你在餐厅点餐后,站在柜台前一直等到厨师…

Nand2Tetris 笔记

布尔函数ALU内存机器语言计算机体系结构

审美积累暗色UI设计超越美学的用户体验

审美积累暗色UI设计超越美学的用户体验研究了上百个暗色设计,才发现顶尖的“黑”从不单调。它可以是深邃的科技感,也可以是温暖的陪伴感。分享5个超赞的暗黑系UI设计范本,一起来积累高级审美! 1. 克制用色,信息层…

具有超高峰值抑制比和低功耗的全光可调谐微波滤波器

该研究提出了一种基于4个级联的光机械微环谐振器(MRR)实现高抑制比、大中心频率和带宽调谐范围的微波光子滤波器(MPF)。当每两个MRR的谐振波长调谐到对齐时,硅器件的透射谱为具有高消光比的陷波双峰分布。光载波被固定…

11.23

1. page:最核心指令,定义页面编码、语言、导入包等示例:解决中文乱码+指定Java语言+导入工具类 jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="…

实用指南:F-INR: Functional Tensor Decomposition for Implicit Neural Representations

实用指南:F-INR: Functional Tensor Decomposition for Implicit Neural Representationspre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

实验3 类和对象_基础编程 - yuyue

TASK1 button.hpp #pragma once#include <iostream> #include <string>class Button { public:Button(const std::string &label_);const std::string& get_label() const;void click();private:s…

11/23/2025 一周总结

11/18/2025 模拟赛 T1 做太久了,方向是对的,但是一直没想清楚。做题的时候一定要想清楚,不然可能浪费很多时间。 T2 方向是对的,但是没想到怎么优化。优化需要观察性质,说明这种观察性质的能力还不够,以后还要继…