Docker網路解決方案-Weave部署記錄
阿新 • • 發佈:2020-10-09
前面說到了Flannel的部署,今天這裡說下Docker跨主機容器間網路通訊的另一個工具Weave的使用。當容器分佈在多個不同的主機上時,這些容器之間的相互通訊變得複雜起來。容器在不同主機之間都使用的是自己的私有IP地址,不同主機的容器之間進行通訊需要將主機的埠對映到容器的埠上,而且IP地址需要使用主機的IP地址。Weave正是為了解決這個問題而出現的,它把不同主機上容器互相連線的網路虛擬成一個類似於本地網路的網路。
如果瞭解SDN技術或者部署過OpenStack的網路模組(Neutron)的話,這裡通過Weave構建的網路與它們比較類似。它是在一個網路的基礎上,構建了一層由軟體定義的網路層,這個網路看起來就像是一個本地的區域網,但是實際上它的底層通過另一個網路進行通訊。這個網路可能會比實際物理區域網的可靠性要差一些,但是從可用性角度來看,它帶來了很大的便利性:可以在位於不同位置的節點之間通訊,而好像它們在一個地方一樣。也可以把這種網路想象成一個類似於×××似的東西。
Weave介紹
Weave是Github上一個比較熱門的Docker容器網路方案,具有非常良好的易用性且功能強大。Weave的框架它包含了兩大主要元件: 1)Weave:使用者態的shell指令碼,用於安裝Weave,將container連線到Weave虛擬網路。併為它們分配IP。 2)Weaver:運行於container內,每個Weave網路內的主機都要執行,是一個Go語言實現的虛擬網路路由器。不同主機之間的網路通訊依賴於Weaver路由。 Weave通過建立虛擬網路使Docker容器能夠跨主機通訊並能夠自動相互發現。 通過weave網路,由多個容器構成的基於微服務架構的應用可以執行在任何地方:主機,多主機,雲上或者資料中心。 應用程式使用網路就好像容器是插在同一個網路交換機上一樣,不需要配置埠對映,連線等。 在weave網路中,使用應用容器提供的服務可以暴露給外部,而不用管它們執行在何處。類似地,現存的內部系統也可以接受來自於應用容器的請求,而不管容器運行於何處。 一個Weave網路由一系列的'peers'構成----這些weave路由器存在於不同的主機上。每個peer都由一個名字,這個名字在重啟之後保持不變.這個名字便於使用者理解和區分日誌資訊。 每個peer在每次執行時都會有一個不同的唯一識別符號(UID).對於路由器而言,這些識別符號不是透明的,儘管名字預設是路由器的MAC地址。 Weave路由器之間建立起TCP連線,通過這個連線進行心跳握手和拓撲資訊交換,這些連線可以通過配置進行加密。 peers之間還會建立UDP連線,也可以進行加密,這些UDP連線用於網路包的封裝,這些連線是雙工的而且可以穿越防火牆。 Weave網路在主機上建立一個網橋,每個容器通過vethpari連線到網橋上,容器由使用者或者weave網路的IPADM分配IP地址。
選擇Weave的原因?
1)無憂的配置 Weave網路能夠簡化容器網路的配置。因為weave網路中的容器使用標準的埠提供服務(如,MySQL預設使用3306),管理微服務是十分直接簡單的。 每個容器都可以通過域名來與另外的容器通訊,也可以直接通訊而無需使用NAT,也不需要使用埠對映或者複雜的linking. 部署weave容器網路的最大的好處是無需修改你的應用程式碼。
2)服務發現 Weave網路通過在每個節點上啟動一個"微型的DNS"服務來實現服務發現。你只需要給你的容器起個名字就可以使用服務發現了,還可以在多個同名的容器上提供負載均衡的功能。 3)不需要額外的叢集儲存 所有其它的Docker網路外掛,包括Docker自帶的"overlay"驅動,在你真正能使用它們之間,都需要安裝額外的叢集儲存----一個像Consul或者Zookeepr那樣的中心資料庫.除了安裝,維護和管理困難外,甚至Docker主機需要始終與叢集儲存保持連線,如果你斷開了與其的連線,儘管很短暫,你也不能夠啟動和停止任何容器了。 Weave網路是與Docker網路外掛捆綁在一起的,這意味著你可以馬上就使用它,而且可以在網路連接出現問題時依舊啟動和停止容器。 關於更多WeaveDocker外掛的介紹,請檢視WeaveNetworkPlugin如何工作. 4)在部分連線情況下進行操作 Weave網路能夠在節點間轉發流量,它甚至能夠在網狀網路部分連線的情況下工作。這意味著你可以在混合了傳統系統和容器化的應用的環境中使用Weave網路來保持通訊。 5)Weave網路很快 Weave網路自動在兩個節點之間選擇最快的路徑,提供接近本地網路的吞吐量和延遲,而且這不需要你的干預。 關於FastDatapath如何工作請參考HowFastDatapathWorks. 6)組播支援 Weave網路完全支援組播地址和路徑。資料可以被髮送給一個組播地址,資料的副本可以被自動地廣播。 7)NAT轉換 使用Weave網路,部署你的應用---無論是點對點的檔案共享,基於ip的voice或者其它應用,你都可以充分利用內建的NAT轉換。通過Weave網路,你的app將會是可移值的,容器化的, 加上它對網路標準化的處理,將又會使你少關心一件事。 8)與任何框架整合:Kubernetes,Mesos,AmazonECS,… 如果你想為所有的框架使用一個工具,Weave網路是一個好的選擇。比如:除了作為Docker外掛使用,你還可以將其作為一個Kubernetes外掛plugin.你還可以在AmazonECS,Mesos和 Marathon中使用它.
weave網路通訊模型
weave通過在docker叢集的每個主機上啟動虛擬的路由器,將主機作為路由器,形成互聯互通的網路拓撲,在此基礎上,實現容器的跨主機通訊。其主機網路拓撲參見下圖:
如上圖所示,在每一個部署Docker的主機(可能是物理機也可能是虛擬機器)上都部署有一個W(即weaverouter,它本身也可以以一個容器的形式部署)。 weave網路是由這些weaverouters組成的對等端點(peer)構成,並且可以通過weave命令列定製網路拓撲。 每個部署了weaverouter的主機之間都會建立TCP和UDP兩個連線,保證weaverouter之間控制面流量和資料面流量的通過。控制面由weaverouters之間建立的TCP連線構成,通過它進行握手和拓撲關係資訊的交換通訊。控制面的通訊可以被配置為加密通訊。而資料面由weaverouters之間建立的UDP連線構成,這些連線大部分都會加密。這些連線都是全雙工的,並且可以穿越防火牆。 當容器通過weave進行跨主機通訊時,其網路通訊模型可以參考下圖:
從上面的網路模型圖中可以看出,對每一個weave網路中的容器,weave都會建立一個網橋,並且在網橋和每個容器之間建立一個vethpair,一端作為容器網絡卡加入到容器的網路名稱空間中,併為容器網絡卡配置ip和相應的掩碼,一端連線在網橋上,最終通過宿主機上weaverouter將流量轉發到對端主機上。 其基本過程如下: 1)容器流量通過vethpair到達宿主機上weaverouter網橋上。 2)weaverouter在混雜模式下使用pcap在網橋上截獲網路資料包,並排除由核心直接通過網橋轉發的資料流量,例如本子網內部、本地容器之間的資料以及宿主機和本地容 器之間的流量。捕獲的包通過UDP轉發到所其他主機的weaverouter端。 3)在接收端,weaverouter通過pcap將包注入到網橋上的介面,通過網橋的上的vethpair,將流量分發到容器的網絡卡上。 weave預設基於UDP承載容器之間的資料包,並且可以完全自定義整個叢集的網路拓撲,但從效能和使用角度來看,還是有比較大的缺陷的: 1)weave自定義容器資料包的封包解包方式,不夠通用,傳輸效率比較低,效能上的損失也比較大。 2)叢集配置比較負載,需要通過weave命令列來手工構建網路拓撲,在大規模叢集的情況下,加重了管理員的負擔。
Weave的安裝與啟動
1)直接從github下載二進位制檔案安裝。 [[email protected]~]#wget-O/usr/local/bin/weavehttps://raw.githubusercontent.com/zettio/weave/master/weave [[email protected]~]#chmoda+x/usr/local/bin/weave 2)啟動weave路由器,這個路由器其實也是以容器的形式執行的。(前提是已經啟動了docker服務程序) [[email protected]~]#weavelaunchweave[--no-detect-tls] Tryingtopullrepositorydocker.io/weaveworks/weave... latest:Pullingfromdocker.io/weaveworks/weave 605ce1bd3f31:Pullcomplete 158c8654e528:Pullcomplete bfc39f563ffa:Pullcomplete 8646fd58e941:Pullcomplete 05f4261dc16c:Pullcomplete 96ad94aa18d5:Pullcomplete ....... 3)檢視映象,可以發現上面下載的weave路由容器映象 [[email protected]~]#dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE docker.io/weaveworks/weaveexeclateste85f0baea6a812hoursago74.22MB docker.io/weaveworks/weavelatestcbfe14a1271112hoursago59.46MB docker.io/weaveworks/weavedblatest9d95756f49476daysago282B 4)此時會發現有兩個網橋,一個是Docker預設生成的,另一個是Weave生成的。 [[email protected]~]#brctlshow#yum安裝bridge-utils工具後,就會出現brctl命令 bridgenamebridgeidSTPenabledinterfaces docker08000.0242eb16438dno weave8000.000000000000novethwe-bridge 檢視執行的容器,發現weave路由容器已經自動執行 [[email protected]~]#dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES f30fe9258e1fweaveworks/weave:latest"/home/weave/weaver-"AboutaminuteagoUpAboutaminuteweave weave關閉 [[email protected]~]#weavestop 或者直接關閉weave容器 [[email protected]~]#dockerstopweave [[email protected]~]#dockerrmweave weave命令幫助 [[email protected]~]#weave--help Usage: weave--help|help setup version weavelaunch[--password<pass>][--trusted-subnets<cidr>,...] [--host<ip_address>] [--name<mac>][--nickname<nickname>] [--no-restart][--resume][--no-discovery][--no-dns] [--ipalloc-init<mode>] [--ipalloc-range<cidr>[--ipalloc-default-subnet<cidr>]] [--plugin=false][--proxy=false] [-H<endpoint>][--without-dns][--no-multicast-route] [--no-rewrite-hosts][--no-default-ipalloc] [--hostname-from-label<labelkey>] [--hostname-match<regexp>] [--hostname-replacement<replacement>] [--rewrite-inspect] [--log-level=debug|info|warning|error] <peer>... weaveprime weaveenv[--restore] config dns-args weaveconnect[--replace][<peer>...] forget<peer>... weaveattach[--without-dns][--rewrite-hosts][--no-multicast-route] [<addr>...]<container_id> detach[<addr>...]<container_id> weaveexpose[<addr>...][-h<fqdn>] hide[<addr>...] weavedns-add[<ip_address>...]<container_id>[-h<fqdn>]| <ip_address>...-h<fqdn> dns-remove[<ip_address>...]<container_id>[-h<fqdn>]| <ip_address>...-h<fqdn> dns-lookup<unqualified_name> weavestatus[targets|connections|peers|dns|ipam] report[-f<format>] ps[<container_id>...] weavestop weavereset[--force] rmpeer<peer_id>... where<peer>=<ip_address_or_fqdn>[:<port>] <cidr>=<ip_address>/<routing_prefix_length> <addr>=[ip:]<cidr>|net:<cidr>|net:default <endpoint>=[tcp://][<ip_address>]:<port>|[unix://]/path/to/socket <peer_id>=<nickname>|<weaveinternalpeerID> <mode>=consensus[=<count>]|seed=<mac>,...|observer 接下來就可以執行應用容器,使用weave提供的網路功能了。
Weave的應用示例
1)機器環境準備: node110.10.172.201 node210.10.172.202 node1宿主機上的應用容器my-test1:192.168.0.2/24 node2宿主機上的應用容器my-test2:192.168.0.3/24 兩臺機上均安裝Docker及Weave,並均啟動好Weave路由容器(安裝及啟動操作如上)。最好關閉兩臺機器的防火牆!(如果開啟防火牆,需要開放6783埠) 2)在兩臺機上均啟動一個應用容器,有以下兩種方式: 第一種方式:可以直接使用weaverun命令; [[email protected]~]#weaverun192.168.0.2/24-itddocker.io/centos/bin/bash The'weaverun'commandhasbeenremovedasofWeaveNetversion2.0 Pleaseseereleasenotesforfurtherinformation 由上可知,weave在2.0版本之後就沒有“weaverun”這個命令了,所以還是使用下面的第二種方式 第二種方式:先使用dockerrun啟動好容器,然後使用weaveattach命令給容器繫結IP地址 在node1機器上啟動第一個容器my-test1,容器ip繫結為192.168.0.2 [[email protected]~]#dockerrun-itd--name=my-test1docker.io/centos/bin/bash 02b376c8c34c7a099b391c58974db638315d52673d27360c8ab031ee0fd23d70 [[email protected]~]#weaveattach192.168.0.2/24my-test1#使用容器名稱或容器id都可以;即給my-test1容器繫結ip為192.168.0.2 192.168.0.2 [[email protected]~]#dockerexec-timy-test1/bin/bash [[email protected]/]#ifconfig#執行安裝yuminstall-ynet-tools,就會出現ifconfig命令 eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet172.17.0.2netmask255.255.0.0broadcast0.0.0.0 inet6fe80::42:acff:fe11:2prefixlen64scopeid0x20<link> ether02:42:ac:11:00:02txqueuelen0(Ethernet) RXpackets4302bytes13338144(12.7MiB) RXerrors0dropped0overruns0frame0 TXpackets4161bytes283007(276.3KiB) TXerrors0dropped0overruns0carrier0collisions0 ethwe:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1376 inet192.168.0.2netmask255.255.255.0broadcast192.168.0.255 inet6fe80::64f9:5bff:feb1:3764prefixlen64scopeid0x20<link> ether66:f9:5b:b1:37:64txqueuelen0(Ethernet) RXpackets12bytes948(948.0B) RXerrors0dropped0overruns0frame0 TXpackets4bytes300(300.0B) TXerrors0dropped0overruns0carrier0collisions0 lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536 inet127.0.0.1netmask255.0.0.0 inet6::1prefixlen128scopeid0x10<host> looptxqueuelen0(LocalLoopback) RXpackets0bytes0(0.0B) RXerrors0dropped0overruns0frame0 TXpackets0bytes0(0.0B) TXerrors0dropped0overruns0carrier0collisions0 在node2機器上啟動容器my-test2,容器ip繫結為192.168.0.3 [[email protected]~]#dockerrun-itd--name=my-test2docker.io/centos/bin/bash e67b403a7eeaa46e462f8752da8b362ac65341d7d83d6f03a67482a19c550c37 [[email protected]~]#weaveattach192.168.0.2/24my-test2//weavedetach192.168.0.3/24my-test2表示刪除這個繫結 192.168.0.3 [[email protected]~]#dockerexec-timy-test2/bin/bash [[email protected]/]#ifconfig//或者ipaddr命令檢視 eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet172.17.0.2netmask255.255.0.0broadcast0.0.0.0 inet6fe80::42:acff:fe11:2prefixlen64scopeid0x20<link> ether02:42:ac:11:00:02txqueuelen0(Ethernet) RXpackets4999bytes13378310(12.7MiB) RXerrors0dropped0overruns0frame0 TXpackets4825bytes333445(325.6KiB) TXerrors0dropped0overruns0carrier0collisions0 ethwe:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1376 inet192.168.0.3netmask255.255.255.0broadcast192.168.0.255 inet6fe80::ac9b:28ff:fe47:794cprefixlen64scopeid0x20<link> etherae:9b:28:47:79:4ctxqueuelen0(Ethernet) RXpackets12bytes948(948.0B) RXerrors0dropped0overruns0frame0 TXpackets4bytes300(300.0B) TXerrors0dropped0overruns0carrier0collisions0 lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536 inet127.0.0.1netmask255.0.0.0 inet6::1prefixlen128scopeid0x10<host> looptxqueuelen0(LocalLoopback) RXpackets0bytes0(0.0B) RXerrors0dropped0overruns0frame0 TXpackets0bytes0(0.0B) TXerrors0dropped0overruns0carrier0collisions0 溫馨提示: 上面在dockerrun啟動容器時,可以新增--net=none引數,這個表示容器啟動後不使用預設的虛擬網絡卡docker0自動分配的ip,而是使用weave繫結的ip; 當然也可以選擇不新增這個引數去啟動容器,這樣,容器啟動後就會有兩個網絡卡,即兩個ip: 一個是docker0自動分配的ip,這個適用於同主機內的容器間通訊,即同主機的容器使用docker0分配的ip可以相互通訊;另一個就是weave網橋繫結的ip。 3)容器互聯 預設情況下,上面在node1和node2兩臺宿主機上建立的2個容器間都是相互ping不通的。需要使用weaveconnect命令在兩臺weave的路由器之間建立連線。 [[email protected]~]#weaveconnect10.10.172.202//連線的是對方宿主機的ip,注意"weaveforgetip"z則表示斷開這個連線 [[email protected]~]#weaveconnect10.10.172.201 然後就會發現,此時位於兩臺不同主機上的相同子網段內的容器之間可以相互ping通了 [[email protected]~]#dockerexec-timy-test1/bin/bash [[email protected]/]#ping192.168.0.3 PING192.168.0.3(192.168.0.3)56(84)bytesofdata. 64bytesfrom192.168.0.3:icmp_seq=1ttl=64time=0.995ms 64bytesfrom192.168.0.3:icmp_seq=2ttl=64time=0.865ms ..... [[email protected]~]#dockerexec-timy-test2/bin/bash [[email protected]/]#ping192.168.0.2 PING192.168.0.2(192.168.0.2)56(84)bytesofdata. 64bytesfrom192.168.0.2:icmp_seq=1ttl=64time=1.88ms 64bytesfrom192.168.0.2:icmp_seq=2ttl=64time=0.804ms ..... 再在node1上啟動容器my-test3,繫結ip為192.168.0.8,在node2上啟動容器my-test4,繫結ip為192.168.0.10 會發現這四個在同一個子網內的容器都是可以相互ping通的。 -------------------------------------------------------------------------------------------------------- 再接著啟動與上面不在同一個子網內的容器 node1上啟動容器my-test5,繫結ip為192.168.10.10,node2上啟動容器my-test6,繫結ip為192.168.10.20 [[email protected]~]#dockerrun-itd--name=my-test5docker.io/centos/bin/bash 66fc03e4310c507fa2d9cb09261cf4412367de0a0dbc9a1e8fd009bf405bca3e [[email protected]~]#weaveattach192.168.10.10/24my-test5 192.168.10.10 [[email protected]~]#dockerexec-timy-test5/bin/bash [[email protected]/]# [[email protected]~]#dockerrun-itd--name=my-test6docker.io/centos/bin/bash 3f8a275050007e4fe6b0b9a8be2fd9596ba60edf8803d97f7a6d63d763749c1c [[email protected]~]#weaveattach192.168.10.20/24my-test6 192.168.10.20 [[email protected]~]#dockerexec-timy-test6/bin/bash [[email protected]/]#ping192.168.10.10 PING192.168.10.10(192.168.10.10)56(84)bytesofdata. 64bytesfrom192.168.10.10:icmp_seq=1ttl=64time=1.85ms 64bytesfrom192.168.10.10:icmp_seq=2ttl=64time=0.930ms ...... 會發現在跨主機情況下,相同子網內的容器是可以相互通訊的;但是處於不同子網的兩個容器是不能互聯的,儘管這兩個容器在同一個主機下也是不能通訊的! 這樣的好處就是:使用不同子網進行容器間的網路隔離了。 -------------------------------------------------------------------------------------------------------- 注意一個細節,在使用weave的時候: 1)如果使用Docker的原生網路,在容器內部是可以訪問宿主機以及外部網路的。也就是說在啟動容器的時候,使用了虛擬網絡卡docker0分配ip, 這種情況下,登陸容器後是可以ping通宿主機ip,並且可以對外聯網的! 這個時候,在宿主機上是可以ping通docker0網橋的ip,但是ping不通weave網橋的ip。這個時候可以使用 "weaveexpose192.168.0.1/24"命令來給weave網橋新增IP,以實現容器與宿主機網路連通。如下: 預設在node1和node2宿主機上是ping不通my-test1容器的weave網橋ip的 [[email protected]~]#ping192.168.0.2 PING192.168.0.2(192.168.0.2)56(84)bytesofdata. ....... [[email protected]~]#ping192.168.0.3 PING192.168.0.2(192.168.0.2)56(84)bytesofdata. ....... 在node1和node2兩臺機器上都新增weave網橋的ip [[email protected]~]#weaveexpose192.168.0.1/24//注意這裡的192.168.0.1/24是上面my-test1、my-test2、my-test3、my-test4容器的weave網橋的閘道器地址 [[email protected]~]#weaveexpose192.168.0.1/24//weavehide192.168.0.1/24表示覆蓋/刪除這個設定 然後再在兩臺宿主機上ping上面同網段內的容器,發現都可以ping通了 [[email protected]~]#ping192.168.0.10 PING192.168.0.3(192.168.0.3)56(84)bytesofdata. 64bytesfrom192.168.0.3:icmp_seq=4ttl=64time=0.391ms 64bytesfrom192.168.0.3:icmp_seq=5ttl=64time=0.363ms [[email protected]~]#ping192.168.0.8 PING192.168.0.3(192.168.0.3)56(84)bytesofdata. 64bytesfrom192.168.0.3:icmp_seq=4ttl=64time=0.391ms 64bytesfrom192.168.0.3:icmp_seq=5ttl=64time=0.363ms 然後再給另一網段的容器的weave網橋新增ip(可以在宿主機上對不同網段的容器的weave網橋新增ip) [[email protected]~]#weaveexpose192.168.10.1/24 [[email protected]~]#weaveexpose192.168.10.1/24 [[email protected]~]#ping192.168.10.20 PING192.168.10.20(192.168.10.20)56(84)bytesofdata. 64bytesfrom192.168.10.20:icmp_seq=1ttl=64time=2.50ms 64bytesfrom192.168.10.20:icmp_seq=2ttl=64time=0.318ms [[email protected]~]#ping192.168.10.10 PING192.168.10.10(192.168.10.10)56(84)bytesofdata. 64bytesfrom192.168.10.10:icmp_seq=1ttl=64time=0.335ms 64bytesfrom192.168.10.10:icmp_seq=2ttl=64time=0.310ms 2)如果不適用Docker的原生網路,即在容器啟動的時候,新增--net=none,這樣容器啟動後,就不會使用docker0網絡卡分配ip。 這種情況下,登陸容器後發現不能訪問宿主機以及外部網路的,而在宿主機上也不能ping通容器ip。 這個時候新增對應容器網段的weave網橋ip,這樣可以實現容器與宿主機網路連通。但是,此時在容器內部依然不能訪問外部網路。 所以說,可以同時使用Docker的原生網路和weave網路來實現容器互聯及容器訪問外網和埠對映。 使用外部網路及埠對映的時候就使用docker0網橋,需要容器互聯的時候就使用weave網橋。每個容器分配兩個網絡卡。
weave的其他特性
1)應用隔離: 不同子網容器之間預設隔離的,即便它們位於同一臺物理機上也相互不通(使用-icc=false關閉容器互通);不同物理機之間的容器預設也是隔離的 2)安全性: 可以通過weavelaunch-passwordwEaVe設定一個密碼用於weavepeers之間加密通訊 3)檢視weave路由狀態:weaveps [[email protected]~]#weaveps weave:expose46:9f:2b:68:7b:8b192.168.0.1/24192.168.10.1/24 66fc03e4310c76:3a:a0:ea:bd:ea192.168.10.10/24 a05c5c68536c0a:42:bc:34:a6:2b192.168.0.4/24 02b376c8c34c66:73:47:af:14:c4192.168.0.2/24 [[email protected]~]#weaveps weave:expose22:ee:41:9f:e4:9a192.168.0.1/24192.168.10.1/24 3f8a2750500066:bd:3c:4f:5b:7c192.168.10.20/24 c37c12cc01a3ae:5c:0e:64:1b:20192.168.0.10/24 e67b403a7eea06:c3:64:3c:c9:3e192.168.0.3/24 4)效率 weave路由通過pcap捕獲包這種方式來完成封裝和解封裝這個過程,效率應該是有問題的。 這個過程中需要將資料包從核心態拷貝到使用者態,然後按照自定義的格式完成封裝和解封裝。 -------------------------------------------------------------------------------------------------- 在已經關閉了weave(weavestop)後,發現weave網橋資訊還在: [[email protected]~]#weavestop [[email protected]~]#brctlshow bridgenamebridgeidSTPenabledinterfaces docker08000.024222bb5763noveth479c96d vethdd2d391 vethe098b20 weave8000.000000000000novethwe-bridge vethwepl5202 vethwepl5560 vethwepl5638 [[email protected]~]#ifconfig ........ weave:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1376 inet192.168.0.1netmask255.255.255.0broadcast192.168.0.255 inet6fe80::20ee:41ff:fe9f:e49aprefixlen64scopeid0x20<link> ether22:ee:41:9f:e4:9atxqueuelen0(Ethernet) RXpackets144bytes9377(9.1KiB) RXerrors0dropped0overruns0frame0 TXpackets34bytes1740(1.6KiB) TXerrors0dropped0overruns0carrier0collisions0 刪除weave網橋資訊(其他ifconfig命令查出的網路裝置刪除的方法類似): [[email protected]~]#iplinksetdevweavedown [[email protected]~]#brctldelbrweave [[email protected]~]#brctlshow bridgenamebridgeidSTPenabledinterfaces docker08000.024222bb5763noveth479c96d vethdd2d391 vethe098b20
注:weave給容器指定的IP地址會隨著容器的重啟而消失。
轉載於:https://blog.51cto.com/dengaosky/2069478