Kubernetes从零到精通(11-CNI网络插件)

 Kubernetes网络模型

      Kubernetes的网络模型(Kubernetes Networking Model)旨在提供跨所有节点、Pod和服务的统一网络连接。它的核心理念是通过统一的网络通信规则,保证集群中的所有组件能够顺畅地相互通信。Kubernetes网络模型主要有以下几个关键点:

1.Pod-to-Pod通信

        每个 Pod 都有一个独立的IP地址,即"IP per Pod" 模型。每个Pod中的所有容器共享同一个网络命名空间,因此可以通过localhost通信。

        Pod 之间直接通信:无论Pod在同一Node或不同Node上,它们可以直接通过IP地址互相通信,不需要使用NAT或端口映射。

2.Pod-to-Service通信

        如上节提到,Pod通过Service方式访问其他Pod。

3.Service-to-External通信

        如Ingress/Gateway API+ Service的ClusterIP模式;Service的NodePort模式;Service的LoadBalancer模式等。

4.Node-to-Pod通信

        在 Kubernetes集群中,节点上的应用可以直接与Pod通信,无需额外配置。Kube-proxy负责在节点级别管理这些网络规则,保证节点可以通过虚拟IP或端口访问服务。

5.网络策略(Network Policies)

        Kubernetes通过网络策略(Network Policies)来控制Pod之间的通信权限。网络策略允许用户基于标签、命名空间等指定允许或禁止的网络流量(必须使用支持NetworkPolicy实施的网络插件CNI)。

6.网络插件CNI( Container Network Interface)

        Kubernetes本身并不定义如何实现网络,而是通过CNI插件扩展网络功能。这些插件提供Pod 的网络接口配置和跨节点的网络互联能力。常见的CNI插件包括:

Calico:提供网络策略、网络隔离等高级功能。

Flannel:轻量级的 Overlay 网络方案。

Weave:提供简单的跨节点网络连接。

Pod-to-Pod场景

        在 Kubernetes 中,Pod和Pod之间通信是非常常见的需求,主要是为了实现应用之间的互操作性。虽然可以使用Pod-to-Service来解决大部分通信问题,但Pod之间直接通信也是有其场景和必要性的。

状态紧密关联的Pod

        某些场景下,多个Pod之间存在紧密的状态共享和低延迟的通信需求。例如:

数据库集群:在数据库集群中,主节点和从节点之间需要实时同步数据,直接Pod间通信比通过 Service更加高效。

高性能计算(HPC)和分布式计算:在某些需要低延迟的高性能计算场景下,多个Pod可能会进行频繁的点对点通信,例如分布式计算中的任务调度和数据交换。

有状态应用

        有些应用需要每个Pod直接与另一个特定Pod通信,尤其是在有状态应用中,例如Kafka、Cassandra等分布式系统。这类系统中,各个Pod可能有各自的状态和存储分片,彼此之间的通信不总是通过Service进行。

批处理任务

        在某些批处理任务中,多个Pod之间需要通过IP进行点对点通信以协调任务的执行。这类Pod通常是短期存在的,使用Service可能会增加额外的延迟和复杂度。

Kube-proxy和CNI的区别

        kube-proxy组件(或者已经部署的其他替换组件)是Kubernetes自带的组件,使用linux的iptables、IPVS 等,实现Service的虚拟 IP(ClusterIP)和负载均衡功能。主要管理Service层面的网络规则,而不管理底层的网络路由、网络策略等。

        CNI网络插件,使用linux的路由、虚拟网络技术等,主要实现Pod-to-Pod通信,以及网络安全策略等。以下介绍Flannel和Calico。

Flannel

Flannel简介

        Flannel是一种简单易用的Kubernetes网络插件,专注于为Kubernetes提供容器网络解决方案。它的主要作用是为Kubernetes集群中的Pod提供跨主机的网络连接,允许不同节点上的Pod能够互相通信。Flannel是一种覆盖网络(overlay network)实现,底层依赖于封装(encapsulation)技术来跨越不同节点的网络边界。

Flannel组件

flanneld:Flannel的主要守护进程,负责分配子网并处理数据包的封装与解封装。它运行在每个节点上,并与etcd或Kubernetes API Server交互,维护整个集群的子网分配信息。

etcd/Kubernetes API Server:Flannel通过etcd或Kubernetes API Server来存储和共享每个节点的子网信息。集群中的所有节点通过etcd或Kubernetes API Server了解如何将流量路由到其他节点上的Pod。

Backend(后端):Flannel支持多种网络后端,如VXLAN、host-gw、UDP等,决定了Flannel使用哪种方式封装和路由数据包。

Flannel的网络模式

        Flannel提供了多种模式,用户可以根据集群的实际需求选择不同的网络模式:

VXLAN模式:默认的Flannel网络模式,适合大多数情况下的Kubernetes集群,使用封装技术实现跨主机通信。

Host-GW模式:直接通过主机路由表实现节点间通信,适合物理网络已经具备节点直接通信的场景,性能相对较高。

UDP模式:最早的实现方式,依赖于UDP封装,但由于性能较差,通常不建议使用。

AWS VPC模式:针对AWS环境的优化,允许Flannel与AWS的VPC网络集成。

Calico

Calico简介

        Calico是一种广泛使用的Kubernetes网络插件,主要用于提供容器网络和网络安全策略。Calico的设计目标是提供高性能的、可扩展的网络连接,并且能够在Kubernetes集群中实施细粒度的安全策略(网络策略)。它可以在多个云环境和裸机上工作,既支持容器网络,也支持虚拟机和物理主机的网络。它通过直接路由实现Pod的网络通信,而不依赖像VXLAN或GRE这样复杂的隧道封装(overlay)技术。

Calico组件

Felix:Calico的核心组件,运行在每个节点上,负责配置和管理节点上的网络路由和防火墙规则。Felix会根据Kubernetes中定义的网络策略和Calico的配置来控制网络的流量。它负责维护主机的路由表、接口、IP地址和防火墙规则,以便正确地转发数据包和应用安全策略。

BIRD:Calico的BGP功能依赖于一个轻量级的BGP路由守护进程,通常使用BIRD。BIRD负责在集群节点之间分发路由信息,从而确保每个节点都知道如何将流量发送到其他节点的Pod。

etcd/Kubernetes API Server:Calico通过etcd或Kubernetes API Server来存储和共享网络状态信息。通过这些存储,Calico能够记录各个节点的Pod IP分配和网络策略配置。

Calico的网络模式

Calico可以通过以下两种模式实现跨节点的Pod通信:

BGP模式:Calico默认使用BGP路由协议来分发路由信息,每个节点会通过BGP将本节点的PodIP地址段发布给集群中的其他节点。通过BGP,所有节点之间形成了一个互通的网络,每个节点知道如何将流量路由到其他节点上的Pod。

网络命名空间的相关介绍在这里,最后有Calico BGP模式的底层模拟:Linux技术01-虚拟网络、网络命名空间

IP-in-IP模式:在某些情况下,底层网络无法直接路由Pod的IP地址(例如,两个节点的网络无法直接互通)。此时,Calico可以启用IP-in-IP模式,将Pod的IP包封装在主机的IP包中进行传输。这种模式类似于VXLAN,但仍然比封装隧道轻量。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

专业学习|随机规划概观(性质、针对问题与分类)

一、随机规划概观 随机规划(Stochastic Programming)是一种用于处理决策问题中的不确定性的优化方法。它能够在决策过程中考虑到未来的不确定性,从而帮助找到在不同情境下都能较好表现的解决方案。以下是随机规划能解决的一些主要问题以及它的…

阿里巴巴搜索API返回值:电商市场竞争的新武器含

阿里巴巴搜索API返回值在电商市场竞争中扮演着至关重要的角色,它为企业提供了深入了解市场、分析竞争对手的宝贵资源。以下是对阿里巴巴搜索API返回值及其在电商市场竞争中应用的详细解析,并附上示例代码。 一、阿里巴巴搜索API返回值概述 阿里巴巴搜索…

超大酒店司机收布草-酒店分层管理--酒店布草洗涤

一、大酒店布草分层管理 1. 提高效率 - 对布草进行分层,可以更有针对性地安排收集和分发流程,减少混乱和等待时间,提高整体运营效率。 2. 质量控制 - 不同层级的布草可能有不同的质量标准和使用场景。分层管理有助于确保每个层级的…

2024年第五届“华数杯”全国大学生数学建模竞赛 A题详细思路+详细matlab代码

没有更新完之前,专栏价格为59,更新完毕之后恢复到99. 专栏内包含2024年所有数学建模比赛思路和代码,有些重要比赛着重更新(华数杯、国赛、美赛),小比赛可能会有chatgpt4更新,只需订阅一次。有些文章没有完整代码,请到专栏内查找最新代码和思路。如果比赛结束后没有更新…

Web后端开发技术:RESTful 架构详解

RESTful 是一种基于 REST(表述性状态转移,Representational State Transfer)架构风格的 API 设计方式,通常用于构建分布式系统,特别是在 Web 应用开发中广泛应用。REST 是一种轻量级的架构模式,利用标准的 …

大语言模型超参数调优:开启 AI 潜能的钥匙

前言 在人工智能的广袤领域中,大语言模型(LLM)凭借其强大的实力,不断重塑着我们对机器理解语言的认知。然而,要使这些模型在特定应用场景中发挥最大效能,关键在于巧妙调整其超参数。本文将引领你深入探究 …

【SSM-Day2】第一个SpringBoot项目

运行本篇中的代码:idea专业版或者idea社区版本(2021.1~2022.1.4)->这个版本主要是匹配插件spring boot Helper的免费版(衰) 【SSM-Day2】第一个SpringBoot项目 框架->Spring家族框架快速上手Spring BootSpring Boot的作用通过idea创建S…

Kettle报错:使用mysql向hive中插入数据只能插入两条的错误

错误展示 我们在用kettle,使用mysql向hive中插入数据的时候,创建好了一个转换,里面的操作也全部完成了之后,在执行时爆出一下错误 例如我这里写入的表输入为: 表输出为: 解决办法 看起来是一点问题也没有…

HFSS 常见仿真警告、报错及bug处理

目录 引言提示信息警告信息报错信息导入csv文件报错 内部bugHFSS切换工程文件,视图窗口卡顿 引言 本文主要用于收录HFSS仿真中常见的错误及处理方法。欢迎大家在评论区贴出自己的报错信息,一起讨论分享。 提示信息 提示信息:Port 7 suppor…

C++调用C# DLL之踩坑记录

C是非托管代码,C#则是托管代码,无法直接调用 CLR的介绍见CLR简介 MSDN提到了两种非托管-托管的交互技术:CLR Interop和COM Interop 后者要将C# 类库注册为COM组件,本文只探讨CLR,要通过C CLR写中间层代码 方式一&…

htaccess转换nginx工具

115工具网为您提供htaccess与nginx在线转换,apache伪静态文件转为nginx重写规则,htaccess伪静态规则换nginx,apache RewriteRule转rewrite,apache伪静态文件转nginx重写,apache转nginx重写规则,本工具支持所有的htaccess伪静态、基本的配置规则、重定向等转换为ngin…

Golang开发的OCR-身份证号码识别(不依赖第三方)

身份证号码识别(golang) 使用golang的image库写的身份证号码识别,还有用了一个resize外部库,用来更改图片尺寸大小,将每个数字所在的图片的大小进行统一可以更好的进行数字识别,库名 :“github…

C语言 ——— 编写函数,判断一个整数是否是回文整数

目录 题目要求 代码实现 题目要求 编写一个函数,用来判断一个整数是否是回文整数,如果是回文整数就返回 true ,如果不是就返回 false 举例说明: 输入:121 输出:true 输入:1321 输出&#xf…

怎么把文件生成二维码活码?支持生成多种格式文件的二维码教程

怎么把文件做成二维码分享给其他人预览或下载呢?现在使用二维码来展示或者分享文件的使用场景越来越多,这种方式可以帮助其他人更快的获取文件内容,有利于提升文件传输的效率。二维码可以长期存储文件,获取文件会更加的灵活方便&a…

翻转对00

题目链接 翻转对 题目描述 注意点 给定数组的长度不会超过50000输入数组中的所有数字都在32位整数的表示范围内 解答思路 本题与区间和的个数类似,都是使用归并排序统计满足题意的数量,归并排序后可以有效减少比较的数量归并排序的思路为&#xff1…

心觉:成功学就像一把刀,有什么作用关键在于使用者(一)

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作173/1000天 很多人觉得成功学是鸡汤,是没用的,甚至是骗人的 我先保持中立,不知道对不对 我们先…

【Python报错已解决】AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

程序员的宝藏,七大常用Python库!

在Python的广泛应用中,七大常用库扮演着至关重要的角色。这些库覆盖了数据分析、机器学习、科学计算等多个领域,为开发者提供了强大的工具集。以下是这七大常用Python库的详细介绍及其优缺点: 1. NumPy 详细介绍: NumPy是Python的…

在Ubuntu使用VScode配合GDB完成代码调试

想学一下Ubuntu下的vscode代码调试,在网上找了很多博客,发现根本不管用,而且很多都是在Windows下的,与我的需求(使用CMakeLists.txt)不同,根本不能用,研究了一下。并记录。 1.创建C…

浅谈人工智能之Java调用基于Ollama本地大模型

引言 随着人工智能技术的飞速发展,大型语言模型(Large Language Models, LLMs)已成为自然语言处理领域的研究热点。Ollama是一个强大的工具,它使得在本地部署和管理这些大型语言模型变得更加便捷。本文档旨在指导Java开发者如何在…