實驗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