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

資訊專欄INFORMATION COLUMN

Docker網(wǎng)絡(luò)

Euphoria / 2546人閱讀

摘要:容器與主機(jī)共享同一,共享同一套網(wǎng)絡(luò)協(xié)議棧路由表及規(guī)則等。基本網(wǎng)絡(luò)配置平臺(tái)下,容器網(wǎng)絡(luò)資源通過內(nèi)核的機(jī)制實(shí)現(xiàn)隔離,不同的有各自的網(wǎng)絡(luò)設(shè)備協(xié)議棧路由表防火墻規(guī)則等,反之,同一下的進(jìn)程共享同一網(wǎng)絡(luò)視圖。設(shè)計(jì)的網(wǎng)絡(luò)模型。

整理自《Docker進(jìn)階與實(shí)戰(zhàn)》

Docker網(wǎng)絡(luò)現(xiàn)狀

為了解決容器網(wǎng)絡(luò)性能低下、功能不足的問題,Docker啟動(dòng)了子項(xiàng)目“Libnetwork”。Libnetwork提出了新的容器網(wǎng)絡(luò)模型(Container Network Model,簡(jiǎn)稱CNM),定義了標(biāo)準(zhǔn)的API用于為容器配置網(wǎng)絡(luò),其底層可以適配各種網(wǎng)絡(luò)驅(qū)動(dòng)(如圖Docker-network01所示)。CNM有三個(gè):

沙盒
沙盒是一個(gè)隔離的網(wǎng)絡(luò)運(yùn)行環(huán)境,保存了容器網(wǎng)絡(luò)棧的配置,包括了對(duì)網(wǎng)絡(luò)接口、路由表和DNS配置的管理。在Linux平臺(tái)上,沙盒是用Linux Network Namespace實(shí)現(xiàn)的,在其他平臺(tái)上可能是不同的概念,如FreeBSD Jail。一個(gè)沙盒可以包括來自多個(gè)網(wǎng)絡(luò)的多個(gè)Endpoint(端點(diǎn))。

Endpoint
Endpoint將沙盒加入一個(gè)網(wǎng)絡(luò),Endpoint的實(shí)現(xiàn)可以是一對(duì)veth pair或者OVS內(nèi)部端口,當(dāng)前的Libnetwork使用的是veth pair。一個(gè)Endpoint只能隸屬于一個(gè)沙盒及一個(gè)網(wǎng)絡(luò)。通過給沙盒增加多個(gè)Endpoint可以將一個(gè)沙盒加入多個(gè)網(wǎng)絡(luò)。

網(wǎng)絡(luò)
網(wǎng)絡(luò)包括一組能互相通信的Endpoint。網(wǎng)絡(luò)的實(shí)現(xiàn)可以是Linux bridge、vlan等。

從CNM的概念角度講,Libnetwork的出現(xiàn)使得Docker具備了跨主機(jī)多子網(wǎng)的能力,同一個(gè)子網(wǎng)內(nèi)的不同容器可以運(yùn)行在不同主機(jī)上。比如,同屬于192.168.0.0/24子網(wǎng)IP地址分別為192.168.0.1和192.168.0.2的容器可以位于不同的主機(jī)上且可以直接通信,而持有IP 192.168.1.1的容器即使與IP為192.168.0.1的容器處于同一主機(jī)也不能互通。

Libnetwork已經(jīng)實(shí)現(xiàn)了五種驅(qū)動(dòng)(driver):

bridge
Docker默認(rèn)的容器網(wǎng)絡(luò)驅(qū)動(dòng)。Container通過一對(duì)veth pair連接到docker0網(wǎng)橋上,由Docker為容器動(dòng)態(tài)分配IP及配置路由、防火墻規(guī)則等。

host
容器與主機(jī)共享同一Network Namespace,共享同一套網(wǎng)絡(luò)協(xié)議棧、路由表及iptables規(guī)則等。容器與主機(jī)看到的是相同的網(wǎng)絡(luò)視圖。

null
容器內(nèi)網(wǎng)絡(luò)配置為空,需要用戶手動(dòng)為容器配置網(wǎng)絡(luò)接口及路由等。

remote
Docker網(wǎng)絡(luò)插件的實(shí)現(xiàn)。Remote driver使得Libnetwork可以通過HTTP RESTful API對(duì)接第三方的網(wǎng)絡(luò)方案,類似SocketPlane的SDN方案只要實(shí)現(xiàn)了約定的HTTP URL處理函數(shù)及底層的網(wǎng)絡(luò)接口配置方法,就可以替換Docker原生的網(wǎng)絡(luò)實(shí)現(xiàn)。

overlay
Docker原生的跨主機(jī)多子網(wǎng)網(wǎng)絡(luò)方案。主要通過使用Linux bridge和vxlan隧道實(shí)現(xiàn),底層通過類似于etcd或consul的KV存儲(chǔ)系統(tǒng)實(shí)現(xiàn)多機(jī)的信息同步。overlay驅(qū)動(dòng)當(dāng)前還未正式發(fā)布,但開發(fā)者可以通過編譯實(shí)驗(yàn)版的Docker來嘗試使用,Docker實(shí)驗(yàn)版同時(shí)提供了額外的network和service子命令來進(jìn)行更靈活的網(wǎng)絡(luò)操作,不過,需要內(nèi)核版本>=3.16才可正常使用。

以上五種驅(qū)動(dòng)已經(jīng)隨Docker 1.8一同發(fā)布。

基本網(wǎng)絡(luò)配置

Linux平臺(tái)下,Docker容器網(wǎng)絡(luò)資源通過內(nèi)核的Network Namespace機(jī)制實(shí)現(xiàn)隔離,不同的Network Namespace有各自的網(wǎng)絡(luò)設(shè)備、協(xié)議棧、路由表、防火墻規(guī)則等,反之,同一Network Namespace下的進(jìn)程共享同一網(wǎng)絡(luò)視圖。通過對(duì)Network Namespace的靈活操縱,Docker提供了五種容器網(wǎng)絡(luò)模式。

none

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

$ docker run --net=none -ti ubuntu:latest ip addr show

使用-–net=none啟動(dòng)容器之后,仍然可以手動(dòng)為容器配置網(wǎng)絡(luò)。

container

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

$ docker run -h dockerNet --dns 8.8.4.4 -tid ubuntu:latest bash
964286222ab53c67b2d6fb1882b2364c745be718a4a13530b016fe51b4968054

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

$ docker run --net=container:96428 -ti ubuntu:latest bash

進(jìn)入容器,通過ip addr show命令可以發(fā)現(xiàn)兩個(gè)容器的IP地址、DNS、hostname都是相同的。實(shí)質(zhì)上兩個(gè)容器是共享同一個(gè)Network Namespace的,網(wǎng)絡(luò)配置自然也是完全相同的。

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

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

bridge

Docker設(shè)計(jì)的NAT網(wǎng)絡(luò)模型。
Docker daemon啟動(dòng)時(shí)會(huì)在主機(jī)創(chuàng)建一個(gè)Linux網(wǎng)橋(默認(rèn)為docker0,可通過-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-network02所示:

在橋接模式下,Docker容器與Internet的通信,以及不同容器之間的通信,都是通過iptables規(guī)則控制的。總之,Docker網(wǎng)絡(luò)的初始化動(dòng)作包括:創(chuàng)建docker0網(wǎng)橋、為docker0網(wǎng)橋新建子網(wǎng)及路由、創(chuàng)建相應(yīng)的iptables規(guī)則等。Bridge模式是Docker默認(rèn)的容器運(yùn)行模式,以bridge模式啟動(dòng)的容器,默認(rèn)會(huì)從172.17.42.1/16子網(wǎng)內(nèi)分配IP。

overlay

Docker原生的跨主機(jī)多子網(wǎng)模型。
overlay網(wǎng)絡(luò)模型比較復(fù)雜,底層需要類似consul或etcd的KV存儲(chǔ)系統(tǒng)進(jìn)行消息同步,核心是通過Linux網(wǎng)橋與vxlan隧道實(shí)現(xiàn)跨主機(jī)劃分子網(wǎng)。如圖Docker-network03所示,每創(chuàng)建一個(gè)網(wǎng)絡(luò),Docker會(huì)在主機(jī)上創(chuàng)建一個(gè)多帶帶的沙盒,沙盒的實(shí)現(xiàn)實(shí)質(zhì)上是一個(gè)Network Namespace。在沙盒中,Docker會(huì)創(chuàng)建名為br0的網(wǎng)橋,并在網(wǎng)橋上增加一個(gè)vxlan接口,每個(gè)網(wǎng)絡(luò)占用一個(gè)vxlan ID,當(dāng)前Docker創(chuàng)建vxlan隧道的ID范圍為256~1000,因而最多可以創(chuàng)建745個(gè)網(wǎng)絡(luò)。當(dāng)添加一個(gè)容器到某一個(gè)網(wǎng)絡(luò)上時(shí),Docker會(huì)創(chuàng)建一對(duì)veth網(wǎng)卡設(shè)備,一端連接到此網(wǎng)絡(luò)相關(guān)沙盒內(nèi)的br0網(wǎng)橋上,另一端放入容器的沙盒內(nèi),并設(shè)置br0的IP地址作為容器內(nèi)路由默認(rèn)的網(wǎng)關(guān)地址,從而實(shí)現(xiàn)容器加入網(wǎng)絡(luò)的目的。

以圖Docker-network03為例,容器1和容器4同屬一個(gè)網(wǎng)絡(luò),容器1需要通過256號(hào)vxlan隧道訪問另一臺(tái)主機(jī)的容器4。Docker通過vxlan和Linux網(wǎng)橋?qū)崿F(xiàn)了跨主機(jī)的虛擬子網(wǎng)功能。
使用shell命令查看overlay網(wǎng)絡(luò)拓?fù)?/p>

# 創(chuàng)建網(wǎng)絡(luò)
$ docker network create -d overlay dev
# 顯示網(wǎng)絡(luò)列表
$ docker network ls
9101d162c6db bridge bridge
fcd0327f5104 dev overlay
f5f9c8723777 none null
eb81445767e1 host host
# fcd0327f5104實(shí)質(zhì)上是dev網(wǎng)絡(luò)的網(wǎng)絡(luò)ID,創(chuàng)建軟鏈接的目的是為了能夠使用ip命令操縱名字空間。
# ln -s /var/run/docker/netns/fcd0327f5104 /var/run/netns/fcd0327f5104
# 查看端口詳細(xì)信息
$ ip netns exec fcd0327f5104 ip addr show
# 查看網(wǎng)橋信息
$ ip netns exec fcd0327f5104 brctl show
# 查看vxlan詳細(xì)信息
$ ip netns exec fcd0327f5104 ip -d link show vxlan1

綜上所述,Docker的整個(gè)網(wǎng)絡(luò)模型,是建立在Network Namespace、Linux網(wǎng)橋、vxlan隧道、iptables規(guī)則之上的,也正是由于過于依賴網(wǎng)橋與iptables,導(dǎo)致Docker的網(wǎng)絡(luò)效率不高。

Docker網(wǎng)絡(luò)相關(guān)參數(shù)

關(guān)于Docker網(wǎng)絡(luò)相關(guān)參數(shù)請(qǐng)參考“Docker(1.11.1)命令”。

待續(xù)···

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

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

相關(guān)文章

  • Docker網(wǎng)絡(luò)解讀

    摘要:在版本之后,引入了一套子命令來管理網(wǎng)絡(luò)。具體來說,網(wǎng)絡(luò)是通過一個(gè)叫的東西來進(jìn)行管理的,用命令對(duì)網(wǎng)絡(luò)進(jìn)行操作實(shí)際上是與進(jìn)行交互。內(nèi)置有五種網(wǎng)絡(luò)驅(qū)動(dòng),分別是驅(qū)動(dòng)驅(qū)動(dòng)驅(qū)動(dòng)驅(qū)動(dòng)驅(qū)動(dòng)。這些網(wǎng)絡(luò)驅(qū)動(dòng)為提供了多種網(wǎng)絡(luò)模式。 libnetwork docker在1.9版本之后,引入了一套docker network子命令來管理docker網(wǎng)絡(luò)。這允許用戶可以根據(jù)他們應(yīng)用的拓?fù)浣Y(jié)構(gòu)創(chuàng)建虛擬網(wǎng)絡(luò)并將容器接...

    Drummor 評(píng)論0 收藏0
  • [譯] Docker如何使用Linux iptables 和 Interfaces管理容器網(wǎng)絡(luò)

    摘要:使用相同網(wǎng)橋的容器有自己的子網(wǎng),并且可以相互通信默認(rèn)情況下。在虛擬接口上來自主機(jī)的流量捕獲將顯示容器在特定子網(wǎng)上發(fā)送的所有流量規(guī)則用于阻止不同的網(wǎng)絡(luò)有時(shí)網(wǎng)絡(luò)中的主機(jī)使用過濾器表進(jìn)行通信。 我使用docker至今已有一段時(shí)間了,與絕大部分的人一樣,我被docker強(qiáng)大的功能和易用性深深的折服。簡(jiǎn)單方便是docker的核心之一,它強(qiáng)大的功能被抽象成了非常簡(jiǎn)單的命令。當(dāng)我在使用和學(xué)習(xí)dock...

    Prasanta 評(píng)論0 收藏0
  • Docker 快速上手指南

    摘要:型網(wǎng)絡(luò)這是容器的默認(rèn)網(wǎng)絡(luò)類型,網(wǎng)橋模式意味著容器間可以互相通信,而對(duì)外的通信需要借助宿主機(jī),這一形式通常表現(xiàn)為端口號(hào)的映射。 以下記錄 Docker 中的常用操作、指令,使得大家能夠快速地使用 Docker。 為什使用 Docker? 為什么要使用 Docker?就個(gè)人而言,Docker 能提供的最大便利在于這種技術(shù)面對(duì)程序環(huán)境遷移時(shí)所表現(xiàn)的卓越性。 這種性能使得我們不必在分享代碼或項(xiàng)...

    derek_334892 評(píng)論0 收藏0
  • 02-Docker新手入門網(wǎng)絡(luò)

    摘要:基礎(chǔ)入門之網(wǎng)絡(luò)容器篇本篇文章來自于官方基于文檔的指南學(xué)習(xí)整理如果英語好的同學(xué)其實(shí)可以看文檔,更加詳細(xì)。網(wǎng)絡(luò)篇結(jié)束下面是我在學(xué)習(xí)途中遇到的一些問題而尋找的答案。 基礎(chǔ)入門之網(wǎng)絡(luò)容器篇 Author:zhaojunlike@ Email:zhaojunlike@gmail.com 本篇文章來自于官方基于文檔的指南學(xué)習(xí)整理 如果英語好的同學(xué)其實(shí)可以看文檔,更加詳細(xì)。傳送門 Step1:...

    王笑朝 評(píng)論0 收藏0
  • Docker Swarm介紹

    摘要:后續(xù)將其他節(jié)點(diǎn)加入集群都會(huì)用到這個(gè)值將節(jié)點(diǎn)加入集群查看節(jié)點(diǎn)信息相關(guān)命令創(chuàng)建服務(wù)更新服務(wù)刪除服務(wù)減少服務(wù)實(shí)例增加服務(wù)實(shí)例查看所有服務(wù)查看服務(wù)的容器狀態(tài)查看服務(wù)的詳細(xì)信息。前言本篇是Docker第十三篇,Docker的使用至此就介紹完成,接下來繼續(xù)Kubernetes。Docker系列文章:為什么要學(xué)習(xí)DockerDocker基本概念Docker鏡像基本原理Docker容器數(shù)據(jù)卷Dockerfi...

    番茄西紅柿 評(píng)論0 收藏2637

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

0條評(píng)論

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