容器虛擬化網絡概述

六種名稱空間:

UTS:主機名和域名docker

User:用戶網絡

Mount掛載文件繫系統oop

IPC:進程間通訊code

pid:進程id接口

Net:網絡進程

網絡名稱空間主要實現「協議棧」和「網絡設備」的隔離,一個設備能夠單獨關聯給一個單獨的名稱空間使用,其餘名稱空間就看不到這個設備了,這使得每一個名稱空間均可以配置一個單獨的ip與外界通訊,ip

可是若是網絡設備不夠爲網絡設備使用了,咱們的內核能夠模擬出來一個交換機,並模擬一對接口,一個接到一個名稱空間,一個接到交換機,get

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,既能夠扮演交換設備,又能夠扮演網卡設備,io

host表示讓容器使用宿主機的網絡名稱空間

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。

相關文章
相關標籤/搜索