1. 程式人生 > >Docker實踐 -- 使用Open vSwitch實現跨主機通訊

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