Cilium——具備API感知的網絡和安全性管理軟件

ServiceMesher2018-11-12 03:32:22

Cilium是一個純開源軟件,沒有哪家公司提供商業化支持,也不是由某一公司開源,該軟件用於透明地保護使用Linux容器管理平臺(如Docker和Kubernetes)部署的服務之間的連接。

Cilium是一個純開源軟件,沒有哪家公司提供商業化支持,也不是由某一公司開源,該軟件用於透明地保護使用Linux容器管理平臺(如Docker和Kubernetes)部署的應用程序服務之間的網絡連接。

Cilium的基礎是一種名為BPF的新Linux內核技術,它可以在Linux本身動態插入強大的安全可見性和控制邏輯。由於BPF在Linux內核中運行,因此可以應用和更新Cilium安全策略,而無需對應用程序代碼或容器配置進行任何更改。

基於的應用程序分為小型獨立服務,這些服務使用HTTPgRPCKafka等輕量級協議通過API相互通信。但是,現有的Linux網絡安全機制(例如iptables)僅在網絡和傳輸層(即IP地址和端口)上運行,並且缺乏對微服務層的可見性。

Cilium為Linux容器框架(如DockerKubernetes)帶來了API感知網絡安全過濾。使用名為BPF的新Linux內核技術,Cilium提供了一種基於容器/容器標識定義和實施網絡層和應用層安全策略的簡單而有效的方法。

:Cilium中文意思是“纖毛“,它十分細小而又無處不在。

BPF

柏克萊封包過濾器(Berkeley Packet Filter,縮寫 BPF),是類Unix系統上數據鏈路層的一種原始接口,提供原始鏈路層封包的收發,除此之外,如果網卡驅動支持洪泛模式,那麼它可以讓網卡處於此種模式,這樣可以收到網絡上的所有包,不管他們的目的地是不是所在主機。參考維基百科和eBPF簡史。

特性

以下是Cilium的特性。

基於身份的安全性

Cilium可見性和安全策略基於容器編排系統的標識(例如,Kubernetes中的Label)。在編寫安全策略、審計和故障排查時,再也不用擔心網絡子網或容器IP地址了。

卓越的性能

BPF利用Linux底層的強大能力,通過提供Linux內核的沙盒可編程性來實現數據路徑,從而提供卓越的性能。

API協議可見性+安全性

傳統防火牆僅根據IP地址和端口等網絡標頭查看和過濾數據包。Cilium也可以這樣做,但也可以理解並過濾單個HTTP、gRPC和Kafka請求,這些請求將微服務拼接在一起。

專為擴展而設計

Cilium是為擴展而設計的,在部署新pod時不需要節點間交互,並且通過高度可擴展的鍵值存儲進行所有協調。

為什麼選擇Cilium?

現代數據中心應用程序的開發已經轉向面向服務的體系結構(SOA),通常稱為微服務,其中大型應用程序被分成小型獨立服務,這些服務使用HTTP等輕量級協議通過API相互通信。微服務應用程序往往是高度動態的,作為持續交付的一部分部署的滾動更新期間單個容器啟動或銷燬,應用程序擴展/縮小以適應負載變化。

這種向高度動態的微服務的轉變過程,給確保微服務之間的連接方面提出了挑戰和機遇。傳統的Linux網絡安全方法(例如iptables)過濾IP地址和TCP/UDP端口,但IP地址經常在動態微服務環境中流失。容器的高度不穩定的生命週期導致這些方法難以與應用程序並排擴展,因為負載均衡表和訪問控制列表要不斷更新,可能增長成包含數十萬條規則。出於安全目的,協議端口(例如,用於HTTP流量的TCP端口80)不能再用於區分應用流量,因為該端口用於跨服務的各種消息。

另一個挑戰是提供準確的可見性,因為傳統系統使用IP地址作為主要識別工具,其在微服務架構中的壽命可能才僅僅幾秒鐘,被大大縮短。

利用Linux BPF,Cilium保留了透明地插入安全可視性+強制執行的能力,但這種方式基於服務/pod/容器標識(與傳統系統中的IP地址識別相反),並且可以根據應用層進行過濾 (例如HTTP)。因此,通過將安全性與尋址分離,Cilium不僅可以在高度動態的環境中應用安全策略,而且除了提供傳統的第3層和第4層分割之外,還可以通過在HTTP層運行來提供更強的安全隔離。 。

BPF的使用使得Cilium能夠以高度可擴展的方式實現以上功能,即使對於大規模環境也不例外。

功能概述

透明的保護API

能夠保護現代應用程序協議,如REST/HTTP、gRPC和Kafka。傳統防火牆在第3層和第4層運行,在特定端口上運行的協議要麼完全受信任,要麼完全被阻止。Cilium提供了過濾各個應用程序協議請求的功能,例如:

  • 允許所有帶有方法 GET和路徑 /public/.*的HTTP請求。拒絕所有其他請求。

  • 允許 service1在Kafka topic上生成 topic1, service2消費 topic1。拒絕所有其他Kafka消息。

  • 要求HTTP標頭 X-Token:[0-9]+出現在所有REST調用中。

詳情請參考7層協議。

基於身份來保護服務間通信

現代分佈式應用程序依賴於諸如容器之類的技術來促進敏捷性並按需擴展。這將導致在短時間內啟動大量應用容器。典型的容器防火牆通過過濾源IP地址和目標端口來保護工作負載。這就要求不論在集群中的哪個位置啟動容器時都要操作所有服務器上的防火牆。

為了避免受到規模限制,Cilium為共享相同安全策略的應用程序容器組分配安全標識。然後,該標識與應用程序容器發出的所有網絡數據包相關聯,從而允許驗證接收節點處的身份。使用鍵值存儲執行安全身份管理。

安全訪問外部服務

基於標籤的安全性是集群內部訪問控制的首選工具。為了保護對外部服務的訪問,支持入口(ingress)和出口(egress)的傳統基於CIDR的安全策略。這允許限制對應用程序容器的訪問以及對特定IP範圍的訪問。

簡單網絡

一個簡單的扁平第3層網絡能夠跨越多個集群連接所有應用程序容器。使用主機範圍分配器可以簡化IP分配。這意味著每個主機可以在主機之間沒有任何協調的情況下分配IP。

支持以下多節點網絡模型:

  • Overlay:基於封裝的虛擬網絡產生所有主機。目前VXLAN和Geneve已經完成,但可以啟用Linux支持的所有封裝格式。

    • 何時使用此模式:此模式具有最小的基礎架構和集成要求。它幾乎適用於任何網絡基礎架構,唯一的要求是主機之間可以通過IP連接。

  • 本機路由:使用Linux主機的常規路由表。網絡必須能夠路由應用程序容器的IP地址。

    • 何時使用此模式:此模式適用於高級用戶,需要了解底層網絡基礎結構。此模式適用於:

  • 本地IPv6網絡

  • 與雲網絡路由器配合使用

  • 如果您已經在運行路由守護進程

負載均衡

應用程序容器和外部服務之間的流量的分佈式負載均衡。負載均衡使用BPF實現,允許幾乎無限的規模,並且如果未在源主機上執行負載均衡操作,則支持直接服務器返回(DSR)。

注意:負載均衡需要啟用連接跟蹤。這是默認值。

監控和故障排除

可見性和故障排查是任何分佈式系統運行的基礎。雖然我們喜歡用 tcpdumpping,它們很好用,但我們努力為故障排除提供更好的工具。包括以下工具:

  • 使用元數據進行事件監控:當數據包被丟棄時,該工具不僅僅報告數據包的源IP和目標IP,該工具還提供發送方和接收方的完整標籤信息等。

  • 策略決策跟蹤:為什麼丟棄數據包或拒絕請求。策略跟蹤框架允許跟蹤運行工作負載和基於任意標籤定義的策略決策過程。

  • 通過Prometheus導出指標:通過Prometheus導出關鍵指標,以便與現有儀表板集成。

集成

  • 網絡插件集成:CNI、libnetwork

  • 容器運行時:containerd

  • Kubernetes:NetworkPolicy、Label、Ingress、Service

  • 日誌記錄:syslog、fluentd

參考

  • Cilium官方網站 - cilium.io

  • eBPF 簡史 - ibm.com

  • 網絡層攔截可選項 - zhihu.com

點擊【閱讀原文】跳轉到網站上瀏覽可以查看文中的鏈接。

相關閱讀推薦

  • Cilium 1.3:具有Cassandra和Memcached支持的Envoy Go語言擴展

  • 使用Cilium增強Istio|通過Socket感知BPF程序

  • SOFAMesh中的Go語言Sidecar代理SOFAMosn的誕生和特性總覽

  • 理解 Istio Service Mesh 中 Envoy 代理 Sidecar 注入及流量劫持

  • 微服務中的Sidecar設計模式解析


Istio

IBM Istio

  • 111 Istio

  • 118 週四晚8點Istio系列第二講:上手Istio: 基本概念,安裝並使用istio進行微服務流量管控

  • 1115 Istio

  • 11月22日 Envoy

  • 1129 使Istio

  • 126 Istio mixer -

  • 1213 Istio

  • 1220 Istio使Serverless knative

  • IBMIstio

  • SOFAMesh(https://github.com/alipay/sofa-mesh)基於Istio的大規模服務網格解決方案

  • SOFAMosn(https://github.com/alipay/sofa-mosn)使用Go語言開發的高性能Sidecar代理

合作社區

參與社區

以下是參與ServiceMesher社區的方式,最簡單的方式是聯繫我!

  • 加入微信交流群:關注本微信公眾號後訪問主頁右下角有獲取聯繫方式按鈕,添加好友時請註明姓名-公司

  • 社區網址:http://www.servicemesher.com

  • Slack:https://servicemesher.slack.com (需要邀請才能加入)

  • GitHub:https://github.com/servicemesher

  • Istio中文文檔進度追蹤:https://github.com/servicemesher/istio-official-translation

  • Twitter: https://twitter.com/servicemesher

  • 提供文章線索與投稿:https://github.com/servicemesher/trans



閱讀原文

TAGS: