1. 程式人生 > >docker網路模式之 overlay模式

docker網路模式之 overlay模式

         Overlay網路模式,在多個docker daemon 主機之間穿件一個分散式的網路,該網路(overlay)位於docker主機層次之上,允許容器(同一叢集服務的容器)之間加密通訊,因此,docker需要處理每一個主機(docker daemon)和每個分佈的容器之間的包路由。

      每當初始化一個叢集或者新增一個docker主機到叢集時,則在該主機上建立兩個網路,

             一個稱為覆蓋網路的ingress,該網路處理叢集服務間的控制和資料資訊。當建立一個叢集服務、但未指定使用者自定義網路時,該服務上的節點預設連線到ingree網路。

            一個橋接網路(docker_gwbridge),該網路,連線單個主機的守護程序(docker daemon)與其他主機的守護程序,參與叢集服務。

        覆蓋網路(ovlerlay network)的建立,與 使用者自定義網路(used-defined nework)建立方式一直,採用指令 docker network create.  服務和容器,可同時連線多個網路,服務或者容器他們之間通訊的通訊前提是,他們都連線在同一個網路上。

docker network create -d overlay my-overlay

     儘管我們可以使用覆蓋網路(overlay network)連線叢集服務的容器,和單個獨立的容器,但是,針對這兩種不同的容器,預設的行為和配置關注點是不同的。下面分佈介紹叢集服務下、獨立容器下的不同的操作過程。

  一、overlay netwrok 操作

預備知識:

      叢集服務,主機閘道器規則,(叢集服務下,各主機的閘道器應該處於關閉狀態)

     覆蓋網路下,各主機之間的部分埠需要開發,保證各主機將的通訊的暢通。

            2377 tcp埠,叢集管理通訊

           tcp  和 udp埠 7496 結點間的通訊

            UDP埠 4789 覆蓋網的流量互動(例如金鑰互動等)

   建立覆蓋網路(overlay network)的之前,必須呼叫 docker swarm init 將當前的docker 主機初始化成一個管理結點,或者將當前主機 通過  docker swarm join 新增到一個已存在的叢集中,上述兩操作 都會使得 叢集服務預設建立 覆蓋網路 ingress.  即使不從不打算使用叢集服務,他們都會預設執行這些操作(預設建立一個覆蓋網路ingress)。後續,我們可用建立自動定義的覆蓋網路。 檢視當前網路。

[[email protected] hadoop]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
722e7f4ef7f3        bridge              bridge              local
44f25836fb69        docker_gwbridge     bridge              local
168341f8d4c7        host                host                local
ijcf9vo1wn50        ingress             overlay             swarm
39aff7551ffa        my-net              bridge              local
5f7c097a7d11        none                null                local
[[email protected] hadoop]# 

1.1 建立 overlay network 

建立一個覆蓋網路

[[email protected] hadoop]# docker network create -d overlay  my-overlay 
xbqlms0g39gknsebdxowdjetk

  如果需要建立一個,允許叢集服務間的容器互動連線或者獨立的容器之間能夠連線,需要加 標記 --attachable

[[email protected] hadoop]# docker network create -d overlay --attachable my-overlay 

其他引數,例如IP地址變化,子網地址,閘道器等引數可 呼叫 docker network create --help 檢視

[[email protected] hadoop]# docker network create --help

Usage:  docker network create [OPTIONS] NETWORK

Create a network

Options:
      --attachable           Enable manual container attachment
      --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
      --config-from string   The network from which copying the configuration
      --config-only          Create a configuration only network
  -d, --driver string        Driver to manage the Network (default "bridge")
      --gateway strings      IPv4 or IPv6 Gateway for the master subnet
      --ingress              Create swarm routing-mesh network
      --internal             Restrict external access to the network
      --ip-range strings     Allocate container ip from a sub-range
      --ipam-driver string   IP Address Management Driver (default "default")
      --ipam-opt map         Set IPAM driver specific options (default map[])
      --ipv6                 Enable IPv6 networking
      --label list           Set metadata on a network
  -o, --opt map              Set driver specific options (default map[])
      --scope string         Control the network's scope
      --subnet strings       Subnet in CIDR format that represents a network segment
[[email protected] hadoop]# 

1.2 覆蓋網路(overlay network)的加密通訊配置

     所有docker 叢集服務的流量管理預設採用加密傳輸,加密演算法使用ACE演算法,使用最大公約數模式(GCM Mode), 叢集服務中的管理結點每12個小時,更新一次金鑰。

    啟動加密,僅需要在建立網路是,新增  --opt encrypted 選項配置即可,這在虛擬擴充套件區域網層啟用安全協議,這種加密帶來不可忽視的效能損失。因此,在適用於生產之前,必須進行測試,

   當啟動覆蓋加密時,docker在每個工作結點之間建立 網路通道。通道使用在 GCM模式上使用ACE演算法,並且每12個小時,旋轉金鑰(修改金鑰)。

    注意:  目前window上暫不知此,覆蓋加密網路,如果試圖將一個window的工作結點,新增到一個覆蓋加密網路,並不會報錯,該是該節點無法通訊。

  2、 叢集服務網路和獨立容器

    一起使用 --opt encrypted  和 --atachable, 建立一個加密網路,連線未管理的容器

docker network create --opt encrypted --attachable -d overlay my-attachable-multi-host-network

2.1 自定義 覆蓋網路 ingress network

  一般,使用者在使用過程中,不需要配置 ingress網路,但是docker  17.05 或者更高版本,允許使用者配置預設的ingress網路。一般修改的基本條件如下:

      1、自動配置的子網與與存在的某個網路存在衝突

      2、修改低階網路配置,例如MTU等。

   自定義 ingreess 網路,需要刪除它,然後重新新建。而且,這一步必須要在叢集服務建立之前完成。如果叢集中有一個需要開放埠的服務,在刪除 ingress服務之前,必須先刪除該服務。

    在沒有ingress 網路期間,那些不需要對外開放埠的服務仍然繼續執行,但是無均衡負載。自定義覆蓋網路 ingree 需要釋出埠的服務,例如 依賴於開放埠80的 WordPress 服務。

  •   呼叫 docker network inspect ingress 檢視該網路資訊,停止運行於連結該網路容器上的需要開放埠的服務,例如開放埠為80的WorkPress服務,
  •  刪除網路 ingress .  docker network rm ingress  如果上一次未執行,則該步驟將失敗
[[email protected] hadoop]# docker network rm ingress
WARNING! Before removing the routing-mesh network, make sure all the nodes in your swarm run the same docker engine version. Otherwise, removal may not be effective and functionality of newly create ingress networks will be impaired.
Are you sure you want to continue? [y/N]
  • 使用引數 --ingress 新建一個資訊的 覆蓋網路,並修改配置
$ docker network create \
  --driver overlay \
  --ingress \
  --subnet=10.11.0.0/16 \
  --gateway=10.11.0.1 \
  --opt com.docker.network.driver.mtu=1500 \
  my-ingress

    可以修改 自己的ingress名稱,但是隻能新建一個該網路(--ingress)。

  • 重啟之前停止的服務

2.2 修改預設的橋接網路  docker_gwbridge

  docker-gwbridge 是一個虛擬網橋,連線覆蓋網路(overlay network ,包含 ingress網路)和docker主機的實際物理網路。當主機呼叫 docker swarm init 初始化叢集服務,或者 docker swarm join 新增到一個叢集時,docker主機自動建立該網橋,但是它不是一個docker的裝置,存在於docker主機所在的核心上,如果需要配置該網橋引數,需要停止docker. 且在叢集初始化前,或者新增到叢集前,或者在主機遷出集群后,具體步驟如下:

   (1) stop docker

   (2)刪除已經存在網橋介面   docker_gwbridge

$ sudo ip link set docker_gwbridge down

$ sudo ip link del dev docker_gwbridge

   (3) 啟動docker  但,不要進行叢集初始化,或者新增主機到叢集

(4)呼叫 docker network create 手動新建虛擬網橋介面,並配置引數 ,

$ docker network create \
--subnet 10.11.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge

  (5) 執行叢集初始化,或者新增結點到叢集,由於這裡已經儲存 網路介面docker_gwbridge。 因此無法自動建立。

2.3 叢集服務操作

     1、 釋出覆蓋網埠

     叢集中的所有容器之前的埠是全部公開的,但是對於埠需要公開,則需要使用引數  -p  或者  --publish 。一般在建立服務或者更新服務 呼叫指令  docker service create / docker service update 修改釋出埠。同時支援冒號分割法,和逗號分割描述法。更長的語法是首選,因為它在某種程度上是自文件化的。

 

2、為叢集服務繞過路由格網

          預設情況下,docker  叢集服務使用路由格網釋出埠,當連線叢集服務已釋出的埠時(無論是執行或者未執行服務的容器),請求都將被重定向到一個正在執行服務的工作結點。很明顯地,Docker實際上扮演者叢集服務的均衡負載器,採用路由格網執行服務,容器服務已虛擬IP模式執行。當使用標記  --global 使得服務運行於所有結點,其也是採用虛擬IP模式。當使用路由格網執行服務時,無法儲存哪個結點處理客戶端的請求。

       如需繞過路由格網,你可以在服務啟動時,修改標記  --endpoint-mode 為 dnsrr , 使用dns輪訓(DNSRR)模式,但是你必須在服務啟動前,執行自己的均衡負載器, docker主機針對一個DNS查詢(根據伺服器名稱)需要返回一個當前執行該具體服務所有結點的ip列表,配置此均衡負載器,並使用此列表平衡結點間的流量。

3、獨立控制和資料流量

預設情況下,流量控制與同一網路下的叢集管理和執行應用程式的容器間互動相關,雖然叢集流量控制是加密的,但也可以通過配置docker,使得針對兩種不同型別的流量使用不同網路介面,在節點初始化,或者加入叢集時,分開指定引數 --advertise-addr 和 --datapath-addr ,但注意,叢集中每個結點均需要指定這兩引數。

2.4 獨立容器間的覆蓋網路操作

1、 關聯獨立容器到覆蓋網路

        預設建立的ingress網路,不帶有--attachable標記,因此,只有叢集服務的節點才可以用它,獨立的容器節點不能夠被新增到該網路。獨立的容器可新增到一個使用者自定義的、帶有--attachable的覆蓋網路,這使得在不同Docker守護程序上執行的獨立容器能夠通訊,而不需要在單個Docker守護程序主機上設定路由。

2、 釋出埠

3、發現容器方法

  大多數情況下,首先必須連線到服務(通過服務名稱),服務名稱通常被用來均衡複雜各容器,以及作為容器的“任務"標示,在容器內執行。

相關推薦

docker網路模式 overlay模式

         Overlay網路模式,在多個docker daemon 主機之間穿件一個分散式的網路,該網路(overlay)位於docker主機層次之上,允許容器(同一叢集服務的容器)之間加密通訊,因此,docker需要處理每一個主機(docker daemon)和每個

7 結構型模式 - 裝飾模式

oid str res bstr 子類 protected eat 同時 jea 裝飾模式介紹:裝飾模式也稱為包裝模式,是結構型模式之一,其使用一種對客戶端透明的方式來動態地擴展對象的功能,同時它也是繼承關系的一種替代方案之一。在現實生活中你也可以看見很多裝飾模式的例子,或

設計模式狀態模式

分支語句 控制 查看 cti get 裏的 抽象類 href 其它 設計模式之狀態模式 May 22, 2015 狀態模式(State)允許一個對象在其內部狀態改變的時候改變它的行為,對象看起來似乎修改了它的類。 正文 舉個例子,就比如我們平時在下載東西,通常就會有好幾個

設計模式命令模式

能夠 ger 不同 exec cor del 需要 content ces 設計模式之命令模式 Feb 24, 2015 命令模式(Command)的定義是:用於將一個請求封裝成一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或者記錄請求日誌,以及執行可撤銷的

設計模式代理模式

append class copyright ssis pen 事件綁定 video play 模塊 設計模式之代理模式 Aug 12, 2015 代理,顧名思義就是幫助別人做事,GoF 對代理模式的定義如下: 代理模式(Proxy),為其他對象提供一種代理以控制對這個對

設計模式組合模式

asp fast 基本 class prototype getch pro 通用 -i 設計模式之組合模式 Oct 19, 2015 組合模式(Composite)將對象組合成樹形結構以表示“部分-整體”的層次結構,組合模式使得用戶對單個對象和組合對象的使用具有一致性。

java設計模式外觀模式

數據 開發 移位運算 傳遞 保存 load space 法則 rep 【學習難度:★☆☆☆☆,使用頻率:★★★★★】 外觀模式是一種使用頻率非常高的結構型設計模式,它通過引入一個外觀角色來簡化客戶端與子系統之間的交互,為復雜的子系統調用提供一個統一的入口,降低子系統與

java設計模式代理模式

單擊 [] 部分 空間 快遞公司 存儲 交互 idt encoding 【學習難度:★★★☆☆,使用頻率:★★★★☆】 代理模式是常用的結構型設計模式之一,當無法直接訪問某個對象或訪問某個對象存在困難時可以通過一個代理對象來間接訪問,為了保證客戶端使用的透明性,所訪問的真實

設計模式狀態模式(State)摘錄

表示 facade test true efi 子類 ble 叠代 系列 23種GOF設計模式一般分為三大類:創建型模式、結構型模式、行為模式。創建型模式抽象了實例化過程,它們幫助一個系統獨立於怎樣創建、組合和表示它的那些對象。一個類創建型模式使用繼承改變被實例化的類,而

設計模式 - 模板模式(Template Pattern)

process egg lec pass jdbcutils ima tint new sta 引入:這幾天在看一本講spring源碼的書《SPRING技術內幕》裏面在講加載配置文件的時候,可以有不同的加載方式,如根據文件系統目錄加載配置文件(FileSystemXmlAp

設計模式命令模式(Command)摘錄

single 而是 names 都得 結構 意圖 iterator nbsp 軟件 23種GOF設計模式一般分為三大類:創建型模式、結構型模式、行為模式。創建型模式抽象了實例化過程,它們幫助一個系統獨立於怎樣創建、組合和表示它的那些對象。一個類創建型模式使用繼承改變被實例

C++設計模式狀態模式(二)

virtual alt 虛構函數 需求 rate names clas term delete 2、智能空調的設計與實現 某軟件公司將開發一套智能空調系統: 系統檢測到溫度處於20---30度之間,則切換到常溫狀態;溫度處於30---45度,則切換到制冷狀態;

設計模式Builder模式

builder tin -s close blog ati 可變對象 lap 如果   在平時的項目開發中,我們會通過構造方法傳參來實例化對象。   但在需要多個參數時,如果繼續使用構造方法實例,編寫代碼會非常麻煩,而且在其他項目成員傳參時特別容易出現傳參錯誤的情況,這時

設計模式策略模式

條件 cti round ces 配置 urn 表單提交 spa 成了 在web項目中,表單的驗證和提交是我們經常開發的功能之一。下面我們來看一下一般情況下我們如何驗證一個用戶的註冊。 需求: 註冊需要用戶名,密碼,手機號碼,郵箱 所有選項不能為空 密碼要長度不能少於8位,

設計模式外觀模式

設計模式 外觀模式 facade 門面模式 1、外觀模式的簡單介紹(也叫門面模式): a、外觀模式和迪米特法則(最少知識的原則,一個軟件實體應當盡可能少的與其他實體發生相互作用)的聯系緊密。 b、外觀模式的核心: - 為子系統提供統一的入口。封裝子系統的復雜性,便於

設計模式裝飾模式

裝飾模式 設計模式 包裝器模式 1、裝飾模式相關介紹: a、裝飾模式的職責: - 動態的為一個對象增加新的功能 - 裝飾模式是一種用於代替繼承的技術,無需通過繼承增加子類就能夠擴展對象的新功能。使用對象的關聯關系代替繼承關系,更加靈活,同時避免了類型體系的快速膨脹。 b

設計模式策略模式&簡單工廠模式

抽象 jsb args watermark amp pri eas 時間 並且 學習設計模式已經有非常長一段時間了。事實上先前已經敲過一遍了,可是老認為沒有學到什麽,認識也不夠深刻,如今趁著重構機房。再又一次來過,也不晚。 事實上在敲了機房之後,看看模式,事實

漫談設計模式組合模式

設計模式 組合模式一、什麽是設計模式、為什麽要使用它 對設計模式的解釋有很多,在這裏我按個人的理解闡述一下。設計模式就是一些常見問題的優秀實踐,一套按面向接口嚴格實現的優秀方法,是經過實踐認證的、高效的、解耦的解決方案。那麽為什麽要使用它,一個設計模式定義了一個問題、定義了一個解決方案、是經過測試的、能

漫談設計模式工廠模式

設計模式 策略模式 工廠模式 單例模式今天在這裏不過多介紹什麽是設計模式和為什麽要使用它?可以參考漫談設計模式之組合模式。一、什麽是抽象工廠設計模式? 一言以蔽之,抽象工廠就是用來創建功能相關的類,二、在什麽場景下使用它? 顧名思義,在我們的業務當中會有一種場景,有一個查詢頁面,上面有很多很多的查

設計模式生成器模式

cnblogs 抽象 技術分享 public 工作 src extend 產品 不出 GOF對生成器模式的描述為:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。感覺這是創建型模式中最難理解的一個,參考了《Java與模式》一書,在這本書中,作者側重