kubenetes-容器网络接口CNI

news2025/4/5 10:58:20

一、CNI

Kubernetes 网络模型设计的基础原则是:

  1. 所有的Pod能够不通过NAT(网络地址转换)就能相互访问。
  2. 所有的节点能够不通过NAT就能相互访问。
  3. 容器内看见的IP地址和外部组件看到的容器IP是一样的。

Kubernetes的集群里,IP地址是以Pod为单位进行分配的,每个Pod都拥有一个独立的IP地址。一个Pod内部的所有容器共享一个网络栈,即宿主机上的一个网络命名空间,包括它们的IP地址、网络设备、配置等都是共享的。
也就是说,Pod里面的所有容器能通过localhost:port 来连接对方。在Kubernetes中,提供了一个轻量的通用容器网络接口CNI(Container Network Interface),专门用于设置和删除容器的网络连通。容器运行时通过CNI调用网络插件来完成容器的网络设置。

二、CNI运行机制

不同于CRI是通过gRPC服务进行调用,CNI是容器运行时直接调用可执行文件的方式进行的。
容器运行时在启动时会从CNI的配置目录中读取配置文件,文件后缀为".conf” “.conflist”“json”。如果配置目录中包含多个文件,一般情况下,会以名字排序选用第一个配置文件作为默认的网络配置,并加载获取其中指定的CNI插件名称和配置参数。所以,容器运行时一般需要配置两个参数–cni-bin-dir和–cni-conf-dir
kubelet 内置了Docker 作为容器运行时,且是由 kubelet 来查找CNI插件,并且运行插件来为容器设置网络,所以这两个参数应该配置在kubelet 处:

  • cni-bin-dir:网络插件的可执行文件所在目录。默认是/opt/cni/bin。

  • cni-conf-dir:网络插件的配置文件所在目录。默认是/etc/cni/net.d。

在这里插入图片描述

在这里插入图片描述
配置文件中定义了网络插件type,其实对应的就是/opt/cni/bin下面的可执行文件,由可执行文件来设置网络。

那么主机上的这些可执行文件和配置文件又是怎么生成的呢?其实是由calico的daemonSet推到各个主机节点上的。
在这里插入图片描述
由calico-node这个DaemonSet的initContainer完成的,具体可以看这个DaemonSet的yaml文件。

三、pod网络路由

1、启动一个nginx pod
在这里插入图片描述
2、查看pod网络路由
在这里插入图片描述
可以看到网络路由是从容器设备eth0发到168.254.1.1上。通过ping命令查看168.254.1.1的MAC地址:

在这里插入图片描述
这个设备的mac地址是ee:ee:ee:ee:ee:ee,在主机上通过ip a命令查看网卡设备:
在这里插入图片描述
所有cali开头的网卡设备都是ee:ee:ee:ee:ee:ee,每创建一个pod在宿主机上都会产生一个以cali开头的虚拟接口。

下面是VXLAN模式的calico插件网络路由:
在这里插入图片描述

calico还支持IPIP、BGP模式。

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

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

相关文章

3dMax2024新功能和工作流增强功能速览

3dMax2024新功能和工作流增强功能速览 Autodesk发布的3dMax2024引入了一系列新功能和工作流增强功能,如下所示: 更新的“指定控制器”卷展栏:这个现代化的功能为动画师提供了更高效的工作方式,简化了他们的动画流程。 布尔修饰符…

【数据分享】2023年我国省市县三级的独角兽企业数量(Excel/Shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平!比如一个城市的金融企业较多,那这个城市的金融产业肯定比较发达;一个城市的制造业企业较多,那这个城市的制造业肯定比较发达。 之前我们给大家分享了…

wpf devexpress绑定grid到总计和分组统计

此主题描述了如何在gridcontrol中的视图模型和显示定义总计和分组统计 在视图模型中指定统计 1、创建 SummaryItemType 枚举你想要在GridControl中显示的统计类型: public enum SummaryItemType { Max, Count, None } 2、创建一个grid统计描述类 public class S…

【uniapp】华为APP真机运行(novas系列)

依华为手机为例,首先数据线连接电脑,然后在手机上做如下操作: 1)打开设置 2)设置——关于手机 3)连续点击软件版本号,此时手机处于开发者模式 4) 回到设置——系统和更新 5)点击开…

进阶理解:leetcode115.不同的子序列(细节深度)

这道题是困难题,本章是针对于动态规划解决,对于思路进行一个全面透彻的讲解,但是并不是对于基础讲解思路,而是渗透到递推式和dp填数的详解,如果有读者不清楚基本的解题思路,请看我的这篇文章算法训练营DAY5…

Lstm+transformer的刀具磨损预测

视频讲解: 基于Lstm+transformer的刀具磨损预测实战_哔哩哔哩_bilibili 结果展示: 数据展示: 主要代码: # pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/ # pip install optuna -i https://pypi.tuna.tsinghua.edu.cn/simple/ import numpy as np…

CI/CD -gitlab

目录 一、常用命令 二、部署 一、常用命令 官网:https://about.gitlab.com/install/ gitlab-ctl start # 启动所有 gitlab 组件 gitlab-ctl stop # 停止所有 gitlab 组件 gitlab-ctl restart # 重启所有 gitlab 组件 gitlab-ctl statu…

基于token的鉴权机制-JWT

在实际开发项目中,由于Http是一种无状态的协议,我们想要记录用户的登录状态,或者为用户创建身份认证的凭证,可以使用Session认证机制或者JWT认证机制。 什么是JWT? 网络应用环境间传递声明执行的一种基于JSON的开放标准。适用于…

设计模式-外观模式-笔记

“接口隔离”模式 在组件构建过程中,某些接口之间的依赖常常带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密相关的接口是一种常见的解决方案。 经典模式:Facade、Proxy、Adapter、…

【APUE】补充 — 基于管道的线程池

目录 一、引言 二、代码实现 三、思考 一、引言 在线程章节的 3.2 部分,我们曾经提到过线程池的实现 在当时的代码中,我们仅仅用的一个 int 类型的变量来表示这个“池”,用来存放任务 显然这个池太小了,如果下游线程很多&am…

强化学习在文生图中的应用:Training Diffusion Models with Reinforcement Learning

论文链接:Training Diffusion Models with Reinforcement Learning项目地址:Training Diffusion Models with Reinforcement Learning官方代码:https://github.com/kvablack/ddpo-pytorch/tree/maintrl实现:https://huggingface.co/docs/trl/ddpo_trainer🤗关注公众号 fu…

【LeetCode刷题-双指针】--16.最接近的三数之和

16.最接近的三数之和 方法&#xff1a;排序双指针 class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int ans nums[0] nums[1] nums[2];for(int i 0;i<nums.length;i){int start i1,end nums.length - 1;while(start < en…

复合、委托、继承

1. 单例模式 静态实例对象在getInstance函数中定义&#xff0c;这样只有在调用函数时才会生成对象 2. 复合 1. 类中封装另一个类某些功能&#xff1b; 2. 构造、析构的调用过程 指明了复合中如何调用被包含类的构造函数&#xff0c;可以直接写在初始化列表位置&#xff1b; 3.…

Java的IO流-缓冲流

字节缓冲流 package com.itheima.d2;import java.io.*;public class Test1 {public static void main(String[] args) {try (InputStream is new FileInputStream("IO/src/itheima01.txt");//1、定义一个字节缓冲输入流包装原始的字节输入流InputStream bis new Bu…

企业是否需要单独一套设备管理系统?

在现代企业中&#xff0c;设备管理是一个至关重要的环节。随着科技的不断进步和信息化的发展&#xff0c;企业对设备管理的要求也越来越高。为了提高设备管理的效率和准确性&#xff0c;许多企业开始考虑是否需要单独一套设备管理系统。本文将从设备管理系统的介绍、和其他系统…

融合语言模型中的拓扑上下文和逻辑规则实现知识图谱补全11.18

融合语言模型中的拓扑上下文和逻辑规则实现知识图谱补全 摘要1 引言2 相关工作2.1 事实嵌入法2.2 拓扑嵌入方法2.3 规则融合方法2.4 基于LM的方法 3 准备3.1 知识图谱和拓扑上下文3.2 KG中的逻辑规则4.3 三元组嵌入 5 实验和结果5.1 数据集和评价指标 摘要 知识图补全&#xf…

电子学会C/C++编程等级考试2021年06月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数的输入和输出 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制:1000 内存限制:65536输入 一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。输出 一行两个数,分…

c语言:模拟实现qsort函数

qsort函数的功能&#xff1a; qsort相较于冒泡排序法&#xff0c;不仅效率更快&#xff0c;而且能够比较不同类型的元素&#xff0c;如&#xff1a;浮点数&#xff0c;结构体等等。这里我们来模拟下qsort是如何实现这一功能的&#xff0c;方便我们对指针数组有一个更深层次的理…

电子画册真的好好用,制作也简单,都快来学学!

同纸质画册相比&#xff0c;电子画册无需受时间、空间、地域等限制&#xff0c;它通过手机、电脑即可发送文件&#xff0c;轻松实现在线浏览&#xff0c;使用起来更方便。 如何制作电子画册&#xff1f;这里同大家分享一下超简单的电子画册制作教程&#xff0c;0基础也能轻松上…

JDBC,Java连接数据库

下载 JDBC https://mvnrepository.com/ 创建项目&#xff0c;然后创建一个目录并将下载好的 jar 包拷贝进去 选择 Add as Library&#xff0c;让这个目录能被项目识别 连接数据库服务器 在 JDBC 里面&#xff0c;使用 DataSource 类来描述数据库的位置 import com.mysql.cj.…