Docker网络基础之单机原理

Posted guge-94

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker网络基础之单机原理相关的知识,希望对你有一定的参考价值。

基本原理

单机版多容器实例网络交互原理

技术图片

  • 在宿主机上面打开两张网卡eth0与eth1,打通两张网卡的链路
  • 在test1上面启动一个veth网卡,创建一个namespace;并桥接到eth0上面
  • 在test2上面启动一个veth网卡,创建一个namespace;并桥接到eth1上面
  • 对test1与test2进行地址配置
  • 测试网络交互情况

 

模拟实验

添加两个namespace

[[email protected]2 ~]# ip netns add test1
[[email protected]-2 ~]# ip netns add test2

 

查看添加状况

[[email protected]2 ~]# ip netns list
test2
test1

[[email protected]-2 ~]# ip netns exec test1 ip addr
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
[[email protected]-2 ~]# ip netns exec test2 ip addr
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

    PS:这里可以看到namespace还没有mac地址

 

添加一对虚拟网卡

[[email protected]2 ~]# ip link add veth-test1 type veth peer name veth-test2

 

对虚拟网卡与namespace做捆绑

[[email protected]2 ~]# ip link set veth-test1 netns test1
[[email protected]-2 ~]# ip link set veth-test2 netns test2

 

对namespace中的虚拟网卡做地址设定,并激活

[[email protected]2 ~]# ip netns exec test1 ip addr add 10.1.1.100/24 dev veth-test1
[[email protected]-2 ~]# ip netns exec test2 ip addr add 10.1.1.200/24 dev veth-test2
[[email protected]-2 ~]# ip netns exec test1 ip link set dev veth-test1 up
[[email protected]-2 ~]# ip netns exec test2 ip link set dev veth-test2 up

 

查看设置的状况

[[email protected]2 ~]# ip netns exec test1 ip addr
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
9: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether f2:c2:eb:2b:08:d6 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 10.1.1.100/24 scope global veth-test1
       valid_lft forever preferred_lft forever
    inet6 fe80::f0c2:ebff:fe2b:8d6/64 scope link 
       valid_lft forever preferred_lft forever
       
[[email protected]-2 ~]# ip netns exec test2 ip addr
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
8: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 5e:06:df:2b:3d:fe brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.1.1.200/24 scope global veth-test2
       valid_lft forever preferred_lft forever
    inet6 fe80::5c06:dfff:fe2b:3dfe/64 scope link 
       valid_lft forever preferred_lft forever

 

测试实验结果

[[email protected]2 ~]# ip netns exec test1 ping 10.1.1.200
PING 10.1.1.200 (10.1.1.200) 56(84) bytes of data.
64 bytes from 10.1.1.200: icmp_seq=1 ttl=64 time=0.141 ms
^C
--- 10.1.1.200 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.141/0.141/0.141/0.000 ms

 

以上是关于Docker网络基础之单机原理的主要内容,如果未能解决你的问题,请参考以下文章

我对 Docker 网络模型的理解

Java面试基础知识,docker阮一峰

Docker 网络之pipework 工具单主机Docker容器VLAN划分

docker单机网络类型

理解Docker单机容器网络

Docker-04-docker单机网络详解