docker网络深度研究

环境

centos7
yum install bridge-util tcpdump

linux network namespace

network namespace能创建多个隔离网络空间,每个空间都有各自独立的网卡和网络信息。

## 查看网络空间
ip netns add NAME
## 设置网络空间名称
ip netns set NAME NETNSID
## 删除网络空间
ip [-all] netns delete [NAME]
## 获取当前网络空间 或者指定id的网络空间名称
ip netns identify [PID]

默认的网络空间namespace 是default,可以进入其他网络空间执行程序

## 进入testns执行
ip netns exec testns bash
## 查看testns地址
ip addr
## 退出testns网络空间
exit

veth pair

如果把网络空间比喻成两个路由器,veth pair就是连接两个路由器的网线,可以让隔离的网络空间产生联系。

veth pair
## 添加veth pair
ip link add veth1 type veth peer name veth2
## 这样命令执行后会产生两个link设备 veth1 veth2,可以比喻成网线的两头
## 将veth1留在default命名空间里 将veth2放到testns命名空间里
## 移动veth2 并启动
ip link set veth2 netns testns up
## 启动veth1
ip link set veth1 up
## 设置veth1的ip
ip addr add 10.0.0.1/24 dev veth1
## 设置veth2的ip
ip netns exec testns ip addr add 10.0.0.2/24 dev veth2 

ping测试

ping 10.0.0.2
ip netns exec testns ping 10.0.0.1

bridge

网桥可以将多个网络设备的网络连通起来,实现ip转发。即所有的ip包都发给桥接网卡,桥接网卡决定ip包流向哪个子网卡。类似交换机的功能。

网桥示意图
## 添加一个桥接网卡
brctl addbr mybr0
## 添加一个网卡
brctl addif  veth1
## 删除veth1的ip
ip addr del 10.0.0.1/24 dev veth1
## 设置mybr0的网络地址
ip addr add 10.0.0.1/24 dev mybr0

这样veth1,veth2就完全最为一个网线的作用了
testns连接外网

ip netns exec testns ip ro add default via 10.0.0.2

container network

linux docker的网络利用的就是network namespace。

## 添加软件连接
ln -s /var/run/docker/netns /var/run/netns
## 查看docker的网络设备
docker network ls
## 查看netns
ip netns list

可以看见docker的每一个网卡就是network namespace,网卡的id和网络空间是一致的。
docker容器对外网的访问也是用的桥接网卡

## 会看见一个docker0的桥接网卡和一些veth的网卡
ip addr

docker利用的docker0桥接和veth pair让docker容器上网和访问docker宿主机

VXLAN

VXLAN(Virtual Extensible LAN),是一种网络虚似化技术,试图改进大型云计算的部署时的扩展问题.可以说是对vlan的一种扩展,由于vlan Header头部限长是12bit, 导致vlan的限制个数是2^12=4096个,无法满足日益增长的需求.目前 VXLAN 的报文 Header 内有 24 bit,可以支持 2^24次方的 VNI 个数(VXLAN中通过 VNI 来识别,相当于VLAN ID).
docker的overlay网络利用的是vxlan,linux高版本内置的叠加网络类型。

## 查看docker的swarm网络
docker network ls
##输出
NETWORK ID          NAME                DRIVER              SCOPE
c96794a02093        bridge              bridge              local
5f0hj8eutx3o        ingress             overlay             swarm
izlz6tjselmy        mynet               overlay             swarm

## 这里有两个swarm网络

## 软连接
ln -s /var/run/docker/netns /var/run/netns

## 查看netns
ip netns
## 输出
b082687d2205 (id: 25)
1-izlz6tjsel (id: 9)
1-5f0hj8eutx (id: 0)

## 进入mynet网络命名空间 id 1-izlz6tjsel
ip netns exec 1-izlz6tjsel  bash
## 查看地址
ip addr
## 输出
2: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP 
    link/ether 1a:8a:ce:06:fe:95 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 scope global br0
       valid_lft forever preferred_lft forever
559: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br0 state UNKNOWN 
    link/ether 5a:62:26:73:8a:55 brd ff:ff:ff:ff:ff:ff link-netnsid 0
587: veth4@if586: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br0 state UP 
    link/ether b2:aa:51:60:a3:38 brd ff:ff:ff:ff:ff:ff link-netnsid 10
## 可以看见br0的桥接网卡和vxlan0的vxlan网卡和veth4的veth网卡
## 查看veth4的网卡对应网卡
ethtool -S veth4
## 输出
NIC statistics:
     peer_ifindex: 586
## 根据link-netnsid 10 可以看出网卡插到了命名空间id10了 
## 查看命名空间
ip netns  list-id
## 输出
nsid 10 (iproute2 netns name: a728e382a976)
nsid 11 (iproute2 netns name: f5ccfdfe9b81)
## 查看a728e382a976的网络信息
ip netns exec a728e382a976 ip a
## 输出
1: lo: <LOOPBACK,UP,LOWER_UP> 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
586: eth0@if587: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP 
    link/ether 02:42:0a:00:00:37 brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet 10.0.0.55/24 scope global eth2
       valid_lft forever preferred_lft forever
    inet 10.0.0.36/32 scope global eth2
       valid_lft forever preferred_lft forever
588: eth1@if589: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:13:00:0c brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 172.19.0.12/16 scope global eth1
       valid_lft forever preferred_lft forever

## 可以看见586对应的eth0对应的就是这里veth4
## 查看eth1对应的网卡 ,这里的link-netnsid 1已经不是正确的了,因为这个是docker容器的网络空间序号,当前并不在docker容器内。
## 执行ethtool
ip netns exec a728e382a976 ethtool -S eth1
## 输出
NIC statistics:
     peer_ifindex: 589
## 退出mynet空间
exit
## 查看默认网络空间的589
ip link |grep 589
## 输出
589: veth0641ce3@if588: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP mode DEFAULT 
## 查看网桥信息
brctl show
## 输出
bridge name bridge id       STP enabled interfaces
docker_gwbridge     8000.02423beaac26   no      veth0641ce3
                            veth1fa0be1
                            veth23e5fec
                            veth3196c2e
                            veth3d96fa6
                            veth4377740
                            veth9378d7a
                            vetha114976
                            vetha964f01
                            vethbd20bb9

## 可以看见 这个veth是属于docker_gwbridge的

通过上述观察可以画出下图

网络示意图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,454评论 0 120
  • 概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信...
    糙老爷们儿吃什么樱桃阅读 3,585评论 1 5
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,714评论 0 7
  • 这本书里让我印象深刻的有以下几点: 1.买房要慎重,因为面临的经济压力会让你没有足够钱花在提升自己的生活品质,...
    三叶草amy阅读 277评论 0 0
  • 1.為什麼要學習寫作: 因為我要經營Facebook粉絲團,衝人氣,寫很多好內容分享給大家,分享我一路走來努力的過...
    李東東阅读 203评论 1 2