OpenvSwitch實現多主機間通信

2020-08-29 東奇文創

單個主機上容器之間如果要實現網絡互通比較容易實現,一種常見做法是把需要通信的容器網絡接口橋接到相同的主機網絡接口,這樣容器就處在相同的廣播域,它們的網絡地址是由docker來負責分配管理,所以會獲得同一網段的IP位址,網絡互通所需的條件全部滿足。
當容器處在不同的主機,情況就大不相同,因為主機的網絡環境隔離了容器的網絡環境,此時要實現網絡互通,就需要做更多的工作。本文依賴OpenvSwitch實現多主機容器間網絡通信。

1,使用GRE接口

實驗拓撲如下:


GRE

用比較通俗的說法解釋上圖,Host 1上的Container 1連接交換機docker0,docker0連接路由器ovs-br,Host 2上的Container2同理。然後兩臺路由器ovs-br通過GRE隧道相連。用隧道的原因是容器間的流量必須承載在Host 1和Host 2的網絡之上。

配置Host 1:

docker run -d --name container1 centos /bin/bash -c &34; 添加橋接設備ovs-brip link add veth0 type veth peer name veth1 veth1接入ovs-brbrctl addif docker0 veth0 啟動veth1ip link set veth0 up 配置GRE隧道,接口為gre0,remote_ip為Host 2的主機IPovs-vsctl add-port ovs-br gre0 -- set interface gre0 type=gre options:remote_ip= 10.1.48.2

配置Host 2(為了避免和Host 1上Container 1上的IP位址衝突,可以啟動兩個容器,將第二個啟動的容器作為Container2)

docker run -d --name container2 centos /bin/bash -c &34;ovs-vsctl add-br ovs-brip link add veth0 type veth peer name veth1ovs-vsctl add-port ovs-br veth1brctl addif docker0 veth0ip link set veth1 upip link set veth0 upovs-vsctl add-port ovs-br gre0 -- set interface gre0 type=gre options:remote_ip= 10.1.48.3

配置完畢後,進入Container 1,ping測試Container 2發現是可以ping通的。

2,使用VxLAN接口

拓撲如下:


VxLan

這次直接把docker自帶的網橋docker0去掉,因為它不是必需的。

ovs-vsctl add-br ovs-br ifconfig ovs-br 192.168.8.1/24啟動一個容器,不使用默認網橋設備docker run --net=none --privileged=true -it ubuntu 將ovs-br上的接口eth0與容器a8706151885d綁定ovs-docker add-port ovs-br eth0 a8706151885d #在Container 1內執行ifconfig eth0 192.168.8.2/24

Host 2上的配置類似,ovs-br的IP位址設置為192.168.8.4,容器內eth0的IP位址配置為192.168.8.3
配置完畢後,在Host 1的容器裡面 ping測試Host 2上的容器,發現是通的。ping測試的同時,在Host 2的網卡eth0抓下包,可以看到VxLAN的身影,如下圖所示:


pcap

關於VxLAN的詳情,可參考https://tools.ietf.org/html/rfc7348

相關焦點

  • Openvswitch隧道模式之一對多
    OpenvSwitch是一個高質量的、多層虛擬交換機,使用開源Apache2.0許可協議,由 Nicira Networks開發,主要實現代碼為可移植的C代碼。它的目的是讓大規模網絡自動化可以通過編程擴展,同時仍然支持標準的管理接口和協議(例如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。
  • 與PC機間串行通信的實現
    在實際的應用中,也需要DSP能夠與外設進行異步串行通信,如與PC機進行串行數據傳輸就要求DSP系統具UART串行接口。針對這種情況,本文研究並實現了一種簡單、可靠的異步串口擴展方法。硬體上無需任何其它外圍器件,同時由於異步數據的發送和接收由MAX3111以硬體方案實現,所以軟體編程需要考慮的也只是DSP與MAX3111之間的同步數據通信。這樣,用最簡單的硬體連接和軟體編程就能實現同步到異步的串行數據格式轉換。
  • 在虛擬機間 NFV 應用上使用採用 DPDK 的 Open vSwitch*
    此外,DPDK 包處理庫還對 OVS 內的多個性能熱點區域進行了優化。 例如,轉發平面進行了優化,能夠作為單獨的 vSwitch 後臺程序線程在用戶空間內運行(虛擬交換)。 實施 DPDK 優化的 vHost 客戶機界面,虛擬機-虛擬機或物理機-虛擬機-物理機類型使用案例可獲得出色的性能。
  • 如何實現不同vlan間的通信?
    要實現vlan間通信,就需要路由;解決的方法要麼是二層交換機加路由器,要麼就是直接使用三層交換機,為什麼要使用三層交換機呢?因此,與傳統的路由器相比,可以實現高速路由。二、實例:三層交換機實現vlan間的相互通信?VLAN生成後交換機是互不相通的。
  • VLAN內與VLAN間通信原理
    VLAN 內跨越交換機通信原理有時屬於同一個VLAN的用戶主機被連接在不同的交換機上。當VLAN跨越交就需要交換機間的埠能夠同時識別和發送跨越交換機的VLAN報文。這時,Trunk Link技術。Trunk Link有兩個作用:1. 中繼作用:把VLAN報文透傳到互聯的交換機。
  • 如何實現不同vlan間的通信?
    要實現vlan間通信,就需要路由;解決的方法要麼是二層交換機加路由器,要麼就是直接使用三層交換機,為什麼要使用三層交換機呢? 1、三層交換機 三層交換機,本質上就是「帶有路由功能的(二層)交換機」。
  • Linux內核-進程間通信組件的實現
    在內存緊缺時,內存管理負責在磁碟和內存間交換程序塊。二、進程管理進程管理主要控制系統進程對CPU的訪問。當需要某個進程運行時,由進程調度器根據基於優先級的調度算法啟動新的進程。:Linux支持多任務運行,那麼如何在一個單CPU上支持多任務呢?這個工作就是由進程調度管理來實現的。
  • 深入淺出計算機間通信原理
    圖二 "對講機"式問答 3.全雙工通信: 全雙工通信定義:通信允許數據在兩個方向上同時傳輸,它在能力上相當於兩個單工通信方式的結合.全雙工通信和半雙工通信的本質區別是半雙工通信雙方只共用一條線路實現雙向通信
  • 案例分享:三層交換機通過配置VLANIF實現同設備VLAN間通信
    現在相同業務的用戶所屬的VLAN不相同,需要實現不同VLAN中的用戶相互通信。如下圖所示,User1和User2中擁有相同的業務,但是屬於不同的VLAN且位於不同的網段。現需要實現User1和User2互通。
  • 基於CORTEX-M3的多機通信網絡的設計與實現
    RS485總線最大可以支持32個節點,通過特製晶片,最大可以支持400個節點,因此,RS485非常適合於分布式測控系統通信領域。但RS485隻能代表通信的物理介質,數據的傳輸訪問必須開發相應的程序。CORTEX—M3是基於ARM7架構的處理器內核,採用哈佛架構,其功耗低,性價比高。在多機通信網的設計中,經過需求分析,提出並設計了一種基於CORTEX—M3的多機通信網絡。
  • 進程間的五種通信方式介紹
    進程間通信又叫IPC (InterProcess Communication)是指在不同進程之間傳播或交換信息。IPC的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket。 Socket支持不同主機上的兩個進程IPC。
  • 藍牙通信在信息家電中的實現
    藍牙可以作為一種有效的通信手段,實現家庭網關與信息家電間的控制信息等其他適中數據量的傳輸。本文首先介紹藍牙的HCI和藍牙協議L2CAP、BNEP,然後介紹如何在Linux2.4.18下實現USB藍牙驅動,最後介紹如何實現在藍牙個人區域網中進行無線通信。
  • 安卓手機與51單片機間藍牙通信的實現
    利用藍牙模塊建立手機和設備間的通信應用非常廣泛。藍牙耳機今天分享下如利用藍牙4.0模塊建立安卓手機和51單片機間的藍牙通信。(2)設置單片機的串口通信功能,因為藍牙模塊是通過單片機的串口與單片機連接的。串口通信部分看參看我上一篇文章,
  • 你未必知道 Linux作業系統進程間通信
    Linux進程間通信(IPC)有幾種方式,下面將將簡單的簡述一下:  一。管道(pipe)  管道是Linux支持的最初IPC方式,管道可分為無名管道,有名管道等。  (一)無名管道,它具有幾個特點:  1) 管道是半雙工的,只能支持數據的單向流動;兩進程間需要通信時需要建立起兩個管道;  2) 無名管道使用pipe()函數創建,只能用於父子進程或者兄弟進程之間;  3) 管道對於通信的兩端進程而言,實質上是一種獨立的文件,只存在於內存中;  4) 數據的讀寫操作:一個進程向管道中寫數據,所寫的數據添加在管道緩衝區的尾部
  • 基於RS-485總線的多主機通信方法
    摘要:針對RS-485總線多個節點之間無法自由通信的問題,介紹一種多主機通信方法,以探討總線接口電路和組網方式,並通過設計通信協議和規劃通信過程,完成相關程序設計。此方法在某裝備模擬項目中得到應用,取得了預期的效果。
  • 怎樣實現VLAN間通信,一節課帶你掌握
    一、背景我們知道通過劃分VLAN,可以有效隔離廣播,隔離廣播同時,對於不同VLAN之間ARP廣播報文,對於交換機則無法實現透傳。二、 VLAN間通信解決方案一:通過路由器接口劃分不同的VLAN實現不同VLAN之間通信不便於擴展,便於學習了解網絡轉發原理:
  • 基於CAN總線接口和模塊控制器實現組合工具機電控通信系統的設計
    RS-232雖然應用廣泛,但是傳輸速率較低,傳輸距離較短,抗幹擾能力較差,而且最重要的是它只適合點對點的連接方式;RS-485也是一個常用的通信規範,它可以實現半雙工的總線型的網絡,總線上允許連接多收發器,即具有多站能力;而CAN(控制器區域網)具有現場總線的特徵,與RS-485相比,CAN的信號形式更適合於熱插拔,而且它的網絡層協議在滿足模塊間通信高實時性要求的同時,與定時觸發的TIP相比更適合不定時傳送信息的要求
  • 作業系統 - 進程間通信
    需要注意的是這樣的加速只能在有多個處理器的計算機上才能實現。模塊化:我們可能想以模塊化的方式構建i系統,把系統功能劃分為及一個不同的進程或線程進程的合作需要一種進程間通信interprocess communication(IPC)的機制來使得他們可以交換數據,也就是說互相發送數據和接受數據。
  • 用隧道協議實現不同dubbo集群間的透明通信
    隨著日益嚴格的安全性要求,不同業務間的網絡隔離要求會與日俱增。筆者是搞中間件的,堅信做的基礎服務能夠對業務透明,讓其感知不到才是一個好的設計。一旦需要業務大量配合這種由基礎架構變更而引起的改造,無疑是非常的不友好,甚至是個失敗的設計。故障隔離事實上,筆者搞這一套隧道機制的初衷還有很大一部分原因是故障隔離。