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

零入门kubernetes网络实战-12->基于DNAT技术使得外网可以访问本宿主机上veth-pair链接的内部网络

视频地址(稍后上传)


本篇文章测试如何让veth pair链接的内网网络可以被本局域网的其他宿主机访问到?

1、测试环境介绍

一台centos虚拟机

# 查看操作系统版本
cat /etc/centos-release
# 内核版本
uname -a
uname -r 
# 查看网卡信息
ip a s eth0

在这里插入图片描述

2、网络拓扑

在这里插入图片描述

3、操作实战

3.1、操作命令

3.1.1、具体操作命令(master节点)

ip netns add ns1ip link add veth1a type veth peer name veth1bip link set veth1a netns ns1
ip netns exec ns1 ip addr add 10.244.1.2/24 dev veth1a
ip netns exec ns1 ip link set veth1a upip 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
iptables -t nat -A PREROUTING -d 10.211.55.122 -p tcp --dport 8090 -i eth0 -j DNAT --to 10.244.1.2:9090echo 1 > /proc/sys/net/ipv4/ip_forward

3.1.2、查看一下当前环境

3.1.2.1、查看一下ns1里的路由情况

ip netns exec ns1 route -n

在这里插入图片描述

3.1.2.2、查看一下主网络空间里路由情况

route -n

在这里插入图片描述

4、具体测试

在ns1里,启动被测试服务http-web

4.1、被测试服务

4.1.1、被测试服务代码

package mainimport ("encoding/json""fmt""net/http"
)type Stu struct {Age intMsg string
}const ip = "0.0.0.0"func sayHello(w http.ResponseWriter, r *http.Request) {stu := Stu{Age: 12, Msg: "hello world! this is DNAT+bridge+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}
}

不用关心测试代码的具体逻辑,主要是关心请求后,是否有正常打印输出即可。

4.1.2、本地编译,上传到Master节点

Makefile

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

大家可以根据自己的实际情况进行修改。

直接执行

make all

4.2、在master节点上,ns1命名空间里启动http-web服务

ip netns exec ns1 ./http-web

在这里插入图片描述

4.3、在slave节点上,发起http-web服务请求

curl 10.211.55.122:8090

在这里插入图片描述

5、观察一下ns1网络空间和主网络空间里的ARP表的变化

ip netns exec ns1 arp -n

在这里插入图片描述

6、分析一下,整个传输过程中数据包的报文变化

为了观察报文变化,需要对网络设备进行抓包分析。

6.1、对master节点上的网络设备进行抓包

6.1.1、对ns1网络空间里的veth1a进行抓包

ip netns exec ns1 tcpdump -nn -i veth1a 
ip netns exec ns1 tcpdump -nn -i veth1a -w icmp-veth1a.pcap

在这里插入图片描述

6.1.2、对主网络空间里的veth1b进行抓包

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

veth1b可以参考veth1a。

6.1.3、对主网络空间里的eth0进行抓包

tcpdump -nn -i eth0 -p tcp and port 8090 
tcpdump -nn -i eth0 -p tcp and port 8090 -w icmp-eth0.pcap

在这里插入图片描述

6.2、对slave节点上的网络设备进行抓包

6.2.1、对主网络空间里的eth0进行抓包

tcpdump -nn -i eth0 -p tcp and port 8090 
tcpdump -nn -i eth0 -p tcp and port 8090 -w icmp-eth0.pcap

可以参考122节点上的eth0数据抓取情况。

6.3、重新发起请求

为了恢复到最初始的状态,最好重启master、slave两台服务器。
重新根据操作命令,重新创建一下网络拓扑。

在slave节点,重新发起请求

curl 10.211.55.122:8090

在这里插入图片描述

6.4、请求过程,数据包的报文变化情况

在这里插入图片描述

上面是Slave节点,下面是Master节点

主要是观察一下,经过DNAT后,哪些发生了变化。

7、分析一下,整个传输过程中经过了哪些iptables规则链

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

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

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

yum -y install rsyslog

7.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之外的等级信息

7.1.2、重启rsyslog服务

systemctl restart rsyslogsystemctl status  rsyslog

在这里插入图片描述

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

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

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

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

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

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

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

下面是针对icmp协议,添加的DNAT规则
(也就是说,主要有请求目的IP是10.211.55.122,请求协议是ICMP的,就将目的IP进行重定向)

iptables -t nat -A PREROUTING -p icmp -i eth0 -j DNAT --to 10.244.1.2

在这里插入图片描述

7.4、添加日志埋点

7.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

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

将当前的日志统计清零

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

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

iptables -t nat -nvL OUTPUT --line-number
iptables -t filter -nvL OUTPUT --line-number
iptables -t nat -nvL POSTROUTING --line-number
iptables -t nat -nvL INPUT --line-number
iptables -t filter -nvL INPUT --line-number

插入日志埋点

# 匹配出去的数据包
iptables -t nat -I OUTPUT -p icmp -j LOG --log-prefix "Nat-OUTPUT-1-"
iptables -t filter -A OUTPUT -p icmp -j LOG --log-prefix "Filter-OUTPUT-1-"
iptables -t nat -I POSTROUTING -p icmp -j LOG --log-prefix "Nat-POSTROUTING-1-"# 匹配进来的数据包
iptables -t nat -I PREROUTING -p icmp -j LOG --log-prefix "Nat-PREROUTING-1-"
iptables -t nat -I INPUT -p icmp -j LOG --log-prefix "Nat-INPUT-1-"
iptables -t filter -I INPUT -p icmp -j LOG --log-prefix "Filter-INPUT-1-"

实时查看日志

tail -f /var/log/iptables.log

7.5、发起请求测试

在slave节点,重新发起请求

ping 10.211.55.122

在这里插入图片描述

7.6、重新观察日志情况

7.6.1、观察slave节点上iptables日志变化

先观察主动发起请求的一侧

tail -f /var/log/iptables.log

在这里插入图片描述

7.6.2、观察master节点上iptables日志变化

再观察被请求方

tail -f /var/log/iptables.log

在这里插入图片描述

7.7、第1次请求、反馈都经历了哪些iptable链

7.7.1、请求过程,经历的iptables链

在这里插入图片描述

7.7.2、反馈过程,经历的iptables链

在这里插入图片描述

7.8、从第2次开始,请求、反馈都经历了哪些iptable链(仅供参考)

在这里插入图片描述

从第2次请求开始,只会走OUTPUT,input,forward链了。

8、总结

  • 本篇文章模拟了如何将veth pair链接的内部网络的服务暴露出来。
  • 通过dnat技术,端口映射方式,将内部网络的tcp服务,udp服务,http服务暴露出来。
  • 分析了整个过程数据包的报文内容变化情况
  • 分析了整个过程中都经历了哪些规则链。
    • 第1次请求过程
    • 第2次,3次,。。。。请求过程的区别
  • 实际应用中,其实,就是如何将容器里的服务暴露出来。原理是一样的。

点击 下面 返回 专栏目录

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

相关文章:

零入门kubernetes网络实战-12->基于DNAT技术使得外网可以访问本宿主机上veth-pair链接的内部网络

视频地址(稍后上传) 本篇文章测试如何让veth pair链接的内网网络可以被本局域网的其他宿主机访问到&#xff1f; 1、测试环境介绍 一台centos虚拟机 # 查看操作系统版本 cat /etc/centos-release # 内核版本 uname -a uname -r # 查看网卡信息 ip a s eth02、网络拓扑 3、操…...

conda环境管理命令

conda环境管理命令 1.环境检查 1&#xff09;查看安装了哪些包 conda list 2)查看当前存在哪些虚拟环境 conda env list conda info -e [rootoracledb anaconda3]# conda info -e # conda environments: # base * /home/anaconda33)检查更新当前conda con…...

ubuntu clion从0开始搭建一个风格转换ONNX推理网络 opencv cuda::dnn::net

系统搭建 系统搭建 OpenCV的安装 cmake sudo apt-get install cmake其他环境以来 sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev 不安装会报这个错误 OpenCV(4.6.0) /hom…...

1.十大排序算法

1.什么是排序算法&#xff1f; 在梳理十大排序算法之前&#xff0c;虽然知道排序算法是将数字或字母按增序排列的算法&#xff0c;但该理解过于片面&#xff0c;那排序算法的权威定义是什么呢。 一个排序算法&#xff08;英语&#xff1a;Sorting algorithm&#xff09;是一种…...

算法导论—SAT、NP、NPC、NP-Hard问题

算法导论—SAT、NP、NP-Hard、NPC问题SAT 问题基本定义问题复杂性P、NP、NP-Hard、NP-Complete&#xff08;NPC&#xff09;证明NP-Hard关系图NP问题的概念约化的定义NPC问题NP-Hard问题SAT 问题基本定义 SAT 问题 (Boolean satisfiability problem, 布尔可满足性问题,SAT): 给…...

linux入门---基础指令(上)

这里写目录标题前言ls指令pwd指令cd指令touch指令mkdirrmdirrmman指令cp指令mv指令前言 我们平时使用电脑主要是通过鼠标键盘以及操作系统中自带的图形来对电脑执行相应的命令&#xff0c;比如说我想打开D盘中的cctalk这个文件&#xff1a; 我就可以先用鼠标左键单击这个文件…...

大数据Kylin(一):基础概念和Kylin简介

文章目录 基础概念和Kylin简介 一、​​​​​​​OLTP与OLAP 1、​​​​​​​​​​​​​​OLTP 2、​​​​​​​​​​​​​​OLAP 3、​​​​​​​​​​​​​​OLTP与OLAP的关系 二、​​​​​​​​​​​​​​数据分析模型 1、星型模型 2、雪花模型 …...

推进行业生态发展完善,中国信通院第八批RPA评测工作正式启动

随着人工智能、云计算、大数据等新兴数字技术的高速发展&#xff0c;数字劳动力应用实践步伐加快&#xff0c;以数字生产力、数字创造力为基础的数字经济占比逐年上升。近年来&#xff0c;机器人流程自动化&#xff08;Robotic Process Automation&#xff0c;RPA&#xff09;成…...

DOM编程-获取下拉列表选中项的value

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>获取下拉列表选中项的value</title> </head> <body> <script type"text/javascript"> …...

认证服务-----技术点及亮点

大技术Nacos做注册中心把新建的微服务注册到Nacos上去两个步骤 在配置文件中配置应用名称、nacos的发现注册ip地址&#xff0c;端口号在启动类上用EnableDiscoveryClient注解开启注册功能使用Redis存验证码信息加入依赖配置地址和端口号即可直接注入StringRedisTemplate模板类用…...

6个常见的 PHP 安全性攻击

了解常见的PHP应用程序安全威胁&#xff0c;可以确保你的PHP应用程序不受攻击。因此&#xff0c;本文将列出 6个常见的 PHP 安全性攻击&#xff0c;欢迎大家来阅读和学习。 1、SQL注入 SQL注入是一种恶意攻击&#xff0c;用户利用在表单字段输入SQL语句的方式来影响正常的SQL执…...

三大基础排序算法——冒泡排序、选择排序、插入排序

目录前言一、排序简介二、冒泡排序三、选择排序四、插入排序五、对比References前言 在此之前&#xff0c;我们已经介绍了十大排序算法中的&#xff1a;归并排序、快速排序、堆排序&#xff08;还不知道的小伙伴们可以参考我的 「数据结构与算法」 专栏&#xff09;&#xff0…...

负载均衡上传webshell+apache换行解析漏洞

目录一、负载均衡反向代理下的webshell上传1、nginx负载均衡2、负载均衡下webshell上传的四大难点难点一&#xff1a;需要在每一台节点的相同位置上传相同内容的webshell难点二&#xff1a;无法预测下一次请求是哪一台机器去执行难点三&#xff1a;当我们需要上传一些工具时&am…...

【ESP 保姆级教程】玩转emqx数据集成篇③ ——消息重发布

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-10 ❤️❤️ 本篇更新记录 2023-02-10 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

支持分布式部署的主流方式 - Session 持久化到 Redis

1.为什么要将 Session 存储在 Redis 中如果我们不将 Session 存储在 MySQL 或者 Redis 中, 那么做出来的项目就只能支持单机部署, 不支持分布式部署. 因为之前我们只是将 Session 存储在当前电脑的内存里面. 当张三去登录的时候, 将 Session 信息存储在 A 服务器, 这个时候负载…...

计算机网络|第二章 物理层|湖科大课程|从零开始的计网学习——物理层(计网入门就看这篇!)

图片来源于胡科大计算机网络课程&#xff0c;https://www.bilibili.com/video/BV1c4411d7jb?p20&vd_sourcedeb12d86dce7e419744a73045bc66364。文章非盈利商业用途&#xff0c;供博主与大家学习参考&#xff0c;如有侵权&#xff0c;请联系我删除&#xff01;2.1物理层的基…...

【微服务】RabbitMQSpringAMQP消息队列

&#x1f6a9;本文已收录至专栏&#xff1a;微服务探索之旅 &#x1f44d;希望您能有所收获 一.初识MQ (1) 引入 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;可以立即得到响应&#xff0c;但是你却不能跟多个人同时通话。 异…...

jenkins +docker+python接口自动化之docker下安装jenkins(一)

jenkins dockerpython接口自动化之docker下安装jenkins&#xff08;一&#xff09; 目录&#xff1a;导读 1、下载jenkins 2、启动jenkins 3、访问jenkins 4.浏览器直接访问http://ip/:8080 5.然后粘贴到输入框中,之后新手入门中先安装默认的插件即可&#xff0c;完成后出…...

SpringBoot——Banner介绍

一、什么是BannerBanner即横幅标语&#xff0c;我们在启动SpringBoot项目时会将Banner信息打印至控制台。我们可以输出一些图形、SpringBoot版本信息等内容。默认情况下是通过实现类SpringBootBanner输出的Banner内容&#xff0c;默认的输出内容如下。二、自定义Banner如果不想…...

【STL】综述

STL&#xff0c;一文即可知 文章目录一、STL基本知识概述容器二、序列式容器详述数组容器array向量容器vector双端队列容器deque链式容器list正向链容器forward_list二、关联式容器详述红黑树RB-Tree哈希表参考博客&#x1f60a;点此到文末惊喜↩︎ 一、STL基本知识 概述 STL…...

Super Qwen Voice World部署案例:NVIDIA 16G显卡快速启动教程

Super Qwen Voice World部署案例&#xff1a;NVIDIA 16G显卡快速启动教程 1. 项目介绍&#xff1a;复古像素风语音设计中心 Super Qwen Voice World是一个基于Qwen3-TTS技术构建的创意语音设计工具&#xff0c;它将传统的语音合成参数调节转变为一场充满趣味的8-bit声音冒险。…...

超长上下文20万字!internlm2-chat-1.8b在Ollama中的高效部署与调用详解

超长上下文20万字&#xff01;internlm2-chat-1.8b在Ollama中的高效部署与调用详解 想体验一个能记住超长对话、处理20万字文档的AI助手吗&#xff1f;今天&#xff0c;我们就来聊聊如何在Ollama上快速部署和玩转InternLM2-Chat-1.8B这个“小身材、大能量”的模型。它不仅能进…...

告别每次手动连WiFi!NVIDIA Jetson NX保姆级无线网络配置与静态IP绑定教程

NVIDIA Jetson NX无线网络配置与静态IP绑定全攻略 刚拿到NVIDIA Jetson NX开发板的开发者们&#xff0c;是否还在为每次开机都要手动连接WiFi而烦恼&#xff1f;是否因为DHCP分配的IP地址频繁变动&#xff0c;导致SSH远程连接中断而抓狂&#xff1f;本文将彻底解决这两个痛点&a…...

计算机视觉领域投稿指南:如何选择适合你的顶刊顶会(附最新审稿周期与费用)

计算机视觉领域投稿策略&#xff1a;从期刊会议选择到高效发表的全流程指南 在计算机视觉领域&#xff0c;研究成果的发表渠道选择往往比研究本身更让人头疼。记得我第一次投稿时&#xff0c;面对琳琅满目的期刊和会议列表&#xff0c;整整两周都在纠结该把论文投向哪里——是追…...

MedGemma 1.5效果对比:在线大模型vs本地MedGemma在医学术语解释准确性评测

MedGemma 1.5效果对比&#xff1a;在线大模型vs本地MedGemma在医学术语解释准确性评测 1. 引言&#xff1a;为什么需要本地医疗AI助手&#xff1f; 想象一下&#xff0c;你或者家人身体不舒服&#xff0c;想在网上查查症状&#xff0c;结果搜出来一堆广告、营销号文章&#x…...

GLM-OCR公式识别效果展示:LaTeX格式精准渲染,学术党必备工具

GLM-OCR公式识别效果展示&#xff1a;LaTeX格式精准渲染&#xff0c;学术党必备工具 作为一名经常需要处理学术文献的研究人员&#xff0c;我深知公式识别的痛点。那些复杂的数学表达式&#xff0c;要么手动输入到LaTeX里费时费力&#xff0c;要么用传统OCR工具识别后变成一堆…...

百川2-13B量化版调优指南:提升OpenClaw任务成功率的关键参数

百川2-13B量化版调优指南&#xff1a;提升OpenClaw任务成功率的关键参数 1. 为什么需要专门调优百川模型参数&#xff1f; 第一次用OpenClaw对接百川2-13B量化版时&#xff0c;我遇到了典型的"自动化尴尬"——明明是个简单的文件整理任务&#xff0c;AI却总在奇怪的…...

Docker 网络与 Compose :部署前后端分离项目(MySQL + Java + Nginx)

上一篇文章中&#xff0c;学习了如何将 Java 应用打包成 Docker 镜像。但一个完整的项目往往需要多个容器协同工作&#xff0c;比如应用容器、数据库容器、前端 Nginx 容器。本文将从 Docker 网络基础讲起&#xff0c;通过自定义网络实现容器互联&#xff0c;最后使用 Docker C…...

comsol18650圆柱形电池组流体直冷热管理仿真 采用电化学-热-流场耦合/集总电池-流场...

comsol18650圆柱形电池组流体直冷热管理仿真 采用电化学-热-流场耦合/集总电池-流场耦合仿真模型 模拟电池组在充放电工况下&#xff0c;湍流流体介质直冷的散热模式下电池的电性能&#xff0c;热参数变化「这年头搞电池热管理&#xff0c;谁还没被18650的散热问题卡过脖子&…...

LED点阵驱动库LEDMatrix:嵌入式硬件时序控制实战指南

1. LEDMatrix 库概述&#xff1a;面向硬件驱动的二维点阵控制框架LEDMatrix 是一个专为嵌入式系统设计的轻量级 C 语言库&#xff0c;核心目标是将抽象的二维布尔数组&#xff08;bool matrix[rows][cols]&#xff09;高效、可靠地映射至物理 LED 点阵屏。其设计哲学并非通用图…...