容器网络通信手动配置

实验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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章