Docker實踐 -- 使用Open vSwitch實現跨主機通訊
作為目前最火熱的容器技術,docker在網路實現和管理方面還存在不足。最開始的docker是依賴於Linux Bridge實現的網路設定,只能在容器裡建立一個網絡卡。後來隨著docker/libnetwork專案的進展,docker的網路管理功能逐漸多了起來。儘管如此,跨主機通訊對於docker來說還是一個需要面對的問題,這一點對於kubernetes類的容器管理系統異常重要。目前市面上主流的解決方法有flannel, weave, Pipework, Open vSwitch等。
Open vSwitch實現比較簡單,成熟且功能強大,所以很適合作為解決docker底層網路互聯互通的工具。言歸正傳,如下是基本架構圖:
具體的實現步驟如下:
1. 安裝docker-engine, bridge-utils和openvswitch
# yum -y install docker-engine bridge-utils openvswitch
2. 在主機1上編輯/usr/lib/systemd/system/docker.service檔案,新增docker啟動選項"--bip=10.0.0.1/24",如下:
[Service] Type=notify ExecStart=/usr/bin/docker daemon -H fd:// --bip=10.0.0.1/24 MountFlags=slave LimitNOFILE=1048576 LimitNPROC=1048576 LimitCORE=infinity
3. 在主機2上編輯/usr/lib/systemd/system/docker.service檔案,新增docker啟動選項"--bip=10.0.1.1/24",如下:
[Service]
Type=notify
ExecStart=/usr/bin/docker daemon -H fd:// --bip=10.0.1.1/24
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
4. 在兩個主機上啟動docker服務
# systemctl start docker
# systemctl enable docker
5. docker服務啟動後,可以看到一個新的bridge docker0被創建出來,並且被賦予了我們之前配置的IP地址:
[[email protected] ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02429e9a9aae no br-tun
[[email protected] ~]# ifconfig docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::42:9eff:fe9a:9aae prefixlen 64 scopeid 0x20<link>
ether 02:42:9e:9a:9a:ae txqueuelen 0 (Ethernet)
RX packets 34 bytes 2199 (2.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18 bytes 1438 (1.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[[email protected] ~]# ifconfig docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.1.1 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::42:d1ff:fe0a:33d3 prefixlen 64 scopeid 0x20<link>
ether 02:42:d1:0a:33:d3 txqueuelen 0 (Ethernet)
RX packets 35 bytes 2363 (2.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 25 bytes 2041 (1.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
6. 在兩個主機上啟動openvswitch
# systemctl start openvswitch
# systemctl enable openvswitch
7. 在兩個主機上建立隧道網橋br-tun,並通過VXLAN協議建立隧道
[[email protected] ~]# ovs-vsctl add-br br-tun
[[email protected] ~]# ovs-vsctl add-port br-tun vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=192.168.100.33
[[email protected] ~]# ovs-vsctl add-br br-tun
[[email protected] ~]# ovs-vsctl add-port br-tun vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=192.168.100.32
8. 將br-tun作為介面加入docker0網橋
[[email protected] ~]# brctl addif docker0 br-tun
[[email protected] ~]# brctl addif docker0 br-tun
9. 由於兩個主機的容器處於不同的網段,需要新增路由才能讓兩邊的容器互相通訊
[[email protected] ~]# ip route add 10.0.1.0/24 via 192.168.100.33 dev eth0
[[email protected] ~]# ip route add 10.0.0.0/24 via 192.168.100.32 dev eth0
10. 在兩個主機上各自啟動一個docker容器,驗證互相能否通訊。
[[email protected] ~]# docker run -i -t cirros /bin/sh
/ # ifconfig eth0
eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:02
inet addr:10.0.0.2 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:aff:fe00:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:418 (418.0 B) TX bytes:508 (508.0 B)
[[email protected] ~]# docker run -i -t cirros /bin/sh
/ # ifconfig eth0
eth0 Link encap:Ethernet HWaddr 02:42:0A:00:01:02
inet addr:10.0.1.2 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:aff:fe00:102/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:508 (508.0 B) TX bytes:508 (508.0 B)
/ # ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=62 time=0.750 ms
64 bytes from 10.0.0.2: seq=1 ttl=62 time=1.106 ms
64 bytes from 10.0.0.2: seq=2 ttl=62 time=0.528 ms
相關推薦
Docker實踐 -- 使用Open vSwitch實現跨主機通訊
作為目前最火熱的容器技術,docker在網路實現和管理方面還存在不足。最開始的docker是依賴於Linux Bridge實現的網路設定,只能在容器裡建立一個網絡卡。後來隨著docker/libnetwork專案的進展,docker的網路管理功能逐漸多了起來。儘管如此,跨主
Docker實踐 -- 使用Open vSwitch實現跨主機通信
sha centos queue 基本架構 fan tom name uil str 作為目前最火熱的容器技術,docker在網絡實現和管理方面還存在不足。最開始的docker是依賴於Linux Bridge實現的網絡設置,只能在容器裏創建一個網卡。後來隨著docker/l
Docke 使用Open vSwitch實現跨主機通信
byte multicast del amp ces ets port sysctl warn
docker之 網路模式和跨主機通訊
Docker的四種網路模式Bridge模式 當Docker程序啟動時,會在主機上建立一個名為docker0... Docker的四種網路模式 Bridge模式 當Docker程序啟動時,會在主機上建立一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連線到這個虛擬網橋上。虛擬網橋
一分鐘看懂Docker的網路模式和跨主機通訊
文章轉載自:http://www.a-site.cn/article/169899.html Docker的四種網路模式Bridge模式當Docker程序啟動時,會在主機上建立一個名為docker0...Docker的四種網路模式Bridge模式當Docker程序啟動時,會在主機上建立一個名為dock
Docker學習筆記 — Weave實現跨主機容器互聯
Docker的原生網路支援非常有限,且沒有跨主機的叢集網路方案。目前實現Docker網路的開源方案有Weave、Kubernetes、Flannel、Pipework以及SocketPlane等,其中Weave被評價為目前最靠譜的,那麼這裡就對Weave的基本原
Docker 使用 macvlan 實現跨主機網路通訊
一、背景 macvlan 本身是 linux kernel 模組,是一種網絡卡虛擬化技術; 它允許在同一個物理網絡卡上配置多個 MAC 地址,即多個 interface,每個 in
overlay 如何實現跨主機通信?- 每天5分鐘玩轉 Docker 容器技術(52)
docker 教程 容器 上一節我們在 host1 中運行了容器 bbox1,今天將詳細討論 overlay 網絡跨主機通信的原理。在 host2 中運行容器 bbox2:bbox2 IP 為 10.0.0.3,可以直接 ping bbox1:可見 overlay 網絡中的容器可以直接通信,同時
部署Flannel,實現跨主機Docker容器通信
介紹 說明 -- config netmask down host rtu efi flannel(flannel is a virtual network that attaches IP addresses to containers) 兩個主機下的Docker容器之間
Docker的網路模式和如何跨主機通訊
Docker有四種網路模式:Bridge、Host、Container、None,一般常用的是前面兩種,預設的是第一種,不安全的是第二種,以下介紹一下四種網路模式,並重點介紹一下如何配置自己的跨主機通訊網路。 一、網路模式介紹 1、Bridge模式: 預
Docker容器跨主機通訊的幾種方式
前言:Docker的5種網路模式 Bridge 此時docker引擎會建立一個veth對,一端連線到容器例項並命名為eth0,另一端連線到指定的網橋中(比如docker0),因此同在一個主機的容器例項由於連線在同一個網橋中,它們能夠互相通訊。容器建立時還會自
Docker容器跨主機通訊--overlay
主機配置 A 45.77.250.9 CentOS 7 x64 B 66.42.55.131 CentOS 7 x64 1.A、B主機分別安裝docker yum install docker -
open vswitch實現不同宿主機的容器通訊(centos7)
實驗環境: 機器一:192.168.122.222 安裝docker,open vswitch 機器二:192.168.122.247 安裝docker,open vswitch ip a檢視主機的docker0介面為:172.17.0.1/16 一、部署主機
Docker容器跨主機通訊之:直接路由方式
概述 就目前Docker自身預設的網路來說,單臺主機上的不同Docker容器可以藉助docker0網橋直接通訊,這沒毛病,而不同主機上的Docker容器之間只能通過在主機上用對映埠的方法來進行通訊,有時這種方式會很不方便,甚至達不到我們的要求,
8天入門docker系列 —— 第七天 讓你的container實現跨主機訪問
當你有若干個容器之後,你可能就希望實現容器的跨機部署訪問了,比如aspnetcore在一臺host上,mysql在另外一個host上,如果要實現這樣的功能,需要你 藉助docker自
centos7下安裝docker(15.7容器跨主機網絡---calico)
信息 https 用戶 client /usr ctc onf pan 映射 Calico是一個純三層的虛擬網絡方案,Calico為每個容器分配一個IP,每個host都是router,把不同host的容器連接起來。與vxlan不同的是:calico不對數據包進行封裝,不需要
思科單臂路由實驗配置,實現跨vlan通訊
單臂路由 思科單臂路由 配置參數如圖:PC1 vlan 20 20.1.1.1 網關20.1.1.254PC2 vlan 30 20.1.1.1 網關30.1.1.254PC3 vlan 40 40.1.1.1 網關40.1.1.254R1配置以下3個子接口地址:g0/0.1 20.1.1.254g0
Android 使用Messenger實現跨app通訊
Android中使用跨程序通訊有以下幾種方式:檔案、廣播、aidl、messenger,今天要講的是使用messenger來實現跨app通訊也就是在兩個不同的app中實現雙向通訊。其實Messenger底層也是使用aidl的方式來實現的,只不過其使用handler來處理訊息,因為handler是執行
parent.window.opener實現跨頁面通訊
有人在技術交流群裡提了個問題,瞬間引起我強烈的好奇心,“通過JS改變上一來源頁面內資訊,包括跳轉等功能”。 也許有人見過在父子iframe通訊,但兩個頁面之間的通訊很少見。 跨標籤跳轉頁面 從A頁面進入B頁面,進入B頁面的同時,A頁面跳轉到另一個頁面。(有時候你
使用dd實現跨主機資料遷移
dd遷移方案:(注意新建虛擬機器的時候要和物理機的磁碟、記憶體等大小一致) 一、物理機和虛擬機器分別用對應版的livecd啟動。 二、在物理機和虛擬機器上分別關閉防火牆和開啟sshd服務 1.關閉防火牆 systemctl stop firewalld.service#停止f