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

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

https://www.ixigua.com/7193641905282875942

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


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

1、测试环境介绍

两台centos虚拟机

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

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

2、特殊说明

本篇方案是行不通的。

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

以及说明为什么不行。

也就是说,

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

3、网络拓扑

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

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

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

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

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

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

4.3.1、安装rsyslog服务

yum -y install rsyslog

4.3.2、更新配置文件

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

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

.*,表示所有等级的消息都添加到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

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

4.3.4、添加日志埋点

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

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

4.4、第3步:测试

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

ip netns exec ns1 ping 10.244.2.2

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

4.4.2、对slave节点上的eth0抓包

tcpdump -nn -i eth0 icmp

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

4.4.3、查看一下日子埋点

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

5、总结

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

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

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

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

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

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

比方说vxlan技术。

当然,也有其他方案。

如,直接路由方案。


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


你可能感兴趣的:(kubernetes,kubernetes网络实战,chatGPT,docker,容器)