零入门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 本篇文章视频地址(稍后上传) 本篇文章继续提供测试案例: 基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信 1、网络拓扑如下 2、网络拓扑构建…...
【pytorch框架】对模型知识的基本了解
文章目录TensorBoard的使用1、TensorBoard启动:2、使用TensorBoard查看一张图片3、transforms的使用pytorch框架基础知识1 nn.module的使用2 nn.conv2d的使用3、池化(MaxPool2d)4 非线性激活5 线性层6 Sequential的使用7 损失函数与反向传播8 优化器9 对现有网络的使…...
SUP桨板电动气泵方案——鼎盛合方案
SUP桨板是现时最热门的水上运动之一,它的全称是Stand Up Paddle,简称SUP。这项运动近几年在我国三亚等地区风靡一时,在网上经常看到一些运动博主或者明星网红晒出冲浪视频,刺激又惊险。SUP桨板为充气式桨板,需要通过充…...
小白系列Vite-Vue3-TypeScript:011-登录界面搭建及动态路由配置
前面几篇文章我们介绍的都是ViteVue3TypeScript项目中环境相关的配置,接下来我们开始进入系统搭建部分。本篇我们来介绍登录界面搭建及动态路由配置,大家一起撸起来......搭建登录界面登陆接口api项目登陆接口是通过mockjs前端来模拟的模拟服务接口Login…...
C语言( 缓冲区和重定向)
一.缓冲输入,无缓存输入 while((chgetchar()) ! #) putchar(ch); 这里getchar(),putchar()每次只处理一个字符(这里只是知道就好了),而我们使用while循环,当读到#字符时停止 而看到输出例子,第一行我们输入…...
编程思想、方法论和架构的类型及应用
概要编程思想是指在编写代码时所采用的基本思维方式和方法论。分类编程思想编程思想为软件开发提供了思维范式和指导思路,例如面向对象思想、函数式编程思想等,它们帮助程序员更好地抽象问题、组织代码、提高代码复用性和可维护性,包括一下几…...
【OA办公】OA流程审批大揭秘,带你看遍所有基础流程
流程审批,是所有企业的OA办公系统重要组成部分,是任何OA办公系统都不可缺少的。比起传统的纸张传阅、签批的审批模式浪费了大量的时间和成本,因此越来越多的企业采用OA这种全新的、高效的、智能的审批模式。流程审批除了这些好处,…...
《零基础入门数据结构与算法》专栏介绍
目录 前言 第一部分:重点 第二部分:题库 第三部分:测试 第四部分:实验 第五部分:试卷 总结 前言 本专栏主要分为五个部分: ① 重要知识点详解 ② 近百道练习题解析 ③ 数据结构与算法章节测试 …...
测试开发之Django实战示例 第九章 扩展商店功能
第九章 扩展商店功能在上一章里,为电商站点集成了支付功能,然后可以生成PDF发票发送给用户。在本章,我们将为商店添加优惠码功能。此外,还会学习国际化和本地化的设置和建立一个推荐商品的系统。本章涵盖如下要点:建立…...
【Spring】一文带你吃透AOP面向切面编程技术(下篇)
个人主页: 几分醉意的CSDN博客_传送门 上节我们介绍了什么是AOP、Aspectj框架的前置通知Before传送门,这篇文章将继续详解Aspectj框架的其它注解。 文章目录💖Aspectj框架介绍✨JoinPoint通知方法的参数✨后置通知AfterReturning✨环绕通知Ar…...
【java】Spring Boot --40 个 Spring Boot 常用注解(建议收藏)
本文目录一、Spring Web MVC 注解Spring Web MVC 注解RequestMappingRequestBodyGetMappingPostMappingPutMappingDeleteMappingPatchMappingControllerAdviceResponseBodyExceptionHandlerResponseStatusPathVariableRequestParamControllerRestControllerModelAttributeCross…...
《游戏学习》| 微信对话模拟生成器源码分析
简介微信对话生成器,是一款在线微信聊天对话制作的工具,它可以设置苹果或安卓状态栏,包括手机电量、手机时间等,还可以设置不同用户的角色,然后发送文字、语音、红包、转账等多种好玩的功能,可谓是一款娱乐…...
剑指 Offer 10- I. 斐波那契数列[c语言]
目录题目思路代码结果该文章只是用于记录考研复试刷题题目 力扣斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) 0, F(1) 1 …...
【C#基础】C# 数据类型总结
序号系列文章0【C#基础】初识编程语言C#1【C#基础】C# 程序通用结构2【C#基础】C# 基础语法解析文章目录前言数据类型一. 值类型(Value types)二. 引用类型(Reference types)三. 指针类型(Pointer types)结…...
再创荣誉 | Softing工业荣获CAIMRS 2023 数字化创新奖
在刚刚结束的中国工控-第二十一届“自动化及数字化”年度评选(CAIMRS 2023)中,Softing凭借edgeAggregator产品荣获“数字化创新奖”! 经层层筛选,Softing edgeAggregator边缘聚合服务器从中脱颖而出,摘得C…...
Multi Paxos
basic paxos 是用于确定且只能确定一个值,“只确定一个值有什么用?这可解决不了我面临的问题,例如每个用户都要多次保存数据.” 你心中可能有这样的疑问。 原simple paxos论文里有提到一连串个instance of paxos [4] 但没有提出 multi paxos的概念&…...
Android - dimen适配
一、分辨率对应DPIDPI名称范围值分辨率名称屏幕分辨率density密度(1dp显示多少px)ldpi120QVGA240*3200.75(120dpi/1600.75px)mdpi160(基线)HVGA320*4801(160dpi/1601px)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 模型配置论文名称: RepVGG: Making V…...
仓库拣货标签应用案例
使用场景:富士康成都仓库 解决问题:仓库亮灯拣选, 提高作业效率和物料明晰展示仓库亮灯拣选使用场景:京东仓库 解决问题:播种墙分拣,合单拣货完成后按订单播种播种墙分拣使用场景:和尔泰智能料…...
介绍一款HCIA、HCIP、HCIE的刷题软件
华为认证考试分为三个等级,分别为工程师HCIA、高级工程师HCIP、专家HCIE,等级越高,考试难度越大。 本篇带大家详细了解华为数通题库刷题工具的详细操作步骤。 操作须知:本款刷题工具为一款刷题小程序,无需安装即可在线…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
