Docker發布libnetwork,著手解決網絡問題

fpcm 9年前發布 | 14K 次閱讀 Docker

5月1日,Docker發布了自家的容器網絡管理項目libnetwork,libnetwork使用Go語言編寫,目標是定義一個容器網絡模型(CNM),并為應用程序提供一致的編程接口以及網絡抽象。目前libnetwork仍在全力開發中,并沒有達到使用標準。

一個月前,我們宣布 SocketPlane團隊加入Docker,并且我們承諾將要構建一個健康的網絡生態系統。本周,在我們的合作伙伴的幫助下,我們邁出了一大步:開源的libnetwork項目。

什么是libnetwork?

Libnetwork最初是由libcontainer和Docker Engine中的網絡相關的代碼合并而成的,我們期待Libnetwork能發展為一個跨平臺的容器網絡包,就像現在的libcontainer那樣。

Libnetwork還引入了容器網絡模型(CNM),CNM是受該 GitHub issue啟發,并得到了我們的網絡方面的合作伙伴Cisco、IBM、Joyent、Microsoft、Rancher、VMware和Weave的支持。

在生態圈各個合作伙伴的幫助下,我們很快就創建了這個有價值的網絡庫,希望它可以為所有的容器運行時提供網絡支持。

容器網絡模型(CNM)

CNM定義了三個新的術語:

 Docker發布libnetwork,著手解決網絡問題


Network Sandbox

Docker容器中一個網絡配置的隔離環境。

Endpoint

一個在某個網絡上進行網絡通訊的接口,Endpoint可以加入一個network,同時,多個Endpoint也可以在一個網絡沙盒中共存。

Network

一個network就是一個唯一的、可識別的endpoint組,組內endpoint可以相互通訊。你可以創建一個『Frontend』和『Backend』network,然后這兩個network是完全隔離的。

CNM為Network和容器提供了如下合約:

  • 在相同network上的所有容器都可以隨意通訊。
  • 容器之間不同的通信可以使用多個network,它應該被所有的驅動支持。
  • 把一個容器加入到多個network,可以使用容器中的endpoint。
  • 為了提供網絡的連通性,endpoint需要加入到Network Sandbox中。
  • </ul>

    Docker網絡基礎
    為了實現一個可插拔的網絡接口,我們首先需要定位網絡在Docker平臺中的『位置』。這對于我們來說還比較棘手,因為網絡功能在Docker Engine和libcontainer中都有。現在,通過ibnetwork和CNM,我們可以創建一些必要的網絡API。

    引入network后,最令人興奮的事情就是我們已經使用相同的CNM API重新實現了Docker的bridge網絡(docker0),這秉承了我們的『可插拔』理念,這給予了用戶完全自由的選擇權利。

    接下來?

    Libnetwork正在全力開發中,我們將會把它加入到Docker的發布節奏中:從Docker 1.7開始,每隔一個月發布一些新的功能。一開始的重點工作包括:

    1. 將libnetwork集成到Docker Engine
    2. 在Docker CLI中使用新的network命令
    3. 撰寫『-net』參數的文檔,以告知用戶如何使用它來為容器指定網絡
    4. 在network和endpoint中支持添加『label』
    5. 研發新的『bridge』插件,以替換Docker目前的實現
    6. 研發『分布式bridge』插件,以支持跨容器網絡
    7. </ol>
      長遠來看,我們的目標還包括:

      1. 支持多平臺
      2. 開發更多的插件以解決目前用戶遇到的網絡問題
      3. </ol>
        原文鏈接:DOCKER NETWORKING TAKES A STEP IN THE RIGHT DIRECTION(翻譯:李穎杰)

        來自: http://dockone.io/article/351

         本文由用戶 fpcm 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
         轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
         本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!