Linux核心為高階容器網路提供關鍵技術

貓飯先生發表於2017-10-11
本文講的是Linux核心為高階容器網路提供關鍵技術【編者的話】本文介紹了一個為容器提供網路解決方案的實驗性開源專案Cilium,該專案利用Linux的BPF技術在應用層完成容器的網路策略。

【深圳站|3天燒腦式Kubernetes訓練營】培訓內容包括:Kubernetes概述、架構、日誌和監控,部署、自動駕駛、服務發現、網路方案等核心機制分析,進階篇——Kubernetes排程工作原理、資源管理及原始碼分析等。

實驗性開源專案Cilium使用現有的Linux核心特性為容器提供更快更有力的網路。

容器使用過程中,網路一直是最令人頭疼的問題之一。即使是Kubernetes這種快速成為容器編排的首選技術,在完善網路方面也存在侷限性。類似網路安全這類棘手問題也變得更棘手。

由Google支援的源專案Cilium也在試圖提供一種基於Linux核心已有技術的全新網路技術。專案的目標是為容器提供更好的網路安全以及更簡單的網路模式。

BPF式網路

Linux裡的網路安全機制,例如iptables,只是工作在網路、資料包以及地址層面,也就是OSI模式中的第三層。然而這些機制並不會涉及類似HTTP等協議。

Cilium利用Linux的巴克利包過濾(BPF)技術,在網路層和HTTP層為Docker容器或者Kubernetes pods實現網路安全策略。

Linux 2.5版本引入BPF並從此穩定在核心裡。多虧了BPF技術,使得我們可以編譯並執行核心態程式,通過這些程式實現網路過濾機制,實現效能分析和跟蹤

按照Cilium的GitHub資源庫文件,Cilium的工作模式是生成核心級別的BPF程式與容器直接互動。 區別於為容器建立overlay網路,Cilium允許每個容器分配一個IPv6地址(或者IPv4地址),使用容器標籤而不是網路路由規則去完成容器間的網路隔離。它還包含建立並實施Cilium規則的編排系統的整合。

使用BPF的兩大理由是快速性和方便性。BPF被編譯成內部機器程式碼,所以它能像其它核心程式碼一樣快速執行。Cilium使用的BPF程式變化時不需要重啟機器甚至容器也不需要重啟。Cilium的創造者也指出BPF程式是基於單個容器進行優化,因此特定容器所不需要的特性不編譯進去就行了。

實驗性質,後續可能成為必要

Cilium的一個潛在爭議是它需要較新的核心版本——4.8.0及以後,建議4.9.17同時LLVM版本要求3.7.1及以後。儘管如此,Cilium的一系列特性並不和特定的Linux版本繫結,舉個例子,附加的額外統計不是由Linux核心提供,此外其它轉發邏輯也是如此。

Cilium為容器展示了一個實驗性質的網路解決方案,在多方面都有很大的發展空間,在這點上,Docker解決方案亦然。Docker原生的網路方案不靈活而且不易於管理,於是公司引入了SocketPlane並且把它的網路結構OpenDaylight新增到了Docker 1.9版本里。這成為Docker預設的網路方案,但是理論上如果有其它網路產品和Docker API配合良好的話,我們可以把SocketPlane方案替換掉。

Cilium的優點在於它使用與容器相同的思路,利用現有的Linux核心技術構建;Docker型別的容器本質上還是既有Linux核心能力的重新整合。同樣的,Cilium相容現有技術,擁有一系列被充分了解的使用場景,接近於容器在核心中的級別。

原文連結:Linux kernel holds key for advanced container networking(翻譯:李樺,Stephy)

原文釋出時間為:2017-05-07

本文作者:李樺

本文來自雲棲社群合作伙伴Dockerone.io,瞭解相關資訊可以關注Dockerone.io。

原文標題:Linux核心為高階容器網路提供關鍵技術


相關文章