零入门kubernetes网络实战-33->基于nat+brigde+veth pair形成的跨主机的内网通信方案

news/2024/7/7 9:39:09

《零入门kubernetes网络实战》视频专栏地址

https://www.ixigua.com/7193641905282875942

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


本文主要使用的技术是
nat技术+Linux虚拟网桥+虚拟网络设备veth pair来实现跨主机网桥的通信

1、测试环境介绍

两台centos虚拟机

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

在这里插入图片描述

2、特殊说明

本篇方案是行不通的。

主要是想给大家复盘一下,学习的过程。

以及说明为什么不行。

也就是说,

如果跨主机通信的两端 都是内网的话,是不能使用nat技术的。(仅个人观点,仅供参考)

3、网络拓扑

在这里插入图片描述

4、操作实战

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

brctl addbr br0
ip link set br0 up
ip addr add 10.244.1.3/24 dev br0

ip netns add ns1

ip link add veth1a type veth peer name veth1b

ip 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 up

ip link set veth1b up

brctl addif br0 veth1b

ip netns exec ns1 route add default gw 10.244.1.3
iptables -t nat -A POSTROUTING -s 10.244.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -d 10.211.55.0/24 -i eth0 -p icmp -j DNAT --to 10.244.1.3 

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

其中:

iptables -t nat -A POSTROUTING -s 10.244.1.0/24 -o eth0 -j MASQUERADE

是说,对于离开宿主机的数据包,如果源地址是10.244.1.0/24网段,并且通过eth0出去的话,需要做源地址转换;

iptables -t nat -A PREROUTING -d 10.211.55.0/24 -i eth0 -p icmp -j DNAT --to 10.244.1.3 

是说,对于进入本宿主机的数据包,如果数据包的目的地址是10.211.55.0/24网段,通过eth0进入,imcp协议的话,
需要做DNAT转换,
重定向到10.244.1.3 IP

在这里插入图片描述

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

brctl addbr br0
ip link set br0 up
ip addr add 10.244.2.3/24 dev br0

ip netns add ns2

ip link add veth2a type veth peer name veth2b

ip link set veth2a netns ns2
ip netns exec ns2 ip addr add 10.244.2.2/24 dev veth2a
ip netns exec ns2 ip link set veth2a up

ip link set veth2b up

brctl addif br0 veth2b

ip netns exec ns2 route add default gw 10.244.2.3
iptables -t nat -A POSTROUTING -s 10.244.2.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -d 10.211.55.0/24 -i eth0 -p icmp -j DNAT --to 10.244.2.3 

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

在这里插入图片描述

4.3、第3步:为了验证测试,提前在slave上添加日志埋点

4.3.1、安装rsyslog服务

yum -y install rsyslog

4.3.2、更新配置文件

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

4.3.3、重启rsyslog服务

systemctl restart rsyslog

systemctl status  rsyslog

在这里插入图片描述

4.3.4、添加日志埋点

iptables -t nat -I PREROUTING -p imcp -j LOG

在这里插入图片描述

4.4、第3步:测试

4.4.1、在master节点上发起ping请求

ip netns exec ns1 ping 10.244.2.2

在这里插入图片描述

4.4.2、对slave节点上的eth0抓包

tcpdump -nn -i eth0 icmp

在这里插入图片描述

4.4.3、查看一下日子埋点

在这里插入图片描述

5、总结

跨主机通信时,如果两侧都是内部网络通信的话,使用
nat技术是不行的。

因为,当目的服务器的对外网卡接收到数据包后,发现数据包的目的地址并非是本网卡的,而是内部地址的。

但是,网卡直接就给丢弃了。

同网段的其他服务器也可以接收到数据包的。

因此,如果希望跨主机两侧的内部网络能够互相通信的话,

需要对目的IP进行修改,即二次封装。

比方说vxlan技术。

当然,也有其他方案。

如,直接路由方案。


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



http://www.niftyadmin.cn/n/346890.html

相关文章

云视如何实现流量转化

云视如何实现流量转化 大家好我是小鱼 小伙伴很好奇 云视除了直播带货 打赏&#xff0c;广告 还有哪些方式 可以实现流量转化 今天我和大家分享一下这个话题 接下来我们要讲讲 我们要用的工具 优惠券 适用于刺激消费回流&#xff0c;构建闭环消费圈。 课程赠送 趣味推广营销&am…

【C++】基础知识--变量和类型(2)

上一章中显示的“Hello World”程序的有用性相当值得怀疑。我们必须编写几行代码&#xff0c;编译它们&#xff0c;然后执行生成的程序&#xff0c;只是为了获得写在屏幕上的简单句子的结果。自己输入输出句子肯定会快得多。 但是&#xff0c;编程不仅限于在屏幕上打印简单的文…

Facebook拆分的深度思考:社交媒体真的是必需品吗?

在当今数字化时代&#xff0c;社交媒体已经成为我们日常生活中不可或缺的一部分。而Facebook作为其中的巨头之一&#xff0c;不可否认地对人们的社交行为和信息传播产生了巨大的影响。 然而&#xff0c;随着越来越多的争议和讨论浮出水面&#xff0c;我们有必要进行深入思考&a…

CMake学习笔记:搜索第三方库及头文件路径 find_package()命令

1、find_package命令基本介绍 在实际开发过程中&#xff0c;经常不可避免的会使用到第三方开源库&#xff0c;这些开源库可能是通过apt-get install 命令自动安装到系统目录&#xff0c;也可能是由我们自己下载库的源码然后通过编译安装到指定目录的。 不管哪种方式安装的库文…

rt下降40%?程序并行优化六步法 | 京东云技术团队

1 背景 性能优化是我们日常工作中很重要的一部分&#xff0c;主要有以下原因&#xff1a; 降低服务器和带宽等硬件成本&#xff1a;用更少的资源处理更多的请求提高现实世界的运行效率&#xff1a;人机处理效率存在数量级的偏差&#xff0c;同样机器世界的效率提升能带来现实…

辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-HMI人机交互

书接上回 2.3.7HMI人机交互 2.3.7.1显示 (1)图标 序号 图标状态 (图形、颜色供参考) 含义说明 备注 1 辅助驾驶功能READY

微信小程序云开发学习记录--1

目录 1.配置小程序项目 2. 云创建 3.新建云文件夹 4.数据库的建立和使用 5.增、删、改、查四种数据库基本操作 增加数据 查询数据 修改数据 删除数据 拿到微信小程序&#xff0c;首先可以先配置好自己的服务器或者是云环境&#xff0c;服务器的方法就不说了&#xff0…