Docker网络

节点信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:32:83:16 brd ff:ff:ff:ff:ff:ff
    inet 10.201.50.188/24 brd 10.201.50.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe32:8316/64 scope link
       valid_lft forever preferred_lft forever

添加网络命令空间

1
ip netns add netns1

增加 veth

1
ip link add veth0 type veth peer name veth1

通过 ip addr 命令查看,多了两个设备

1
2
3
4
3: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether da:13:9f:3c:97:b5 brd ff:ff:ff:ff:ff:ff
4: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 32:2b:79:c6:1b:76 brd ff:ff:ff:ff:ff:ff

查看 veth0 连接的对端名称

1
2
ethtool -S veth0NIC statistics:
     peer_ifindex: 3

ip netns exec netns1 ip addr 查看 netns1 空间内的情况,多了一个设备

1
2
3
4
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: veth1@if4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether da:13:9f:3c:97:b5 brd ff:ff:ff:ff:ff:ff link-netnsid 0

给 netns1 的设备添加 ip 地址,并启动设备

1
2
ip netns exec netns1 ip addr add 10.1.1.1/24 dev veth1
ip netns exec netns1 ip link set dev veth1 up

设置默认空间中的 veth0 设置,添加 ip 地址,并启动`

1
2
ip addr add 10.1.1.2/24 dev veth0
ip link set dev veth0 up

ping测试:

1
2
3
4
5
# 默认空间 ping netns1 空间地址
ping -c 4 10.1.1.1

# netns1 的ping 默认空间
ip netns exec netns1 ping -c 4 10.1.1.2

现在 两个 网络命名空间都可以连通了


网桥的执行过程
配置了3个 网络命名空间,3个 veth对,一个网桥,然后将3个空间连接起来,其网络拓扑如下

实验细节参考 -> 这里


tap tun 介绍
细节参考 -> 这里

参考

Docker 网络
Linux tun:tap 详解
Linux Bridge 详解