当前位置: 首页 > news >正文

零入门kubernetes网络实战-14->基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信测试案例

《零入门kubernetes网络实战》视频专栏地址
https://www.ixigua.com/7193641905282875942

本篇文章视频地址(稍后上传)


本篇文章继续提供测试案例:
基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信

1、网络拓扑如下

在这里插入图片描述

2、网络拓扑构建

2.1、第1步:在master上执行下面的命令

ip netns add ns1ip link add veth1a type veth peer name veth1bip link set veth1a netns ns1ip netns exec ns1 ip addr add 10.244.1.2/24 dev veth1a
ip netns exec ns1 ip link set veth1a up
ip addr add 10.244.1.3/24 dev veth1b
ip link set veth1b upip netns exec ns1 route add default gw 10.244.1.3
ip route add 10.244.2.0/24 via 10.211.55.123echo 1 > /proc/sys/net/ipv4/ip_forward

在这里插入图片描述

route -n
ip netns exec ns2 route -n

2.2、第2步:在slave上执行下面的命令

ip netns add ns2ip link add veth2a type veth peer name veth2bip link set veth2a netns ns2ip netns exec ns2 ip addr add 10.244.2.2/24 dev veth2a
ip netns exec ns2 ip link set veth2a up
ip addr add 10.244.2.3/24 dev veth2b
ip link set veth2b upip netns exec ns2 route add default gw 10.244.2.3
ip route add 10.244.1.0/24 via 10.211.55.122echo 1 > /proc/sys/net/ipv4/ip_forward

在这里插入图片描述

route -n
ip netns exec ns2 route -n

3、跨主机通信测试

登录到master节点上,进行跨主机通信测试

测试两种协议,ICMP协议和HTTP协议。

3.1、测试案例1:在master节点上跨主机ping slave节点上ns2里的veth2a网卡

针对ICMP协议,进行测试。

ip netns exec ns1 ping 10.244.2.2

在这里插入图片描述

3.2、测试案例2:在master节点上跨主机远程访问slave节点上ns2里的http-web服务

针对HTTP协议,进行测试。

3.2.1、http-web服务代码

提供一个http-web服务,代码如下

package mainimport ("encoding/json""fmt""net/http"
)type Stu struct {Age intMsg string
}const ip = "10.244.2.2"func sayHello(w http.ResponseWriter, r *http.Request) {stu := Stu{Age: 12, Msg: "hello world! this is Veth pair Test!"}stuJson, e := json.Marshal(&stu)if e != nil {panic(e)}w.Write(stuJson)fmt.Printf("Reply MSG:%v\tlen(Msg):%d\n", string(stuJson), len(stuJson))
}func main() {http.HandleFunc("/", sayHello)fmt.Printf(fmt.Sprintf("App URL: http://%s:%d\n", ip, 9090))err := http.ListenAndServe(fmt.Sprintf("%s:%d", ip, 9090), nil)if err != nil {fmt.Printf("http server failed, err:%v\n", err)return}
}

在这里插入图片描述

本地编译,上传到slave服务器上

build:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o http-web main.goscp:scp http-web root@10.211.55.123:/rootall:make build && make scp

在本地执行

make all

即可。

3.2.2、namespace 隔离说明(为什么在ns2命名空间里可以访问本地宿主机的文件)

说明一点:

namespace仅仅是对网络资源的隔离,

namespace隔离的网络跟宿主机的网络是互不影响的。

但是,在namespace里是可以访问本地的宿主机的。

如下:

在这里插入图片描述

3.2.3、在slave节点上,ns2命名空间里启动http-web服务

ip netns exec ns2 ./http-web 

在这里插入图片描述

3.2.4、在master节点上,ns1去测试ns2里的http-web服务

ip netns exec ns1 ip a sip netns exec ns1 curl 10.244.2.2:9090

在这里插入图片描述

4、原理介绍

4.1、测试用例中可以实现跨主机通信的原理?

观察网络拓扑创建命令,似乎跟以前差不多。

只是新增了一条路由而已,如下:

ip route add 10.244.2.0/24 via 10.211.55.123

就可以实现跨主机通信了。

主要原因是:

  • 将每个节点作为路由器来使用了。
    • 如,将master节点,slave节点分别作为路由器来使用。
  • 既然是将节点作为路由器来使用,那么,当节点如master节点收到数据包后,对数据包进行一层一层的解析,依次获取目的MAC地址,发现MAC地址是自己的MAC地址,继续获取目的IP地址,
  • 查询本地的路由表,判断是否有去往目的地址的路由
    • 如果有,就将此数据包转发到此路由上
    • 如果没有,就采取其他策略,如丢弃。
  • 当然,存在目标路由的话,还不行,还要查看iptables规则,查看FORWARD是否允许转发。

4.2、如何将一个linxu服务器作为路由器使用呢?

配置如下命令即可

echo 1 > /proc/sys/net/ipv4/ip_forward

准确的说:

配置完成后,服务器就具备了路由器的路由转发功能了。

4.3、具体如何使用呢?

4.3.1、将Linux服务器作为路由器的注意点

在这里插入图片描述

对比下,下面的图,可能更熟悉
在这里插入图片描述

假设将整个master节点作为一个私有网络,该私有网络的网段是10.244.1.0/24;

eth0作为该私有网络的网关。

slave节点同样的道理;

那么,该私有网络的数据包要访问slave节点的私有网络时,master节点的私有网络的数据包得通过本节点的

网关eth0进行发送,下一条地址就是slave节点的私有网络的网关,即10.211.55.123

同样的道理,slave节点的私有网络要想访问master节点的私有网络的原理是一样的。

也就是说,服务节点master有点类似于路由器的功能,实现了数据包的跨网络的路由转发的能力。

因此,将Linux服务器作为路由器有一个暗含要求:
节点必须在同一个网段呢。

4.3.2、具体设置路由

在master节点上,假设10.244.1.0/24网段的数据包的目的地址是10.244.2.0/24
那么,需要在master节点上,添加的路由是

ip route add 10.244.2.0/24 via 10.211.55.123

在这里插入图片描述

在slave节点上,假设10.244.2.0/24网段的数据包的目的地址是10.244.1.0/24
那么,需要在slavae节点上,添加的路由是

ip route add 10.244.1.0/24 via 10.211.55.122

5、传输过程,数据包的报文内容变化

5.1、在master节点上,抓取veth1b网卡的数据包

tcpdump -nn -i veth1b -w icmp-veth1b.pcap

在这里插入图片描述

5.2、在master节点上,抓取eth0网卡的数据包

tcpdump -nn icmp -i eth0 -w icmp-eth0.pcap

在这里插入图片描述

5.3、根据抓包情况,分析一下报文

在这里插入图片描述

直接路由转发数据包的方式,性能比较高。

不像vxlan模式没有经过额外的封包,解封包过程。

6、整个传输过程,经历过哪些iptables规则链

为了验证测试,分别在master节点、slave上添加日志埋点;

此过程,需要使用到rsyslog服务

6.1、在master节点上安装rsyslog服务

yum -y install rsyslog

6.1.1、更新配置文件

echo "kern.*     /var/log/iptables.log" >> /etc/rsyslog.conf 

在这里插入图片描述

.*,表示所有等级的消息都添加到iptables.log文件里

信息等级的指定方式

  • .XXX,表示 大于XXX级别的信息
  • .=XXX,表示等于XXX级别的信息
    • 如,kern.=notice /var/log/iptables.log, 将notice以上的信息添加到iptables.log里
  • .!XXX, 表示在XXX之外的等级信息

6.1.2、重启rsyslog服务

systemctl restart rsyslogsystemctl status  rsyslog

在这里插入图片描述

6.2、在slave节点上安装rsyslog服务

可完全参考master节点安装过程

6.3、添加针对icmp协议的DNAT规则

如果测试的是tcp服务的协议的话,添加日志埋点时,可能存在测试不足的情况。

因为tcp协议,除了我们自己测试在用外,其他服务也可能在用tcp服务等等吧。

因此,这里使用icmp协议来测试。

(因为测试环境只有我们在用icmp协议,可以唯一确定,然后将规则链的匹配条件设置到最大)

6.4、添加日志埋点

6.4.1、在master节点上,添加日志埋点

将当前的日志统计清零

iptables -t nat -Z
iptables -t filter -Z

插入日志埋点前,先查看一下,当前的现状

iptables -t nat -nvL PREROUTING --line-number
iptables -t filter -nvL FORWARD --line-number
iptables -t nat -nvL POSTROUTING --line-number

插入日志埋点

iptables -t nat -I PREROUTING -p icmp -j LOG --log-prefix "Nat-PREROUTING-1-"
iptables -t filter -A FORWARD -p icmp -j LOG --log-prefix "Filter-FORWARD-1-"
iptables -t nat -I POSTROUTING -p icmp -j LOG --log-prefix "Nat-POSTROUTING-1-"

在这里插入图片描述

实时查看日志

tail -f /var/log/iptables.log

6.4.2、在slave节点上,添加日志埋点

将当前的日志统计清零

iptables -t nat -Z
iptables -t filter -Z

插入日志埋点前,先查看一下,当前的现状

iptables -t nat -nvL PREROUTING --line-number
iptables -t filter -nvL FORWARD --line-number
iptables -t nat -nvL POSTROUTING --line-number

插入日志埋点

iptables -t nat -I PREROUTING -p icmp -j LOG --log-prefix "Nat-PREROUTING-1-"
iptables -t filter -A FORWARD -p icmp -j LOG --log-prefix "Filter-FORWARD-1-"
iptables -t nat -I POSTROUTING -p icmp -j LOG --log-prefix "Nat-POSTROUTING-1-"

slave节点上的日志埋点跟master节点是一样的

6.5、第1次请求时,经过的iptables规则链

在这里插入图片描述

6.6、第1次反馈时,经过的iptables规则链

在这里插入图片描述

反馈时,只经过了FORWARD链。

6.7、第2次以及以后的请求、反馈时,经过的iptables规则链

在这里插入图片描述

请求、反馈时,只经过了FORWARD链。

7、总结

本机主要是利用了Linux服务器可以作为路由器转发功能,这一特点

实现了不同宿主机上不同命名空间的跨主机通信

这种方式,性能比较高。

当然,要求是必须是宿主机在同一个网段。

如果,你已经理解了本文的测试方案,那么,

恭喜你了!

flannel中的Host-gw模式的核心,你已经掌握了。


点击 下面 返回 专栏目录

<<零入门kubernetes网络实战>>技术专栏之文章目录

相关文章:

零入门kubernetes网络实战-14->基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信测试案例

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章继续提供测试案例&#xff1a; 基于veth pair、namespace以及路由技术&#xff0c;实现跨主机命名空间之间的通信 1、网络拓扑如下 2、网络拓扑构建…...

【pytorch框架】对模型知识的基本了解

文章目录TensorBoard的使用1、TensorBoard启动&#xff1a;2、使用TensorBoard查看一张图片3、transforms的使用pytorch框架基础知识1 nn.module的使用2 nn.conv2d的使用3、池化(MaxPool2d)4 非线性激活5 线性层6 Sequential的使用7 损失函数与反向传播8 优化器9 对现有网络的使…...

SUP桨板电动气泵方案——鼎盛合方案

SUP桨板是现时最热门的水上运动之一&#xff0c;它的全称是Stand Up Paddle&#xff0c;简称SUP。这项运动近几年在我国三亚等地区风靡一时&#xff0c;在网上经常看到一些运动博主或者明星网红晒出冲浪视频&#xff0c;刺激又惊险。SUP桨板为充气式桨板&#xff0c;需要通过充…...

小白系列Vite-Vue3-TypeScript:011-登录界面搭建及动态路由配置

前面几篇文章我们介绍的都是ViteVue3TypeScript项目中环境相关的配置&#xff0c;接下来我们开始进入系统搭建部分。本篇我们来介绍登录界面搭建及动态路由配置&#xff0c;大家一起撸起来......搭建登录界面登陆接口api项目登陆接口是通过mockjs前端来模拟的模拟服务接口Login…...

C语言( 缓冲区和重定向)

一.缓冲输入&#xff0c;无缓存输入 while((chgetchar()) ! #) putchar(ch); 这里getchar(),putchar()每次只处理一个字符&#xff08;这里只是知道就好了&#xff09;&#xff0c;而我们使用while循环&#xff0c;当读到#字符时停止 而看到输出例子&#xff0c;第一行我们输入…...

编程思想、方法论和架构的类型及应用

概要编程思想是指在编写代码时所采用的基本思维方式和方法论。分类编程思想编程思想为软件开发提供了思维范式和指导思路&#xff0c;例如面向对象思想、函数式编程思想等&#xff0c;它们帮助程序员更好地抽象问题、组织代码、提高代码复用性和可维护性&#xff0c;包括一下几…...

【OA办公】OA流程审批大揭秘,带你看遍所有基础流程

流程审批&#xff0c;是所有企业的OA办公系统重要组成部分&#xff0c;是任何OA办公系统都不可缺少的。比起传统的纸张传阅、签批的审批模式浪费了大量的时间和成本&#xff0c;因此越来越多的企业采用OA这种全新的、高效的、智能的审批模式。流程审批除了这些好处&#xff0c;…...

《零基础入门数据结构与算法》专栏介绍

目录 前言 第一部分&#xff1a;重点 第二部分&#xff1a;题库 第三部分&#xff1a;测试 第四部分&#xff1a;实验 第五部分&#xff1a;试卷 总结 前言 本专栏主要分为五个部分&#xff1a; ① 重要知识点详解 ② 近百道练习题解析 ③ 数据结构与算法章节测试 …...

测试开发之Django实战示例 第九章 扩展商店功能

第九章 扩展商店功能在上一章里&#xff0c;为电商站点集成了支付功能&#xff0c;然后可以生成PDF发票发送给用户。在本章&#xff0c;我们将为商店添加优惠码功能。此外&#xff0c;还会学习国际化和本地化的设置和建立一个推荐商品的系统。本章涵盖如下要点&#xff1a;建立…...

【Spring】一文带你吃透AOP面向切面编程技术(下篇)

个人主页&#xff1a; 几分醉意的CSDN博客_传送门 上节我们介绍了什么是AOP、Aspectj框架的前置通知Before传送门&#xff0c;这篇文章将继续详解Aspectj框架的其它注解。 文章目录&#x1f496;Aspectj框架介绍✨JoinPoint通知方法的参数✨后置通知AfterReturning✨环绕通知Ar…...

【java】Spring Boot --40 个 Spring Boot 常用注解(建议收藏)

本文目录一、Spring Web MVC 注解Spring Web MVC 注解RequestMappingRequestBodyGetMappingPostMappingPutMappingDeleteMappingPatchMappingControllerAdviceResponseBodyExceptionHandlerResponseStatusPathVariableRequestParamControllerRestControllerModelAttributeCross…...

《游戏学习》| 微信对话模拟生成器源码分析

简介微信对话生成器&#xff0c;是一款在线微信聊天对话制作的工具&#xff0c;它可以设置苹果或安卓状态栏&#xff0c;包括手机电量、手机时间等&#xff0c;还可以设置不同用户的角色&#xff0c;然后发送文字、语音、红包、转账等多种好玩的功能&#xff0c;可谓是一款娱乐…...

剑指 Offer 10- I. 斐波那契数列[c语言]

目录题目思路代码结果该文章只是用于记录考研复试刷题题目 力扣斐波那契数列 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项&#xff08;即 F(N)&#xff09;。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 …...

【C#基础】C# 数据类型总结

序号系列文章0【C#基础】初识编程语言C#1【C#基础】C# 程序通用结构2【C#基础】C# 基础语法解析文章目录前言数据类型一. 值类型&#xff08;Value types&#xff09;二. 引用类型&#xff08;Reference types&#xff09;三. 指针类型&#xff08;Pointer types&#xff09;结…...

再创荣誉 | Softing工业荣获CAIMRS 2023 数字化创新奖

在刚刚结束的中国工控-第二十一届“自动化及数字化”年度评选&#xff08;CAIMRS 2023&#xff09;中&#xff0c;Softing凭借edgeAggregator产品荣获“数字化创新奖”&#xff01; 经层层筛选&#xff0c;Softing edgeAggregator边缘聚合服务器从中脱颖而出&#xff0c;摘得C…...

Multi Paxos

basic paxos 是用于确定且只能确定一个值&#xff0c;“只确定一个值有什么用&#xff1f;这可解决不了我面临的问题,例如每个用户都要多次保存数据.” 你心中可能有这样的疑问。 原simple paxos论文里有提到一连串个instance of paxos [4] 但没有提出 multi paxos的概念&…...

Android - dimen适配

一、分辨率对应DPIDPI名称范围值分辨率名称屏幕分辨率density密度&#xff08;1dp显示多少px&#xff09;ldpi120QVGA240*3200.75&#xff08;120dpi/1600.75px&#xff09;mdpi160&#xff08;基线&#xff09;HVGA320*4801&#xff08;160dpi/1601px&#xff09;hdpi240WVGA4…...

深度学习网络模型——RepVGG网络详解

深度学习网络模型——RepVGG网络详解0 前言1 RepVGG Block详解2 结构重参数化2.1 融合Conv2d和BN2.2 Conv2dBN融合实验(Pytorch)2.3 将1x1卷积转换成3x3卷积2.4 将BN转换成3x3卷积2.5 多分支融合2.6 结构重参数化实验(Pytorch)3 模型配置论文名称&#xff1a; RepVGG: Making V…...

仓库拣货标签应用案例

使用场景&#xff1a;富士康成都仓库 解决问题&#xff1a;仓库亮灯拣选&#xff0c; 提高作业效率和物料明晰展示仓库亮灯拣选使用场景&#xff1a;京东仓库 解决问题&#xff1a;播种墙分拣&#xff0c;合单拣货完成后按订单播种播种墙分拣使用场景&#xff1a;和尔泰智能料…...

介绍一款HCIA、HCIP、HCIE的刷题软件

华为认证考试分为三个等级&#xff0c;分别为工程师HCIA、高级工程师HCIP、专家HCIE&#xff0c;等级越高&#xff0c;考试难度越大。 本篇带大家详细了解华为数通题库刷题工具的详细操作步骤。 操作须知&#xff1a;本款刷题工具为一款刷题小程序&#xff0c;无需安装即可在线…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...