Linen CNI 簡介

John-Lin
5 min readJul 22, 2017

--

A CNI plugin designed for overlay networks with Open vSwitch

From Flax to Linen

關於 Linen 命名

由於看了好幾個 CNI 套件都跟紡織品或編織有關,例如 Flannel, Calico, Silk 和 Weave 最後就決定命名 Linen 作為 CNI Plugin 及 Flax 作為 Daemon。

Linen CNI repository on GitHub: https://github.com/John-Lin/linen-cni

關於 Linen CNI

Linen CNI 是一個近期正在開發的專案,主要目標是實現容器跨主機通訊,其架構主要是參考 Kubernetes 官方網站一篇 Kubernetes OpenVSwitch GRE/VxLAN networking 文章,藉由開發 Linen CNI Plugin 控制 Open vSwitch,在運行 Container runtime 呼叫 CNI plugin 來設定內部容器與外部主機的網路設定。

Linen CNI 不僅可以用在一般的 network namespace 通訊(例如透過 Docker 所創建的容器),之外它更是一個提供 Kubernetes 集群跨主機通訊的插件。其主要功能為:

  • 透過 Open vSwitch 進行 VXLAN Tunneling 支援跨主機通訊
  • 支援 Kubernetes 集群透過 SDN Controller 管理全域網路
  • 動態偵測新節點的加入,納入現有的 Overlay Network

想了解更多關於 CNI 的細節可以參考我的另外一篇文章:Container Networking Interface 入門簡介

Overlay Network 實現方式

目前容器跨主機通訊的解決方案有幾個比較知名的專案,常見的有 Flannel, Project Calico, Docker Overlay NetworkWeave 幾個常見的專案。由下圖表格可以看出,目前主流的跨主機通訊方式都以 VXLAN Tunneling 為主,而 Calico 的實現方式是透過實作 BGP Protocol 去做 routing,而這兩種實現方式各有優缺點,詳細的性能比較可以參考: Battlefield: Calico, Flannel, Weave and Docker Overlay Network

Reference from Battlefield: Calico, Flannel, Weave and Docker Overlay Network

Linen CNI 架構

深入剖析 Linen CNI 有兩個工作流程分別是 Management Workflow 及 Packet Processing。

Management Workflow

Management Workflow

在扮演 Kubernetes network plugin 時 Management Workflow 具有兩個主要的程式:

  • Flax Daemon : 是一個專為 Kubernetes 所設計的 Daemon Sets 當部署時,它會確保集群上每個主機至少有一個 daemon 在運行,而 flax daemon 主要負責的工作為偵測新節點的加入,確保新節點進入集群網路。
  • Linen CNI Plugin : 為主要的 CNI 插件核心,當 Container runtime 運行時,會執行這個插件,為每一個 POD/Container 添加新的網路設定,確保跨主機通訊沒有問題。

前面有提過 Linen CNI 也可以為一般的 network namespace 添加支援 Overlay network 的網路設定,此時就不需要使用 flax daemon。

Packet Processing

Packet Processing

封包跨主機通訊透過 VXLAN Tunneling 的方式進行,其核心為 Open vSwitch 所建立的通道,並支援 SDN Controller 進行管理整個集群網路,但是 SDN Controller 非必要元件。以下圖為 ONOS (SDN Controller) 管理 Kubernetes 集群網路所呈現的截圖

Kubernetes Cluster Networking managed by ONOS (SDN Controller)

這個是近期所開發的 CNI 插件,一開始主要是想讓 Containers 透過 Open vSwitch 讓 SDN Controller 管理,後來發現 CNI 是一個容器網路介面的標準才遵循 CNI Spec 所開發。未來希望在 Kubernetes 上可以讓 OpenFlow 佔有一席之地。有任何使用情境、使用案例或想加入你個人的需求歡迎找我討論開發功能。

--

--