一、网络组件的作用

1. 部署网络组件的目的



  • 核心功能:执行kubectl apply -f calico.yaml命令的主要目的是为Kubernetes集群部署网络组件
  • 必要性:
    • 解决Pod间的跨节点通信问题
    • 建立集群范围的网络平面,使所有Pod处于同一网络层
    • 替代Docker默认的bridge网络模式
2. 跨主机网络通信问题



  • 基础架构:
    • 每台Docker主机默认使用独立的bridge网络
    • 容器获得172.17.0.0/16网段的随机IP
  • 通信障碍:
    • 不同主机上的容器可能分配到相同IP(如都获得172.17.0.2)
    • 容器发出的数据包无法识别目标容器所在宿主机
    • 缺乏跨主机的路由转发机制
3. 容器IP分配与通信

1)IP冲突问题

  • 冲突机制:
    • 各Docker主机独立维护IP分配池
    • 默认使用相同网段(172.17.0.0/16)
    • 有概率(约1/65534)分配相同IP
  • 解决方案:
    • 修改Docker的bip参数指定不同子网
    • 例如:节点1配置172.18.0.1/16,节点2配置172.19.0.1/16
2)路由转发问题
  • 通信障碍:
    • 即使IP不同(如172.17.0.2和172.17.0.3)
    • 容器无法感知目标容器所在宿主机
    • 缺乏跨主机路由表配置
  • 传统解决方案:
    • 手动配置路由表和iptables规则
    • 维护复杂度随节点数量指数级增长
    • 需要自行开发自动化管理程序
3)网络组件作用
  • 核心功能:
    • 统一管理集群IP分配,确保全局唯一
    • 自动维护跨节点路由规则
    • 实现Pod-to-Pod的直接通信
  • 实现原理:
    • 通过BGP协议同步路由信息
    • 使用IPIP隧道或VXLAN封装数据包
    • 自动响应节点增减事件
4. 网络组件解决通信问题



  • 核心功能:实现跨主机容器通信和节点与容器间通信,形成扁平化网络
    • 解决容器间通信需求(如前端调用后端API,后端访问数据库容器)
    • 消除IP冲突风险(避免不同主机随机分配相同IP)
    • 建立路由机制(解决数据包跨主机传输路径问题)
  • 典型场景:当Pod分布在不同节点时,传统Docker网络无法直接通信
    • 同节点Pod通过docker0网桥二层通信(类似交换机连接设备)
    • 跨节点通信必须依赖网络组件建立路由规则
5. 主流网络组件与CNI接口



  • 组件选型:
    • Flannel:适合小规模开发集群(几十台规模)
    • Calico:适合大规模生产集群,提供更精细的网络策略
  • CNI规范:
    • 本质:Kubernetes制定的容器网络接口标准(Container Network Interface)
    • 作用:统一第三方网络组件接入规范,避免K8s团队单独适配
    • 特点:组件需符合标准才能被集成(如Flannel/Calico都支持CNI)
  • 部署注意:
    • 网络组件是K8s核心依赖,未就绪会导致节点NotReady状态
    • 通常只需部署一个网络组件(多组件共存需二次开发)
    • Windows节点支持有限,实际生产不建议使用
6. Kubernetes弃用Docker



  • 背景:为解决多容器运行时兼容问题
    • 早期直接集成Docker导致维护成本高
    • 需要支持containerd、CRI-O等其他运行时
  • CRI接口:
    • 容器运行时接口(Container Runtime Interface)
    • 标准化运行时接入方式,dockershim将被逐步淘汰
  • 当前架构:
  • 过渡方案:
    • 推荐直接使用containerd作为运行时
    • 现有Docker环境仍可通过shim层兼容
二、Kubernetes将弃用Docker

1. CRI接口的引入背景

  • 集成问题背景: Kubernetes早期需要解决与多种容器运行时(如Docker)的集成问题,为此社区推出了CRI(Container Runtime Interface)标准接口。
  • 架构演变: 使用Docker作为容器运行时时的架构包含多层调用链:kubelet → CRI(dockershim) → dockerd → containerd → shim → runC → container。
2. dockershim的弃用计划
  • 弃用对象: Kubernetes计划移除kubelet中的dockershim组件,该组件是专门为适配Docker Engine开发的桥梁程序。
  • 历史原因:
    • Docker加入K8s生态早于CRI标准制定
    • K8s团队最初直接为Docker编写了专用适配器(dockershim)
    • Docker未主动适配后来的CRI标准
3. 弃用的技术原因

  • 性能问题:
    • Docker内部调用链复杂:kubelet → dockershim → dockerd → containerd → shim → runC,共4-5层调用
    • 多层封装导致性能下降约30%,故障率提升且难以排查
  • 安全隐患:
    • Docker会在宿主机创建网络规则和存储卷
    • 存在潜在的安全边界突破风险
  • 维护成本:
    • 保持dockershim组件增加了K8s代码维护复杂度
    • CRI标准成熟后,专用适配器显得冗余
4. 影响与替代方案
  • 直接影响:
    • 移除dockershim后,K8s将无法直接使用Docker作为运行时
    • 需要改用已实现CRI接口的运行时(如containerd、CRI-O)
  • 接口标准体系:
    • CRI(容器运行时接口):管理容器生命周期
    • CNI(容器网络接口):管理网络组件接入
    • CSI(容器存储接口):管理存储卷操作
  • 过渡建议:
    • 生产环境应提前测试containerd等替代方案
    • 注意检查自定义脚本中对docker命令的依赖
三、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

Kubernetes网络组件作用

解决跨主机容器通信问题,实现集群内Pod间网络互通

区分Calico/Flannel等不同网络组件的适用场景

⭐⭐⭐⭐

Docker默认网络问题

独立主机分配相同IP段导致容器IP冲突,无法直接跨主机通信

理解Docker默认bridge网络的局限性

⭐⭐⭐

网络组件部署意义

保证IP唯一性 + 自动路由管理 + 扁平化网络

为什么说手动配置路由表不可扩展

⭐⭐⭐⭐

CNI规范

Kubernetes制定的网络插件接口标准,Calico/Flannel都遵循该标准

CNI与CRI(容器运行时接口)的区分

⭐⭐⭐

Calico核心功能

通过BGP协议实现跨节点路由,支持网络策略控制

与Flannel的VXLAN方案对比

⭐⭐⭐⭐

Pod网络基础

同节点Pod通过docker0网桥二层通信,跨节点需网络组件

为什么说Pod是K8s最小调度单位

⭐⭐⭐

CRI弃用Docker

移除dockershim适配层,要求容器运行时必须支持CRI标准

为什么containerd成为新标准运行时

⭐⭐⭐⭐

Windows支持现状

官方支持但生态不完善,生产环境推荐Linux方案

Windows容器与Linux容器的本质差异

⭐⭐⭐

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

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

相关文章

【牛客刷题】dd爱科学1.0

文章目录 一、题目介绍1.1 题目描述1.2 输入描述:1.3 输出描述:1.4 示例1二、解题思路2.1 核心策略2.2 算法流程2.3 正确性证明三、算法实现四、关键步骤解析五、复杂度分析六、正确性验证七、算法对比7.1 暴力搜索法7.2 动态规划7.3 三种解法对比分析一、题目介绍 1.1 题目描…

跑步-Java刷题 蓝桥云课

目录 题目链接 题目 解题思路 代码 题目链接 竞赛中心 - 蓝桥云课 题目 解题思路 用数组记录每个月有多少天,再使用一个int型变量记录是星期几,遍历即可 代码 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public stat…

Qt常用控件之QWidget(二)

Qt常用控件(二)1.window frame2.windowTitle3.windowIcon🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀🚀系列专栏:【Qt的学习】 📝📝本篇…

飞算Java AI:专为 Java 开发者打造的智能开发引擎

目录 一,核心功能 1,智能编码(AI Coding) 2,AI 驱动测试(AI Testing) 3,智能运维(AIOps) 4,工程化支持 二、注册与上手:3 分钟快…

基于开源AI大模型AI智能名片S2B2C商城小程序源码的私域流量新生态构建

摘要:私域流量并非新生概念,企业持续构建和经营“企业 - 客户”关系是其持续存在的关键,且会随时代发展自我完善迭代。本文探讨了开源AI大模型AI智能名片S2B2C商城小程序源码在私域流量领域的应用价值。通过分析私域流量发展现状与挑战&#…

用 ELK+Filebeat 提高50%问题排查效率,这套方案实测有效!

摘要 在中大型系统中,日志的分布常常让问题排查变得异常痛苦:每次出错都要登录一堆服务器、翻一堆文本,还不一定能找到关键线索。为了解决这个问题,ELK(Elasticsearch、Logstash、Kibana)日志聚合平台应运而…

数据治理到底是什么?搞清这四件事,你就彻底明白了!

目录 第一件事:数据治理不是做“数据”,是做“管” 第二件事:治理的核心,是“数、责、权”的三角绑定 一是“数”:你到底有哪些数据? 二是“责”:每张表、每个字段是谁负责? 三…

Spring的事务控制——学习历程

思考:1. 事务是干什么的?2. 事务的特性?3. 事务控制的传播方式(传播行为)4. 事务的隔离级别5. 事务是如何实现的?6. 事务的回滚方式7. 事务失效场景回答:1. 事务和锁,还有版本控制 …

鸿蒙 Secure Boot 全流程解析:从 BootROM 到内核签名验证的实战指南

摘要 随着智能设备应用的深入,操作系统安全成为设备可信运行的基础。在物联网和多终端场景中,一旦系统被恶意篡改,将带来数据泄露、设备被控等严重后果。鸿蒙系统在安全启动方面设计了完整的机制,从最底层的 Boot ROM 开始逐级校验…

tailwindCSS === 使用插件自动类名排序

目录 类如何排序 自定义 实战应用 .prettierrc package .eslintrc 人们一直在讨论在 Tailwind 项目中对实用程序类进行排序的最佳方法。今天,我们很高兴地宣布,随着我们官方 prettier-plugin-tailwindcss 的发布,您终于可以不用为此担…

数据结构 —— 键值对 map

目录 map的若干操作 1、emplace() 2、find(key) 3、count(key) 4、lower_bound 和 upper_bound 5、erase() 6、empty() 7、降序的map 计蒜客T3603 叫号系统 题意: 解题思路: Code: Leetcode1309 解码字母到整数映射 题意: 解题…

C++ 性能优化指南

C 性能优化指南(针对 GCC 编译器,面向高级工程师面试) 代码优化面试常问点: 如何避免不必要的对象拷贝?为什么要用引用或 std::move?虚函数调用有什么性能开销?原理解释: 传递对象时…

拼数(字符串排序)

题目描述设有 n 个正整数 a1​…an​,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。输入格式第一行有一个整数,表示数字个数 n。第二行有 n 个整数,表示给出的 n 个整数 ai​。输出格式一个正整数&#xff…

【MySQL】函数学习-字符串函数

一、MySQL字符串函数基础回顾 在MySQL中,字符串函数用于处理文本数据,常见场景包括数据拼接、格式转换、清洗等。以下是核心函数速览:函数名作用说明基础示例(独立运行)CONCAT(s1,s2)拼接多个字符串SELECT CONCAT(heel…

AI不是“心智的蒸汽机“:重新理解人工智能的本质

当我们谈论人工智能时,最常听到的比喻是"心智的蒸汽机"——一个能够自动化认知任务的强大工具。但这个比喻可能从根本上误导了我们对AI真正潜力的理解。 最近,来自科罗拉多大学丹佛分校和肯尼索州立大学的研究团队发表了一篇论文[1]&#xff0…

免费的AI Logo工具生成的Logo质量怎么样?我对比了7个AI Logo生成器,设计必备

你尝试过用 AI 生成 Logo 吗?在 AI 巨火的今天,什么事情都可以尝试用 AI 去做。在品牌设计上也是如此,用 AI 做品牌设计、用 AI 做电商海报、用 AI 做包装设计等等。不知道你用过哪些 AI 工具,哪些是你觉得好用的。今天我们就来研…

计算机基础:内存模型

专栏导航 上一篇:WIndows 编程辅助技能:格式工厂的使用 回到目录 下一篇:MFC 第一章概述 本节前言 本来呢,没想着在单独的课节中讲解内存模型。但是呢,在我写过的一些个课节中,我发现,内存…

Sigma-Aldrich 细胞培养实验方案 | 通过Hoechst DNA染色检测细胞的支原体污染

目标DNA染色(如间接Hoechst染色技术)一种快速的方法,其可在72小时内获得结果,这相较于通过培养分离检测支原体所需的4周时间相比是更加有利的。用DNA染色剂对细胞系进行直接染色可在24小时内获得结果,但会大大降低灵敏…

需求跟踪深度解析:架构师视角下的全链路追溯体系

需求跟踪(Requirements Traceability)是确保软件系统从业务目标到代码实现全程可追溯的核心实践,尤其在安全关键系统(如航空、医疗)中具有强制性要求。一、需求跟踪的四大核心价值变更影响分析 精确评估需求变更波及范…

《棒球规则介绍》领队和主教练谁说了算·棒球1号位

Baseball 101|GM vs Manager 到底谁是球队话事人? ⚾️权力金字塔:谁说了算?General Manager(总经理/GM)球队建筑师:负责选秀(Draft)、交易球员(Trade&#x…