零入门kubernetes网络实战-33

《零入门网络实战》视频专栏地址
本篇文章视频地址(稍后上传)
本文主要使用的技术是
nat技术+Linux虚拟网桥+虚拟网络设备veth pair来实现跨主机网桥的通信
1、测试环境介绍
两台虚拟机
# 查看操作系统版本cat /etc/centos-release# 内核版本uname -auname -r # 查看网卡信息ip a s eth0
2、特殊说明
本篇方案是行不通的 。
主要是想给大家复盘一下 , 学习的过程 。
以及说明为什么不行 。
【零入门kubernetes网络实战-33】也就是说 , 
如果跨主机通信的两端 都是内网的话 , 是不能使用nat技术的 。(仅个人观点 , 仅供参考)
3、网络拓扑
4、操作实战
4.1、第1步:在上执行下面的命令
brctl addbr br0ip link set br0 upip addr add 10.244.1.3/24 dev br0ip 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 veth1aip netns exec ns1 ip link set veth1a upip link set veth1b upbrctl addif br0 veth1bip netns exec ns1 route add default gw 10.244.1.3iptables -t nat -A POSTROUTING -s 10.244.1.0/24 -o eth0 -j MASQUERADEiptables -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出去的话 , 需要做源地址转换;

零入门kubernetes网络实战-33

文章插图
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 br0ip link set br0 upip addr add 10.244.2.3/24 dev br0ip 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 veth2aip netns exec ns2 ip link set veth2a upip link set veth2b upbrctl addif br0 veth2bip netns exec ns2 route add default gw 10.244.2.3iptables -t nat -A POSTROUTING -s 10.244.2.0/24 -o eth0 -j MASQUERADEiptables -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、安装服务
yum -y install rsyslog
4.3.2、更新配置文件
echo "kern.*/var/log/iptables.log" >> /etc/rsyslog.conf
.* , 表示所有等级的消息都添加到.log文件里
信息等级的指定方式
.!XXX, 表示在XXX之外的等级信息
4.3.3、重启服务
systemctl restart rsyslogsystemctl statusrsyslog
4.3.4、添加日志埋点
iptables -t nat -I PREROUTING -p imcp -j LOG
4.4、第3步:测试
4.4.1、在节点上发起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技术是不行的 。
因为 , 当目的服务器的对外网卡接收到数据包后 , 发现数据包的目的地址并非是本网卡的 , 而是内部地址的 。