歡迎光臨
每天分享高質量文章

Cilium 1.0:將BPF革新引入Kubernetes網路和安全系統

過去幾個月對Cilimu和BPF貢獻者來說是令人振奮的一段時間,我們見證了Cilium社群和BPF使用者快速增長的階段,社群由來自Google、Facebook、Netflix、紅帽和許多公司的開發人員構成。Linux核心社群正準備用BPF替代iptables[1]是BPF成功的重要標誌。
以上因素使得BPF快速成熟。自從2017年DockerCon上釋出後,Cilium經歷了不可思議的發展階段,對參與專案的所有人員致以最誠摯的感謝。其中共享程式碼,提供反饋和增加影響力,各種支援對專案成熟都是非常重要的。


Cilium 1.0:穩定的API和LTS釋出

今天,Cilium 1.0穩定版本釋出。從這個版本開始,將會提供產品保障以及生產環境下的最佳實踐。
  • API穩定性,可以確保API向上或者向下相容。

  • 穩定版本,提供生產環境下長期支援。

  • 安全問題處理流程。

  • 基於Slack和GitHub的及時響應,以及基於其上的問題和功能需求處理流程。


為什麼要用Cilium

本博文專註於Cilium 1.0提供的功能。在另一篇名為Cilium – Rethinking Linux Networking and Security for the Age of Microservices[2]的博文中討論了Cilium的背景和使用場景,以及與Service Mesh/Sidecar融合推進工作的預覽。


什麼是Cilium

以下列出了Cilium 1.0提供的所有功能描述。可以從Cilium檔案中功能概覽[3]一節找到更詳細的資訊。

高效BPF資料通道:BPF透過提供高效能核心沙箱可程式設計性,在資料通道層處理繁重工作,在Linux底層提供的超強動力。更多資訊可以參見這篇博文[4]或者BPF參考指南[5]。
  • 全分佈:所有資料通道元素在叢集內都是全分佈的,在每個叢集節點上都執行在作業系統最有效的層級上。

  • Service Mesh資料通道:BPF允許使用者為快速增長的Service Mesh空間建立合理的資料平面。Cilium 1.0已經提供了例如Envoy的透明內部代理。未來Cilium版本會提供Sidecar代理加速。我們已經釋出了一些早期Sidecar代理的基準指標[6]。

CNI和CMM外掛:CNI和CMM外掛可以整合Kubernetes、Mesos和Docker,提供網路,負載均衡和容器安全功能。
資料包和API層面的網路安全:Cilium整合了基於資料包的網路安全以及透明API認證,為傳統部署和微服務架構的安全性。
  • 基於身份:Cilium將負載和身份資訊在每個包內都打包在一起(而不是依靠源IP地址),提供高可擴充套件安全性。這一設計使得身份可以被嵌入任何基於IP的協議,而且與未來的SPIFFEE[]7或者Kubernetes的Container Identity Working Group[8]相容。

  • 基於IP/CIDR:如果基於身份的方式不適用,那麼可以採用基於IP/CIDR安全方式控制安全訪問。Cilium建議在安全策略中儘量採用抽象方式,避免寫入具體IP地址。其中一個實體就是定義基於Kubernetes服務名的策略。

  • API自感知安全機制:HTTP/REST、gRPC和Kafka廣泛使用暴露出基於IP和埠的服務,其安全機制明顯不足。內建自感知API和資料儲存相關協議在相關粒度上允許強制使用最小特權級別安全。

分散式可擴充套件負載均衡:高效能3-4層負載均衡器在服務連線間使用BPF,具有流雜湊和加權round-robin功能。基於雜湊實現的BPF提供O(1)複雜度的效能,也就是效能隨著服務數量增加效能並不下降。負載均衡器可以用兩種方法配置實現:
  • Kubernetes服務實現:所有Kubernetes叢集IP服務會自動在BPF中實現,為kube-proxy在叢集間提供負載均衡提供了一種高可擴充套件性選擇。

  • API驅動:對更超前的使用場景,擴充套件式API可以用來直接配置負載均衡模組。

簡化網路模型:將安全從地址層解耦出來極大簡化了網路模型:一個三層網路空間為所有服務端點提供連結,在其上分段,用策略層實現安全控制。這一簡化對擴充套件和排錯很有幫助。網路可以用兩種方式配置:
  • Overlay/VXLAN:此方法是在IP協議上負載身份資訊的最簡單整合方法。VXLAN使用硬體幫助實現最佳效能。

  • 直接路由:直接路由將路由功能授權給已有網路模組,例如內建Linux路由層,IPVLAN或者雲路由提供者。

視覺化/監測:跟策略類似,視覺化也在網路包和API呼叫兩個層面實現。所有視覺化資訊,不僅僅是IP地址和埠號,還包括豐富的工作流元資料,例如container/pod標簽和服務名。
  • 顯微鏡:顯微鏡為叢集層面提供基於標簽,安全身份和事件型別的過濾,提供安全和轉發事件的視覺化。

  • 基於BPF高效能監控:高效能BPF效能迴圈緩衝區(perf ring buffer)的設定,就是為了追蹤每秒百萬級的應用事件,提供整合BPF可程式設計性的高效通道,允許資料視覺化同時增加最小額外負載。

  • API驅動:所有視覺化都透過API提供介面,可以嵌入現有系統中。

解決問題:
  • 叢集連線狀態:Cilium週期性監控叢集連線狀態,包括節點之間延遲,判斷節點失效和底層網路問題

  • Prometheus儀錶:可以將Cilium整合到現有監控儀錶盤中。

  • 健康與狀態檢查:可靠健康和狀態檢查可以幫助評判構成元素的健康性。

  • 排錯和報表工具幫助自動檢測一般問題並蒐集bug報告。


開始

Cilium簡單易用,尤其在Kubernetes中:

$ curl -sLO https://releases.cilium.io/v1.0.0/examples/kubernetes/cilium.yaml
$ vim cilium.yaml [provide etcd or consul address]
$ kubectl create -f cilium.yaml
$ kubectl create -f demo_app.yaml
$ kubectl create -f http_policy.yaml
$ kubectl exec -ti xwing-68c6cb4b4b-red5 -- curl -s -XPUT deathstar/v1/exhaust-port
Access denied
上例是一個minikube簡單教程[9],實現了http感知網路策略的補註。更多資訊可以參考這裡[10]。
關於如何安裝Cilium,可以參考Kubernetes Quick Installation Guide[11]或者installation guides[12]。
未來路標功能

儘管Cilium1.0對所有人來說都是一個激動人心的路碑,但是我們已經開始規劃Cilium1.1中的新功能,那麼1.1之後版本會有哪些路標功能呢?
  • 多叢集服務路由:Cilium簡化網路模型、地址解耦和策略是的未來叢集之間擴充套件很容易。Cilium不需要複雜proxy或者Ingress方案,就可以支援跨叢集Kubernetes服務路由,並提供全部基於身份和API感知的安全功能。

  • 與OpenTracing、Jaeger和ZIPkin整合:BPF增加很少額外負載的特性使得它成為追蹤和控制系統最佳新技術。

  • CRI支援:考慮到很多社群的呼籲,我們希望支援CRI功能以便更好抽象container runtime環境。

  • 非容器負載:BPF資料通道不僅限於容器抽象,它只不過是第一個大力推廣的場景。未來版本將會提供APIs和如何與Linux任務、虛機的檔案,並提供如何將基於身份的安全空間與現存使用IP地址無法移植環境橋接的支援。

可以在github issue[13]網站找到更多1.1版本規劃。歡迎訪問並留下建議。
相關連結:
  1. https://cilium.io/blog/2018/04/17/why-is-the-kernel-community-replacing-iptables

  2. https://cilium.io/blog/2018/04/24/cilium-security-for-age-of-microservices

  3. http://docs.cilium.io/en/doc-1.0/intro/#functionality-overview

  4. https://cilium.io/blog/2018/04/17/why-is-the-kernel-community-replacing-iptables#bpf

  5. http://docs.cilium.io/en/doc-1.0/bpf/

  6. https://cilium.io/blog/2018/04/24/cilium-security-for-age-of-microservices

  7. https://github.com/spiffe/spiffe

  8. https://github.com/kubernetes/community/tree/master/wg-container-identity

  9. http://docs.cilium.io/en/doc-1.0/gettingstarted/minikube/

  10. http://docs.cilium.io/en/doc-1.0/gettingstarted/

  11. http://docs.cilium.io/en/doc-1.0/kubernetes/quickinstall/

  12. http://docs.cilium.io/en/doc-1.0/install/guides/#

  13. https://github.com/cilium/cilium/issues/3585

原文連結:https://cilium.io/blog/2018/04/24/cilium-10/

Kubernetes快速入門實戰培訓

本次培訓內容包括:容器介紹、容器網路、Kubernetes架構基礎介紹、安裝、設計理念、架構詳解、設計原則、常用物件、監控方案、Kubernetes高階設計和實現、微服務、實踐案例分享等,點選瞭解具體培訓內容
5月18日正式上課,點選閱讀原文連結即可報名。
贊(0)

分享創造快樂