实验1:宿主机内部容器间的网络通信
1、新建网络为none的容器
docker run -it --rm --name=network-node --net=none nginx:alpine sh
2、创建虚拟网卡对
ip link add A type veth peer name B
3、将虚拟网卡对A端插入docker0网桥并启动网卡
brctl addif docker0 A
ip link set A up
#brctl 可用yum install bridge-utils 安装
4、将虚拟网卡对B端插入容器网络名称空间(借助于ip netns)
PID=$(docker inspect -f '{{.State.Pid}}' network-none) #查找容器pid
mkdir -p /var/run/netns
ln -s /proc/$PID/ns/net /var/run/netns/ #链接容器网络名称空间至netns
ip netns exec $PID ip link set dev B name eth0 #修改设备名称
ip netns exec $PID ip link set eth0 up
ip netns exec $PID ip addr add 172.17.0.99/16 dev eth0
ip netns texec $PID ip route add default via 172.17.0.1
#配置完成后可测试同一网桥上的容器网络是否互通
#查看容器虚拟网卡对绑定信息:cat /sys/class/net/eth0/ifindex
实验2:跨宿主机之间的容器网络通信(两台主机点对点通信)
1、新建vxlan设备并配置ip地址
#主机1
ip link add vxlan20 type vxlan id 20 remote 192.168.1.188 dstport 6789 dev wlp3s0
ip link set vxlan20 up
ip addr add 10.0.136.11/24 dev vxlan20
#主机2
ip link add vxlan20 type vxlan id 20 remote 192.168.1.113 dstport 6789 dev enp3s0
ip link set vxlan20 up
ip addr add 10.0.136.12/24 dev vxlan20
# 验证设备信息
ip -d link show vxlan20
bridge fdb show |grep vxlan20
2、新建测试网桥并将容器绑定
#主机1
docker network create --subnet 172.20.0.0/16 network-test
docker run -it --rm --net network-test --ip 172.20.0.2 nginx:alpine sh
#主机2
docker network create --subnet 172.20.0.0/16 network-test
docker run -it --rm --net network-test --ip 172.20.0.3 nginx:alpine sh
3、将网桥与vxlan设备绑定并测试跨主机间的容器网络通信
#主机1
brctl addif br-4ea755c4336f vxlan20 #br-4ea755c4336f 为容器所绑定的网桥名称:brctl show 查看
#主机2
brctl addif br-aa8b06a1012f vxlan20