淘先锋技术网

首页 1 2 3 4 5 6 7

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

https://www.ixigua.com/7193641905282875942

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


本篇文章模拟一下啊,将宿主机的对外的物理网卡,挂载到虚拟网桥上,测试一下,

网桥管理的内部网络如何跟宿主机的本局域网内的其他节点通信?

1、测试环境介绍

两台centos虚拟机

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

在这里插入图片描述

2、网络拓扑

在这里插入图片描述

将物理网卡eth0挂载到虚拟网桥br0,从master节点的ns1命名空间里向slave节点发起icmp请求

3、操作实战

3.1、在master上执行下面的命令
brctl addbr br0
ip link set br0 up
ip addr add 10.211.55.122/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
brctl addif br0 eth0

ip netns exec ns1 route add default dev veth1a

在这里插入图片描述

在具体执行这些命令前,最好前提前多打开几个xshell终端,
一旦,执行了这些命令,就不能重新打开xshell终端了
如果不给网桥配置IP的话,执行完brctl addif br0 eth0后,xshell终端就链接不上了。

将eth0挂载到网桥上后,eth0网卡的地位,就降低了,就不具备三层IP功能了。

只保留MAC地址。

3.2、查看一下,当前的网桥信息
brctl show
brctl showmacs br0
brctl showstp br0

查看网桥缓存的MAC信息
在这里插入图片描述

在这里插入图片描述

3.3、在master节点对veth1a进行抓包
ip netns exec ns1 tcpdump -nn -i veth1a
ip netns exec ns1 tcpdump -nn -i veth1a -w icmp-veth1a.pcap

在这里插入图片描述

3.4、在master节点对eth0进行抓包
tcpdump -nn -i eth0 icmp
tcpdump -nn -i eth0 icmp -w icmp.pcap

在这里插入图片描述

3.5、在master节点上,发起请求
ip netns exec ns1 ping -c 1 10.211.55.123

在这里插入图片描述

ip netns exec ns1 arp -n

在这里插入图片描述

3.6、根据上面的抓包分析

可以知道,当slave节点收到master节点发送的数据包后,
开始回包,发现目的地址是10.244.1.2,属于跨网段了
因此,slave在回馈包的时候,将目的MAC地址重写成本局域网的网关地址,
当master节点收到此数据包后,发现MAC地址,并非是自己的就丢弃了。

其实,也就是在slave节点上,没有去往10.244.1.0/24网段的路由,

因此,只要在slave节点上,添加上指定的路由即可。

3.7、在slave节点上,添加上指定的路由
route add -net 10.244.1.0/24 dev eth0
route -n

在这里插入图片描述

3.8、在master节点上,重新测试
ip netns exec ns1 ping -c 1 10.211.55.123

在这里插入图片描述

4、提供完整的测试用例

4.1、在master节点上具体命令
brctl addbr br0
ip link set br0 up
ip addr add 10.211.55.122/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
brctl addif br0 eth0

ip netns exec ns1 route add default dev veth1a

4.2、进入slave节点上

添加去往master节点的10.244.1.0/24网段的路由

route add -net 10.244.1.0/24 dev eth0
route -n

4.3、在master节点上,发起icmp请求
ip netns exec ns1 ping -c 1 10.211.55.123

5、总结
  • 本文主要尝试了一下,将物理网卡eth0挂载的网桥上的通信方式。
  • 这么用的一个好处,应该是,从网桥管理的内网发送出去的数据包,不会走网络协议栈了,直接利用网桥的二层转发功能,就转发出去了。效率会提高。
  • 本次的网络拓扑有点类似于在同一个宿主机上使用bridge链接不同网段的多个网络命名空间的通信方案。都是利用了bridge的二层转发功能。
  • 一般实际中,应该也不会这么用的。
  • 除了给slave节点上,添加路由外,好像还可以在master节点上,添加SNAT(下面论述仅供参考)
    • 即,将本节点发送出去的数据包的源IP地址改为宿主机对外网卡的地址
    • 但是,对外网卡的IP地址,其实已经不起作用了。
    • 这种方式下,eth0是可以接收到反馈的数据包的。
    • 目的MAC地址,就是eth0的MAC,IP也是10.211.55.122
    • 但是,此时的eth0的IP 是不起作用的。
    • 因此,使用了SNAT,eth0看似收到了正确的包,也无法处理。

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