容器虚拟化网络概述

六种名称空间:

UTS:主机名和域名

User:用户

Mount挂载文件系系统

IPC:进程间通信

pid:进程id

Net:网络

网络名称空间主要实现“协议栈”和“网络设备”的隔离,一个设备可以单独关联给一个单独的名称空间使用,其他名称空间就看不到这个设备了,这使得每个名称空间都可以配置一个单独的ip与外界通信,

但是如果网络设备不够为网络设备使用了,我们的内核可以模拟出来一个交换机,并模拟一对接口,一个接到一个名称空间,一个接到交换机,

docker网络

docker安装后自动提供三种网络

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
1d7c5fcc9190        bridge              bridge              local
b3ec0cad3ccc        host                host                local
2c634f206126        none                null                local

bridge表示桥接式网络(net桥)他会在本机之上创建一个纯软件的交换机,叫docker0,既可以扮演交换设备,又可以扮演网卡设备,

host表示让容器使用宿主机的网络名称空间

扫描二维码关注公众号,回复: 7241959 查看本文章

none表示null 表示为空,没有任何网卡,封闭式接口只有lo接口

[root@localhost ~]# 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:72:1c:ca brd ff:ff:ff:ff:ff:ff
    inet 10.192.45.116/21 brd 10.192.47.255 scope global dynamic enp0s3
       valid_lft 2875sec preferred_lft 2875sec
    inet6 fe80::a00:27ff:fe72:1cca/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:58:26:e8:42 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:58ff:fe26:e842/64 scope link 
       valid_lft forever preferred_lft forever
13: vethcc71d75@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 86:ad:5a:89:e7:46 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::84ad:5aff:fe89:e746/64 scope link 
       valid_lft forever preferred_lft forever
15: vethe5b386c@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 3a:43:31:9c:5b:0f brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::3843:31ff:fe9c:5b0f/64 scope link 
       valid_lft forever preferred_lft forever

vethcc71d75@if12和vethe5b386c@if14这两个是我们创建的一对网卡的一半,我们有两个容器,一半在容器里,一半在本机上

[root@localhost ~]# docker container ls
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
bd141921d661        haoran/httpd:v0.2     "/bin/httpd -f -h /d…"   3 hours ago         Up 3 hours                              t2
e0f415751ebb        haoran/httpd:v0.1-1   "sh"                     3 hours ago         Up 3 hours                              t1

使用brctl命令就可以看的明白了

[root@localhost ~]# yum -y install bridge-utils
[root@localhost ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.02425826e842   no      vethcc71d75
                            vethe5b386c

可以看到docker0关联了两个设备vethcc71d75和vethe5b386c

每创建一个容器启动并分配ip以后,在主机上会生成一个iptables规则

[root@iZ2zefbrqggvke1qw0kd0hZ ~]# iptables -t nat -vnL
Chain POSTROUTING (policy ACCEPT 8020 packets, 581K bytes)
 pkts bytes target     prot opt in     out     source               destination         
  274 17427 MASQUERADE  all  --  *      !docker0  172.18.0.0/16        0.0.0.0/0       

*从任何接口进来

!docker0只要不从docker0进来

原地址来个172.18.0.0/16这个网段的

0.0.0.0/0 无论到达任何主机

MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE。

猜你喜欢

转载自www.cnblogs.com/hao-ran/p/11493893.html