国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

docker系列--網(wǎng)絡(luò)模式解讀

xiaotianyi / 2740人閱讀

摘要:網(wǎng)絡(luò)主要是單機(jī)網(wǎng)絡(luò)和多主機(jī)通信模式。下面分別介紹一下的各個(gè)網(wǎng)絡(luò)模式。設(shè)計(jì)的網(wǎng)絡(luò)模型。是以對(duì)定義的元數(shù)據(jù)。用戶(hù)可以通過(guò)定義這樣的元數(shù)據(jù)來(lái)自定義和驅(qū)動(dòng)的行為。

前言

理解docker,主要從namesapce,cgroups,聯(lián)合文件,運(yùn)行時(shí)(runC),網(wǎng)絡(luò)幾個(gè)方面。接下來(lái)我們會(huì)花一些時(shí)間,分別介紹。

docker系列--namespace解讀

docker系列--cgroups解讀

docker系列--unionfs解讀

docker系列--runC解讀

docker系列--網(wǎng)絡(luò)模式解讀

namesapce主要是隔離作用,cgroups主要是資源限制,聯(lián)合文件主要用于鏡像分層存儲(chǔ)和管理,runC是運(yùn)行時(shí),遵循了oci接口,一般來(lái)說(shuō)基于libcontainer。網(wǎng)絡(luò)主要是docker單機(jī)網(wǎng)絡(luò)和多主機(jī)通信模式。

本機(jī)網(wǎng)絡(luò)模式

我們?cè)谑褂胐ocker run創(chuàng)建Docker容器時(shí),可以用--net選項(xiàng)指定容器的網(wǎng)絡(luò)模式,Docker有以下4種網(wǎng)絡(luò)模式:

host模式,使用--net=host指定。

container模式,使用--net=container:NAME_or_ID指定。

none模式,使用--net=none指定。

bridge模式,使用--net=bridge指定,默認(rèn)設(shè)置。

下面分別介紹一下Docker的各個(gè)網(wǎng)絡(luò)模式。

1)none:不為容器配置任何網(wǎng)絡(luò)功能。
在該模式下,需要以--net=none參數(shù)啟動(dòng)容器:

$ docker run --net=none -ti ubuntu:latest ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
    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

可以看到Docker容器僅有一lo環(huán)回接口,用戶(hù)使用--net=none啟動(dòng)容器之后,仍然可以手動(dòng)為容器配置網(wǎng)絡(luò)。

2)container:與另一個(gè)運(yùn)行中的容器共享Network Namespace,共享相同的網(wǎng)絡(luò)視圖。
舉個(gè)例子,首先以默認(rèn)網(wǎng)絡(luò)配置(bridge模式)啟動(dòng)一個(gè)容器,設(shè)置hostname為dockerNet,dns為8.8.4.4。

$ docker run -h dockerNet --dns 8.8.4.4 -tid ubuntu:latest bash
d25864df1a3bbdd40613552197bd1a965acaf7f3dcb2673d50c875d4a303a67f
$ docker exec -ti d25864df1a3b bash
root@dockerNet:/# ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
        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
1739: eth0:  mtu 1500 qdisc noqueue state UP group default
        link/ether 02:42:ac:11:00:01 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 scope global eth0
            valid_lft forever preferred_lft forever
        inet6 fe80::42:acff:fe11:1/64 scope link
            valid_lft forever preferred_lft forever
root@dockerNet:/# cat /etc/resolv.conf
nameserver 8.8.4.4
root@dockerNet:/# exit
exit

然后以--net=container:d25864df1a3b方式啟動(dòng)另一個(gè)容器:

$ docker run --net=container:d25864df1a3b -ti ubuntu:latest bash
root@dockerNet:/# ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
        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
1739: eth0:  mtu 1500 qdisc noqueue state UP group default
        link/ether 02:42:ac:11:00:01 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 scope global eth0
            valid_lft forever preferred_lft forever
        inet6 fe80::42:acff:fe11:1/64 scope link
            valid_lft forever preferred_lft forever
root@dockerNet:/# cat /etc/resolv.conf
nameserver 8.8.4.4

可以看到,使用--net=container:d25864df1a3b參數(shù)啟動(dòng)的容器,其IP地址、DNS、hostname都繼承了容器d25864df1a3b。實(shí)質(zhì)上兩個(gè)容器是共享同一個(gè)Network Namespace的,自然網(wǎng)絡(luò)配置也是完全相同。

3)host:與主機(jī)共享Root Network Namespace,容器有完整的權(quán)限可以操縱主機(jī)的協(xié)議棧、路由表和防火墻等,所以被認(rèn)為是不安全的。
相應(yīng)的,host模式啟動(dòng)時(shí)需要指定--net=host參數(shù)。舉個(gè)例子:

$ docker run -ti --net=host ubuntu:latest bash
root@darcy-HP:/# ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
        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 DOWN
group default qlen 1000
        link/ether 2c:41:38:9e:e4:d5 brd ff:ff:ff:ff:ff:ff
3: eth1:  mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
        link/ether 00:1b:21:cc:ee:6d brd ff:ff:ff:ff:ff:ff
        inet 10.110.52.38/22 brd 10.110.55.255 scope global eth1
            valid_lft forever preferred_lft forever
        inet6 fe80::21b:21ff:fecc:ee6d/64 scope link
            valid_lft forever preferred_lft forever
1642: docker0:  mtu 1500 qdisc noqueue state UP
group default
        link/ether 22:f2:f3:18:62:5d brd ff:ff:ff:ff:ff:ff
        inet 172.17.42.1/16 scope global docker0
            valid_lft forever preferred_lft forever
        inet6 fe80::348e:71ff:fe44:2d41/64 scope link
            valid_lft forever preferred_lft forever

host模式下,容器可以操縱主機(jī)的網(wǎng)絡(luò)配置,這是危險(xiǎn)的,除非萬(wàn)不得已,應(yīng)該盡可能避免使用host模式。

4)bridge:Docker設(shè)計(jì)的NAT網(wǎng)絡(luò)模型。
Docker daemon啟動(dòng)時(shí)會(huì)在主機(jī)創(chuàng)建一個(gè)Linux網(wǎng)橋(默認(rèn)為docker0,可通過(guò)-b參數(shù)手動(dòng)指定)。容器啟動(dòng)時(shí),Docker會(huì)創(chuàng)建一對(duì)veth pair(虛擬網(wǎng)絡(luò)接口)設(shè)備,veth設(shè)備的特點(diǎn)是成對(duì)存在,從一端進(jìn)入的數(shù)據(jù)會(huì)同時(shí)出現(xiàn)在另一端。Docker會(huì)將一端掛載到docker0網(wǎng)橋上,另一端放入容器的Network Namespace內(nèi),從而實(shí)現(xiàn)容器與主機(jī)通信的目的。bridge模式下的網(wǎng)絡(luò)拓?fù)鋱D如下圖所示。

在橋接模式下,Docker容器與Internet的通信,以及不同容器之間的通信,都是通過(guò)iptables規(guī)則控制的。
總之,Docker網(wǎng)絡(luò)的初始化動(dòng)作包括:創(chuàng)建docker0網(wǎng)橋、為docker0網(wǎng)橋新建子網(wǎng)及路由、創(chuàng)建相應(yīng)的iptables規(guī)則等。

跨主機(jī)通信模式

docker在跨主機(jī)通信方面一直比較弱。目前主要有容器網(wǎng)絡(luò)模型(CNM)和容器網(wǎng)絡(luò)接口(CNI),下面我們分別介紹。當(dāng)然k8s和docker之間通信采納的是CNI。

CNM模式

CNM是一個(gè)被 Docker 提出的規(guī)范。現(xiàn)在已經(jīng)被Cisco Contiv, Kuryr, Open Virtual Networking (OVN), Project Calico, VMware 和 Weave 這些公司和項(xiàng)目所采納。

Libnetwork是CNM的原生實(shí)現(xiàn)。它為Docker daemon和網(wǎng)絡(luò)驅(qū)動(dòng)程序之間提供了接口。網(wǎng)絡(luò)控制器負(fù)責(zé)將驅(qū)動(dòng)和一個(gè)網(wǎng)絡(luò)進(jìn)行對(duì)接。每個(gè)驅(qū)動(dòng)程序負(fù)責(zé)管理它所擁有的網(wǎng)絡(luò)以及為該網(wǎng)絡(luò)提供的各種服務(wù),例如IPAM等等。由多個(gè)驅(qū)動(dòng)支撐的多個(gè)網(wǎng)絡(luò)可以同時(shí)并存。網(wǎng)絡(luò)驅(qū)動(dòng)可以按提供方被劃分為原生驅(qū)動(dòng)(libnetwork內(nèi)置的或Docker支持的)或者遠(yuǎn)程驅(qū)動(dòng) (第三方插件)。原生驅(qū)動(dòng)包括 none, bridge, overlay 以及 MACvlan。驅(qū)動(dòng)也可以被按照適用范圍被劃分為本地(單主機(jī))的和全局的 (多主機(jī))。

『Network Sandbox』– 一個(gè)容器內(nèi)部的網(wǎng)絡(luò)棧。

『Endpoint』– 一個(gè)通常成對(duì)出現(xiàn)的網(wǎng)絡(luò)接口。一端在網(wǎng)絡(luò)容器內(nèi),另一端在網(wǎng)絡(luò)內(nèi)。 一個(gè)Endpoints可以加入一個(gè)網(wǎng)絡(luò)。一個(gè)容器可以有多個(gè)endpoints。

『Network』– 一個(gè)endpoints的集合。該集合內(nèi)的所有endpoints可以互聯(lián)互通。

最后,CNM還支持標(biāo)簽(labels)。Lable是以key-value對(duì)定義的元數(shù)據(jù)。用戶(hù)可以通過(guò)定義label這樣的元數(shù)據(jù)來(lái)自定義libnetwork和驅(qū)動(dòng)的行為。

API使用步驟

接著我們看下一般使用libnetwork的方法,具體的步驟一般是下面這樣的:

(1)獲取一個(gè)NetworkController對(duì)象用于進(jìn)行下面的操作。獲取對(duì)象的時(shí)候指定Driver。

(2)通過(guò)NetworkController對(duì)象的NewNetwork()建立一個(gè)網(wǎng)絡(luò)。這里最簡(jiǎn)單的理解就是現(xiàn)在我們有了一個(gè)bridge了。

(3)通過(guò)網(wǎng)絡(luò)的CreateEndpoint()在這個(gè)網(wǎng)絡(luò)上建立Endpoint。這里最簡(jiǎn)單的理解就是每建立一個(gè)Endpoint,我們上面建立的bridge上就會(huì)多出一個(gè)VIF口等著虛擬機(jī)或者Sandbox連上來(lái)。假設(shè)這里使用的是veth,則veth的一頭目前接在了bridge中,另一頭還暴露在外面。

(4) 調(diào)用上面建立的Endpoint的Join方法,提供容器信息,于是libnetwork的代碼就會(huì)建立一個(gè)Sandbox對(duì)象(一般這里的Sandbox就是容器的namespace,所以不會(huì)重復(fù)建立),然后將第三步建立的veth的一頭接入到這個(gè)Sandbox中,也就是將其放到Sandbox的namespace中。

(5)當(dāng)Sandbox的生命周期結(jié)束時(shí),調(diào)用Endpoint的Leave方法使其從這個(gè)Network中解綁。簡(jiǎn)單的說(shuō)就是將veth從Sandbox的namespace中拿出來(lái)回到物理機(jī)上。

(6)如果一個(gè)Endpoint無(wú)用了,則可以調(diào)用Delete方法刪除。

(7)如果一個(gè)Network無(wú)用了,則可以調(diào)用Delete方法刪除。

CNI模式

CNI(Conteinre Network Interface) 是 google 和 CoreOS 主導(dǎo)制定的容器網(wǎng)絡(luò)標(biāo)準(zhǔn),它 本身并不是實(shí)現(xiàn)或者代碼,可以理解成一個(gè)協(xié)議。這個(gè)標(biāo)準(zhǔn)是在 rkt 網(wǎng)絡(luò)提議 的基礎(chǔ)上發(fā)展起來(lái)的,綜合考慮了靈活性、擴(kuò)展性、ip 分配、多網(wǎng)卡等因素。

這個(gè)協(xié)議連接了兩個(gè)組件:容器管理系統(tǒng)和網(wǎng)絡(luò)插件。它們之間通過(guò) JSON 格式的文件進(jìn)行通信,實(shí)現(xiàn)容器的網(wǎng)絡(luò)功能。具體的事情都是插件來(lái)實(shí)現(xiàn)的,包括:創(chuàng)建容器網(wǎng)絡(luò)空間(network namespace)、把網(wǎng)絡(luò)接口(interface)放到對(duì)應(yīng)的網(wǎng)絡(luò)空間、給網(wǎng)絡(luò)接口分配 IP 等等。

CNI本身實(shí)現(xiàn)了一些基本的插件(https://github.com/containern..., 比如bridge、ipvlan、macvlan、loopback、vlan等網(wǎng)絡(luò)接口管理插件,還有dhcp、host-local等IP管理插件,并且主流的container網(wǎng)絡(luò)解決方案都有對(duì)應(yīng)CNI的支持能力,比如Flannel、Calico、Weave、Contiv、SR-IOV、Amazon ECS CNI Plugins等。

具體Flannel的分析可以閱讀我之前的文章(k8s與網(wǎng)絡(luò)--Flannel解讀)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/32709.html

相關(guān)文章

  • docker系列--網(wǎng)絡(luò)模式解讀

    摘要:網(wǎng)絡(luò)主要是單機(jī)網(wǎng)絡(luò)和多主機(jī)通信模式。下面分別介紹一下的各個(gè)網(wǎng)絡(luò)模式。設(shè)計(jì)的網(wǎng)絡(luò)模型。是以對(duì)定義的元數(shù)據(jù)。用戶(hù)可以通過(guò)定義這樣的元數(shù)據(jù)來(lái)自定義和驅(qū)動(dòng)的行為。 前言 理解docker,主要從namesapce,cgroups,聯(lián)合文件,運(yùn)行時(shí)(runC),網(wǎng)絡(luò)幾個(gè)方面。接下來(lái)我們會(huì)花一些時(shí)間,分別介紹。 docker系列--namespace解讀 docker系列--cgroups解讀 ...

    haitiancoder 評(píng)論0 收藏0
  • docker系列--網(wǎng)絡(luò)模式解讀

    摘要:網(wǎng)絡(luò)主要是單機(jī)網(wǎng)絡(luò)和多主機(jī)通信模式。下面分別介紹一下的各個(gè)網(wǎng)絡(luò)模式。設(shè)計(jì)的網(wǎng)絡(luò)模型。是以對(duì)定義的元數(shù)據(jù)。用戶(hù)可以通過(guò)定義這樣的元數(shù)據(jù)來(lái)自定義和驅(qū)動(dòng)的行為。 前言 理解docker,主要從namesapce,cgroups,聯(lián)合文件,運(yùn)行時(shí)(runC),網(wǎng)絡(luò)幾個(gè)方面。接下來(lái)我們會(huì)花一些時(shí)間,分別介紹。 docker系列--namespace解讀 docker系列--cgroups解讀 ...

    zollero 評(píng)論0 收藏0
  • docker系列--cgroups解讀

    摘要:系列解讀系列解讀系列解讀系列解讀系列網(wǎng)絡(luò)模式解讀主要是隔離作用,主要是資源限制,聯(lián)合文件主要用于鏡像分層存儲(chǔ)和管理,是運(yùn)行時(shí),遵循了接口,一般來(lái)說(shuō)基于。凍結(jié)暫停中的進(jìn)程。配置時(shí)間都以微秒為單位,文件名中用表示。 前言 理解docker,主要從namesapce,cgroups,聯(lián)合文件,運(yùn)行時(shí)(runC),網(wǎng)絡(luò)幾個(gè)方面。接下來(lái)我們會(huì)花一些時(shí)間,分別介紹。 docker系列--name...

    岳光 評(píng)論0 收藏0
  • docker系列--cgroups解讀

    摘要:系列解讀系列解讀系列解讀系列解讀系列網(wǎng)絡(luò)模式解讀主要是隔離作用,主要是資源限制,聯(lián)合文件主要用于鏡像分層存儲(chǔ)和管理,是運(yùn)行時(shí),遵循了接口,一般來(lái)說(shuō)基于。凍結(jié)暫停中的進(jìn)程。配置時(shí)間都以微秒為單位,文件名中用表示。 前言 理解docker,主要從namesapce,cgroups,聯(lián)合文件,運(yùn)行時(shí)(runC),網(wǎng)絡(luò)幾個(gè)方面。接下來(lái)我們會(huì)花一些時(shí)間,分別介紹。 docker系列--name...

    cikenerd 評(píng)論0 收藏0
  • docker系列--cgroups解讀

    摘要:系列解讀系列解讀系列解讀系列解讀系列網(wǎng)絡(luò)模式解讀主要是隔離作用,主要是資源限制,聯(lián)合文件主要用于鏡像分層存儲(chǔ)和管理,是運(yùn)行時(shí),遵循了接口,一般來(lái)說(shuō)基于。凍結(jié)暫停中的進(jìn)程。配置時(shí)間都以微秒為單位,文件名中用表示。 前言 理解docker,主要從namesapce,cgroups,聯(lián)合文件,運(yùn)行時(shí)(runC),網(wǎng)絡(luò)幾個(gè)方面。接下來(lái)我們會(huì)花一些時(shí)間,分別介紹。 docker系列--name...

    alogy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<