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.rhkb.cn/news/429273.html

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

相关文章

Java异常架构与异常关键字

1. Java异常简介 Java 异常是 Java 提供的一种识别及响应错误的一致性机制。 Java 异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程 序健壮性。在有效使用异常的情况下,异常能清晰的回答 what, where,…

RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)

♥️作者:小宋1021 🤵‍♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油&#xff01…

ftp服务的管理及安全优化

1.ftp介绍 ftp : file transfer proto 互联中最老牌的文件传输协议 2.vsftpd安装及启用 环境 #server 主机 : # R3 # 192.168.10.130 # selinux 关闭 # 火墙开启 # dnf 安装设定完成 # #client 主机 : # R4 # 192.168.10.131 # selinux 关闭 …

【Elasticsearch系列四】ELK Stack

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

食品安全标签检测系统源码分享

食品安全标签检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

UML图之构件图例题

答案:C 知识点:构件图描述一个封装的类和它的接口,端口,以及由内嵌的构件和连接件构成的内部结构。 构件图是类图的变体 构件图又叫组件图

24年蓝桥杯及攻防世界赛题-MISC-1

2 What-is-this AZADI TOWER 3 Avatar 题目 一个恐怖份子上传了这张照片到社交网络。里面藏了什么信息?隐藏内容即flag 解题 ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc/outguess] └─$ outguess -r 035bfaa85410429495786d8ea6ecd296.jpg flag1.txt Reading 035bf…

掌握 Spring:从新手到高手的常见问题汇总

一提起Spring,总感觉有太多知识,无法详尽,有些基础理解就先不说了,相信大家都已经用过Spring了 下面简单针对常见Spring面试题做些回答 核心特性 IOC容器spring事件资源管理国际化校验数据绑定类型转换spirng表达式面向切面编程……

二叉树(二)深度遍历和广度遍历

一、层序遍历 广度优先搜索:使用队列,先进先出 模板: 1、定义返回的result和用于辅助的队列 2、队列初始化: root非空时进队 3、遍历整个队列:大循环while(!que.empty()) 记录每层的size以及装每层结果的变量&a…

边缘智能-大模型架构初探

R2Cloud接口 机器人注册 请求和应答 注册是一个简单的 HTTP 接口,根据机器人/用户信息注册,创建一个新机器人。 请求 URL URLhttp://ip/robot/regTypePOSTHTTP Version1.1Content-Typeapplication/json 请求参数 Param含义Rule是否必须缺省roboti…

2、StarGAN V2

2、StarGAN V2 StarGAN 论文链接:StarGAN StarGAN V2 论文链接:StarGAN V2 在介绍StarGAN V2之前,我们先对StarGAN有一定的了解,StarGAN V2只是在StarGAN的基础上做出了改进,基本的架构是没有变的,只是将…

(11)(2.1.2) DShot ESCs(二)

文章目录 前言 3 配置伺服功能 4 检查RC横幅 5 参数说明 前言 DShot 是一种数字 ESC 协议,它允许快速、高分辨率的数字通信,可以改善飞行器控制,这在多旋翼和 quadplane 应用中特别有用。 3 配置伺服功能 如上所述,如果使用…

《粮油与饲料科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《粮油与饲料科技》是不是核心期刊? 答:不是,是知网收录的第一批认定 学术期刊。 问:《粮油与饲料科技》级别? 答:省级。主管单位:中文天地出版传媒集团股份有限公司…

Apache ZooKeeper 及 Curator 使用总结

1. 下载 官网地址:Apache ZooKeeper 点击下载按钮 选择对应的版本进行下载 2. 使用 1、解压 tar -zxf apache-zookeeper-3.9.2-bin.tar.gz2、复制配置文件,有一个示例配置文件 conf/zoo_sample.cfg,此文件不能生效,需要名称为…

C#和数据库高级:继承与多态

文章目录 一、继承的基本使用继承的概念:继承的特点:为什么使用继承? 二、继承的关键字1、this关键字2、base关键字3、Protected关键字4、子类调用父类的构造函数的总结: 三、继承的特性继承的传递性:继承的单根性&…

【服务器入门】Linux系统基础知识

【服务器入门】Linux系统基础知识 远程登录与文件传输基础命令与文本编辑vi/vim使用shell脚本基本命令1、目录操作2、文件创建与删改3、文件连接与查看 参考 目前超算使用的系统以Linux系统为主,肯定需要了解一些相关知识。本博客就以本人运行WRF模型所需&#xff0…

Remix在SPA模式下,出现ErrorBoundary错误页加载Ant Design组件报错,不能加载样式的问题

Remix是一个既能做服务端渲染,又能做单页应用的框架,如果想做单页应用,又想学服务端渲染,使用Remix可以降低学习成本。最近,在学习Remix的过程中,遇到了在SPA模式下与Ant Design整合的问题。 我用Remix官网…

Godot游戏如何提升触感体验

在游戏世界中,触感体验至关重要,既能极大提升玩家沉浸感,让其深度融入游戏,在操作角色或与环境互动时,通过触感反馈获得身临其境的真实感(比如动作游戏中角色攻击或受击时的振动反馈,能使玩家更…

花朵识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练

一、介绍 花朵识别系统。本系统采用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,并基于前期收集到的5种常见的花朵数据集(向日葵、玫瑰、蒲公英、郁金香、菊花)进行处理后进行模型训练,最…

解决DockerDesktop启动redis后采用PowerShell终端操作

如图: 在启动redis容器后,会计入以下界面 : 在进入执行界面后如图: 是否会觉得界面过于单调,于是想到使用PowerShell来操作。 步骤如下: 这样就能使用PowerShell愉快地敲命令了(颜值是第一生…