docker网络实现
admin
2023-04-08 08:42:54
0

1、在纯Docker的环境,Docker支持4类网络模式:
● host模式:使用宿主机的IP和端口
● container模式:和已存在的容器共享网络
● none模式: 不进行网络配置
● bridge模式: 默认模式,使用桥接网络,Kubernetes使用此模式。
2、Docker 网络模型

通过上图,可以清楚的表示容器的网络结构,其中容器中的网卡eth0和绑定在Docker0网桥上的vethxxx设备是一对veth设备对。其中vethxxx由于绑定到docker0网桥,所以没有IP地址,容器中的eth0分配了和docker0同一网段的地址,这样就实现了容器的互联。

3、查看运行两个容器的宿主:

 # ip a

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 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:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:15:c2:12 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.17/24 brd 192.168.20.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe15:c212/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0:  mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:fa:6f:13:18 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:faff:fe6f:1318/64 scope link 
       valid_lft forever preferred_lft forever
7: veth47e9040@if6:  mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether f2:4e:50:a5:fb:b8 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::f04e:50ff:fea5:fbb8/64 scope link 
       valid_lft forever preferred_lft forever
19: veth46fb1f6@if18:  mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 7a:96:bc:c7:03:d8 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::7896:bcff:fec7:3d8/64 scope link 
       valid_lft forever preferred_lft forever

4、通过查看桥接网卡信息,可以验证这两个veth绑定在docker0上:

# brctl  show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242fa6f1318   no      veth46fb1f6
                                        veth47e9040

5、查看容器的network namespace

# docker inspect 506a694d09fb|grep Pid
            "Pid": 2737,
            "PidMode": "",
            "PidsLimit": 0,

# mkdir /var/run/netns

# ln -s /proc/2737/ns/net /var/run/netns/506a694d09fb

# ip netns list
506a694d09fb (id: 0)
6d9742fb3c2d (id: 1)

分别查看两个容器的IP:

# ip netns exec 506a694d09fb ip a 
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 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
6: eth0@if7:  mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft foreve

# ip netns exec 6d9742fb3c2d ip a 
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 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
18: eth0@if19:  mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever

可以发现这两个容器属于不同网络命名空间,但是在同一网段,通过veth设备对,绑定docker0互联。
通过ethtool -S veth-name 可以查看到对应的peer端,这里就不再演示,其实通过veth的名称(vethxxx@ifNO)也可以发现所指的接口信息。

6、如果执行ip netns exec命令报错,说明docker把网络netns又隐藏了一层,可以先进入docker守护进程的mount命名空间,在进入对应的网络命名空间,执行下面的nsenter命令。

[root@jumpserver ~]# nsenter -t 6807 -m nsenter --net=/var/run/docker/netns/a4fdba0d4cd4 ip add
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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
46: eth0@if47:  mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link 
       valid_lft forever preferred_lft forever

6807为docker主进程pid,可以通过pstree -p命令获取。

参考文章:
https://blog.51cto.com/tryingstuff/2165805

相关内容

热门资讯

今日重大消息“衡阳丫丫竞技怎么... 今日重大消息“衡阳丫丫竞技怎么开挂?”(其实是有挂)您好,衡阳丫丫竞技这个游戏其实有挂的,确实是有挂...
终于了解“天蝎炸/金/花有没有... 终于了解“天蝎炸/金/花有没有挂?”(其实是有挂)您好,天蝎炸/金/花这个游戏其实有挂的,确实是有挂...
重磅消息“新青鸟拼三张开挂神器... 您好:新青鸟拼三张这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款...
【今日要闻】“毛豆大厅拼三张究... 您好:毛豆大厅拼三张这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这...
今日重磅消息“微信十三水怎么装... 有 亲,根据资深记者爆料微信十三水是可以开挂的,确实有挂(咨询软件无需打...
今日重大发现“功夫川麻是不是有... 有 亲,根据资深记者爆料功夫川麻是可以开挂的,确实有挂(咨询软件无需打开...
我来教教您“八闽掌上麻将到底有... 您好:八闽掌上麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款...
今日重大消息“新圣游牌九可以开... 有 亲,根据资深记者爆料新圣游牌九是可以开挂的,确实有挂(咨询软件无需打...
今日重大通报“欢乐划水麻将有没... 网上科普关于“欢乐划水麻将有没有挂”话题很是火热,小编也是针对欢乐划水麻将作*弊开挂的方法以及开挂对...
今日重大通报“蛮王牛牛有挂吗?... 家人们!今天小编来为大家解答蛮王牛牛透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...