本文轉載自:www.servicemesher.com/blog/cilium…
我們很高興地宣佈推出Cilium 1.2。該版本引入了幾個新功能實現了Cilium使用者和社群成員最迫切想要的功能。其中最吸引人的功能之一是引入基於DNS 名稱的安全策略,目的是保護對叢集外服務的訪問。另一個最受關注的問題是加入了連線和保護多個Kubernetes叢集的能力。我們將ClusterMesh功能進入Alpha版本。它可以連線和保護在多個Kubernetes叢集中執行的pod。Kube-router與Cilium的整合同等重要。DigitalOcean團隊的努力使kube-router提供BGP網路與Cilium提供的基於BPF的安全性和負載均衡相結合。整個Cilium開發者社群貢獻者總數已增加到85個,在1.1到1.2版本內貢獻了579個PR。
Cilium是什麼?
Cilium是一個開源軟體,用於在Kubernetes、Docker和Mesos等Linux容器管理平臺部署的應用程式服務之間提供透明連線、保護網路和API。
Cilium是基於一種叫BPF的新核心技術,它使得能夠在Linux自身內部動態插入強大的安全性、可見性和網路控制邏輯。除了提供傳統的網路級安全性之外,BPF的靈活性還可以在API和程式級別實現安全性,以保護容器或pod內的通訊。
有關Cilium的更詳細的介紹,請參閱Cilium簡介部分。
1.2版本的重要功能
- 基於DNS/FQDN的安全策略
- 基於FQDN/DNS命名定義網路安全規則,表示允許連線到外部服務。例如,允許訪問foo.com。(處於Beta版)
- 支援AWS EKS
- 為管理Kubernetes整合量身定製的etcd operator,消除了對需要外部kvstore的依賴。(處於Beta版)
- Clustermesh(叢集間連線)
- 跨多個Kubernetes叢集的pod間網路連線。(處於Alpha版)
- 跨叢集的基於label的網路安全策略實施,例如允許cluster1中的pod foo與cluster2中的pod bar通訊。
- 為支援BPF整合Kube-route
- 與kube-router一起協作執行以啟用BGP網路。
- 基於節點發現的KV儲存
- 在非Kubernetes環境中啟用自動節點發現。
- 負載均衡
- 支援一致的後端selection用於服務後端擴縮容
- 支援基於服務label/name的策略以及L4規則
- 高效性 & 擴縮容
- 對於大型和多叢集規模的環境,安全身份認證空間從16bits增加到24bits。
- 首次實現基於BPF的資料路徑通知聚合。
- 取得持續高效的CPU利用進展。
- 自動檢測underlying網路的MTU。
- 禁用DSR時使用本地service ID分配以提高負載均衡可伸縮性。
- 文件
- 新的AWS EKS安裝指南。
- 參考kubespray安裝指南。
- 新的簡化安裝和升級說明。
基於DNS的安全策略
在Kubernetes叢集中執行的服務通常與叢集外部的一系列服務進行互動。常見示例包括SaaS服務,如S3、RDS、DynamoDB等。基於API的服務,例如Google地圖、Salesforce API、Twilio等。或自託管服務,如Oracle資料庫叢集、基於Windows的應用程式等。到目前為止,Cilium支援基於CIDR的策略,以便與此類外部服務進行互動。然而,基於CIDR的策略很難定義和維護,因為服務的IP地址可能經常發生變化。Cilium 1.2現在支援基於DNS名稱的特定策略。當前實現支援基於其FQDN的白名單外部服務的核心例項。考慮到DNS解決方案(例如TTL、CNAME等)和相關策略要求(例如*.google.com
等基於萬用字元的規範)的複雜性,對於基於DNS的綜合策略,後續版本中還有更多工作要做。
示例:允許訪問my-remote-service.com
下面的簡單示例演示瞭如何定義網路安全策略,該策略允許所有label為app = test-app
的pod通過kube-dns解析DNS名稱,並向服務my-remote-service.com
發出外部請求:
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "to-fqdn-example"
spec:
endpointSelector:
matchLabels:
app: test-app
egress:
- toFQDNs:
- matchName: "my-remote-service.com"
- toEndpoints:
- matchLabels:
"k8s:io.cilium.k8s.policy.serviceaccount": kube-dns
"k8s:io.kubernetes.pod.namespace": kube-system
"k8s:k8s-app": kube-dns
toPorts:
- ports:
- port: "53"
protocol: UDP
複製程式碼
Cilium將自動維護相應的基於CIDR的規則,以允許所有pod與所有為該DNS名稱返回的IP地址進行通訊。
支援AWS EKS
按照AWS EKS上使用etcd operator的新指南,在AWS EKS託管的Kubernetes叢集上安裝Cilium。
安裝指南為Cilium提供全新的整合etcd operator,以管理自己的etcd叢集。在許多情況下,Kubernetes使用的etcd無法被Cilium使用。例如,在管理的Kubernetes中,例如EKS、GKE、AKS等。可以有限地訪問Kubernetes etcd服務。在Cilium 1.2中,我們使用了一個etcd operator,它將安裝和管理一個高度可用的etcd叢集供Cilium使用。這將使Cilium的安裝和使用變得更加容易,而不依賴於Kubernetes等,並且不需要對etcd叢集進行額外管理。我們正在積極致力於AKS整合,並將在未來幾周內釋出關於如何在GKE上執行的指南。如果您有任何問題或需要幫助,請使用Slack聯絡。
ClusterMesh:跨多個Kubernetes叢集的網路連通和安全性
執行多個Kubernetes叢集變得越來越普遍。執行在不同可用區或Regions服務的高可用例項;在多個叢集中執行的point-of-presence,服務於不同的地理位置;組織原因如分離PCI與非PCI相容服務;或者簡單地分離dev、test和prod工作負載。
執行多個Kubernetes叢集的基本要求之一是如何連線服務以及如何為跨叢集互動保證東西流量安全。在Cilium 1.2中,我們將引入多叢集中不請求ingress controller或者負載均衡實現不同叢集pod之間連線的能力。由於pod間可以直接互動,因此Cilium能夠保留其身份認證並對東西向流量實施完整的L3/L4和L7訪問控制。
Cilium使用去中心化的方式建立Cluster Mesh並建立pod身份認證,而不是為所有叢集使用單個集中式etcd。用這種方式,每個叢集都能獨立管理它們pod的身份。每個叢集都被賦予一個獨立的標識作為身份名稱空間。因此pod身份成為叢集身份+ pod身份的組合。這種方法易於管理和擴充套件,而不用協調所有叢集中的身份。這種方式與多叢集高可用目標保持一致,每個叢集的生命週期獨立於其他叢集的生命週期。檢視多叢集安裝指南試著體驗Cilium cluster-mesh。
BGP支援:基於Kube-router + Cilium
Kube-router是一個由cloudnativelabs倡議,旨在滿足各種Kubernetes網路需求並提供統一的解決方案。從資料轉發的角度來看,Kube-router使用BGP來廣播和管理叢集中所有pod的路由。通過與外部路由器進行BGP配對,Kube-router可以輕鬆地在Kubernetes pod與叢集外部執行的服務之間建立連線。此外,Kube-router建立服務時告知cluster IP,這意味著可以使用單個cluster IP和標準埠從叢集外部訪問服務。
由DigitalOcean團隊領導的社群工作,Cilium現已整合Kube-router,整合了BPF和基於BGP路由。檢視使用kube-router執行BGP指南去了解如何並行執行kube-router和Cilium以執行擁有Cilium L3-L7策略和負載均衡的BGP網路。
支援Istio 1.0
Istio 1.0釋出了快一個月了。Cilium已與Istio完美整合,可為Service Mesh架構提供高效的資料轉發以及L3/L4和L7安全性。我們在部落格 中詳細介紹了這一點Istio 1.0:Cilium如何通過socket感知BPF程式增強Istio。Cilium 1.2包含了與Istio 1.0整合的幾項改進。
可擴充套件性和高效
同樣,通過在各種環境中大量分析Cilium效能指標和並優化連線跟蹤和其他關鍵資料結構的操作,繼續大力改進已經很好的可擴充套件性並提高CPU效率。如果您想了解更多,請在Slack上跟我們聯絡。
升級說明
同樣,請按照指南升級升級你的Cilium deployment。隨意在Slack上聯絡我們。
釋出
- 容器映象:
docker.io/cilium/cilium:v1.2.0複製程式碼
ServiceMesher社群資訊
Slack:servicemesher.slack.com 需要邀請才能加入,有志於加入ServiceMesher社群為Service Mesh作出貢獻的同學可以聯絡我。
Twitter: twitter.com/servicemesh…
更多Service Mesh諮詢請掃碼關注微信公眾號ServiceMesher。