Cilium 作為 Kubernetes 原生的網路安全解決方案,提供根據 eBPF 的高效能網路和安全策略執行能力。本文除了介紹如何利用 Cilium 建構叢集全域網路策略,更進一步說明如何結合 Hubble 的可觀測性,實作更精細的流量控制和安全管理。透過 Hubble CLI 和 UI,可以即時監控網路流量、分析策略效能,並快速診斷網路問題。此外,Hubble Timescape 和 Network Policy Editor 則簡化了策略管理和故障排除流程,讓開發者能更輕鬆地實施和維護零信任安全模型。最後,文章還介紹了 Isovalent 企業級儀錶板,提供更全面的叢集健康狀態監控和策略執行分析,協助企業更好地管理和保護 Kubernetes 環境。
Kubernetes叢集安全:Cilium叢集全域網路策略的實施
在確保Kubernetes叢集安全性的過程中,組態Cilium叢集全域網路策略(Cluster Wide Network Policies)是關鍵步驟,以建立一致的安全基準和防護措施。這些策略能夠有效地控制叢集內的流量,確保只有授權的通訊被允許。
叢集全域網路策略的典型規則
名稱空間內通訊允許:允許同一名稱空間內的入口和出口流量,以促進內部通訊的順暢,同時保持叢集整體的安全性。
出口至外部服務:組態必要的規則,以允許出口流量到達叢集範圍內的分享服務,如kube-dns和Prometheus。此外,還允許流量到達由CIDR或FQDN標識的外部分享基礎設施資源,例如日誌記錄、監控和保險函式庫服務。
入口至內部服務:如果需要,組態網路策略以允許來自外部來源的入口流量。利用型別為LoadBalancer的服務資源來接收流量。最佳實踐是組態Gateway資源,例如使用HTTPRoute資源來定義哪些L7流量和路徑應該可以從外部來源存取。
預設拒絕入口/出口:實施預設拒絕所有入口和出口流量的策略,需要明確的規則來允許通訊。這種方法確保只有授權的流量被允許進出叢集。
叢集全域策略的關鍵使用案例
一個關鍵的使用案例是明確拒絕到受限目的地的流量,例如阻止與受限制國家相關的IP地址或能夠阻止眾所周知的惡意IP。實施這些策略有助於遵守法規和企業標準,並保護基礎設施免受未經授權的存取。這種方法整合到更廣泛的安全框架中,在滿足合規要求(如GDPR或出口管制法規)方面發揮著至關重要的作用,並為出口流量提供了額外的控制層。
實施網路策略的挑戰
即使擁有最佳的網路策略,實施它仍然是一個重大挑戰,尤其是在依賴傳統工具或手動流程時。隨著企業規模的擴大,在各種環境中管理網路策略的複雜性增加,使得手動方法容易出錯和效率低下。
主要挑戰包括:
缺乏可視性:沒有深入瞭解服務之間的流量流動,很難理解哪些策略是必要的,或者當前組態是否正在阻止必要的通訊。
操作複雜性:手動建立、更新和執行網路策略,跨越多樣且不斷演變的應用程式,引入了操作開銷,導致組態錯誤或盲點,從而使基礎設施面臨威脅。
可擴充套件性問題:隨著應用程式的擴充套件,微服務及其依賴項的數量增加,使得沒有自動化工具就很難高效地管理網路策略。
無效的故障排除:當策略意外地阻止流量時,傳統工具缺乏實時可觀察性,無法快速診斷和修復問題而不造成停機。
實戰案例:使用Isovalent平台實施網路策略
現在,我們將重點放在使用由Cilium和Hubble驅動的Isovalent平台實施一個真實世界的示例。我們的應用程式根據Google提供的微服務演示——Online Boutique。
Online Boutique應用程式架構
Online Boutique包含11個用不同語言編寫的微服務,每個微服務都有自己的通訊模式和依賴項。下面是該應用程式的高階架構圖:
frontend:暴露HTTP伺服器以提供網站服務。不需要註冊/登入,並自動為所有使用者生成會話ID。
cartservice:將使用者購物車中的商品儲存在Redis中並檢索它。
productcatalogservice:提供來自JSON檔案的產品列表,並能夠搜尋產品和取得單個產品。
currencyservice:將一種貨幣金額轉換為另一種貨幣。使用從歐洲中央銀行取得的真實值。它是QPS最高的服務。
paymentservice:使用給定的信用卡資訊(模擬)收取給定的金額,並傳回交易ID。
shippingservice:根據購物車提供運費估計。將商品運送到給定的地址(模擬)。
emailservice:向使用者傳送訂單確認電子郵件(模擬)。
checkoutservice:檢索使用者購物車,準備訂單並協調支付、運輸和電子郵件通知。
recommendationservice:根據購物車中的內容推薦其他產品。
adservice:根據給定的上下文詞提供文字廣告。
loadgenerator:不斷傳送請求,模擬真實使用者購物流程到前端。
零信任安全模型在Kubernetes中的應用
零信任安全模型根據驗證每一個連線,不自動信任任何實體(無論是在網路內部還是外部)的原則。這種方法透過只允許明確授權和持續驗證的通訊來最小化攻擊面。
應用零信任原則於Kubernetes
在Kubernetes中應用零信任原則,我們著重於在多個層面上減少攻擊面。像Cilium這樣的網路策略,可以對哪些服務可以進行通訊(無論是在叢集內還是外部)實施細粒度控制。這確保了即使是內部流量也受到嚴格的驗證,從而降低未經授權的行為者橫向移動的風險。
示範應用程式的安全問題
目前,該應用程式存在以下安全問題:
- 前端可以存取網際網路上的任何服務,存在資料洩露或違規的風險。
- 微服務之間的內部通訊不受限制,增加了在受到損害的情況下橫向移動的風險。
- 對入口流量沒有控制,意味著外部來源可以自由存取微服務而無需驗證。
- 像支付服務這樣的關鍵服務沒有特定的策略來限制其外部通訊,使其容易受到攻擊。
Hubble:提供無與倫比的可觀測性
Hubble提供了無與倫比的可觀測性,透過eBPF以完全透明的方式深入瞭解服務和網路基礎設施的通訊和行為。藉助Hubble,您可以在節點、叢集甚至跨叢集(Cluster Mesh)環境中實作細粒度可視性。這使您能夠最佳化效能、快速排除故障並確保整個網路的強大安全性。
Hubble CLI
Hubble的CLI擴充套件了標準kubectl命令(如kubectl get pods)提供的可見性,為您提供了更多關於請求的網路級別詳細資訊,例如其狀態以及與其源和目標相關聯的安全身份。
使用Hubble CLI觀察來自Cilium代理的網路流。使用者可以從本地工作站觀察流,以進行故障排除或監控。
# hubble observe -n microservices-demo
Sep 13 12:10:11.267: microservices-demo/loadgenerator-856dc76c97-ggjbn:38151 (ID:63434) <- kube-system/coredns-76f75df574-5gt56:53 (ID:31390) to-endpoint FORWARDED (UDP)
Sep 13 12:10:11.268: microservices-demo/loadgenerator-856dc76c97-ggjbn:43932 (ID:63434) -> microservices-demo/frontend-6d9488c857-xcnsq:8080 (ID:3374) to-overlay FORWARDED (TCP Flags: ACK, PSH)
Hubble UI
Hubble UI提供了一個圖形介面,能夠根據從執行Cilium的平台捕捉的網路流進行視覺化和執行決策。下面我們可以看到一個服務地圖,顯示了在microservices-demo名稱空間中執行的服務之間的通訊路徑。
Hubble UI 的特點
- 提供服務地圖和通訊路徑的視覺化。
- 允許選擇網路流以顯示進一步的資訊和後設資料,包括原始JSON輸出。
- 支援多租戶自助服務存取,透過OpenID Connect(OIDC)整合,與現有的身份和授權平台(如Okta、Auth0等)整合。
- 實施根據角色的存取控制(RBAC)設定,使您能夠管理哪些資料可以被存取以及由誰在您的組織記憶體取。
Cilium網路策略的詳細資訊
Cilium網路策略可以歸因於特定的流,這也捕捉在JSON輸出中。在下面的輸出中,ingress_allowed_by欄位填充了關於允許特定流量的網路策略的資料。
{
"ingress_allowed_by": [
{
"name": "allow-ingress",
"namespace": "microservices-demo",
"labels": [
"k8s:io.cilium.k8s.policy.derived-from=CiliumNetworkPolicy",
"k8s:io.cilium.k8s.policy.name=allow-ingress",
"k8s:io.cilium.k8s.policy.namespace=microservices-demo",
"k8s:io.cilium.k8s.policy.uid=40768eb8-effe-440d-b3fb-9a937c4fb07c"
],
"revision": "2"
}
]
}
詳細JSON輸出內容解讀
“l7”: {
“type”: 1,
“latency_ns”: 0,
“record”: {
“oneofKind”: “http”,
“http”: {
“code”: 0,
“method”: “POST”,
“url”: “http://recommendationservice:8080/hipstershop.RecommendationService/ListRecommendations”,
“protocol”: “HTTP/2”,
“headers”: [
{
“key”: “:scheme”,
“value”: “http”
},
{
“key”: “Content-Type”,
“value”: “application/grpc”
},
# ... 其他 headers
]
}
}
}
內容解密:
l7欄位:表示第七層(應用層)的詳細資訊。type欄位:表示協定型別,這裡是1,可能代表某種特定的協定或編碼方式。latency_ns欄位:表示延遲時間,以奈秒為單位,這裡是0,意味著沒有記錄到延遲。record欄位:包含了具體的記錄資訊,這裡是HTTP請求的詳細資訊。http欄位:包含了HTTP請求的方法、URL、協定版本、以及headers等詳細資訊。method:HTTP請求的方法,這裡是POST。url:請求的URL,這裡指向recommendationservice服務的一個特定方法。protocol:使用的協定版本,這裡是HTTP/2。headers:包含了一系列的HTTP頭資訊,用於傳遞額外的資訊。
透過這些詳細資訊,可以深入瞭解服務之間的通訊行為,從而更好地最佳化和保護Kubernetes環境中的網路流量。
Hubble 的進階功能與應用
在現代化的雲端原生環境中,確保應用程式的安全性和可視性是一項艱鉅的任務。Cilium 和 Hubble 提供了一系列強大的工具來簡化這一過程。本文將探討 Hubble 的進階功能,包括 Hubble Timescape、Network Policy Editor 和 Hubble Metrics,並展示如何利用這些功能來加強應用程式的安全性和可觀測性。
Hubble Timescape:網路流量的時間軸檢視
在高度動態的環境中,網路流量模式可能會頻繁變化,使得網路策略的制定變得困難。Hubble Timescape 透過提供工作負載生命週期內完整的網路流量軌跡,幫助使用者瞭解過去的流量行為和服務之間的互動。這對於完善網路策略、實作零信任安全模型至關重要。
主要特點
- 歷史流量分析:檢視特定時間範圍內的網路流量。
- 網路策略變更記錄:記錄網路策略的新建、更新和刪除事件。
- 視覺化介面:透過線圖展示捕捉的流量數量和網路策略變更。
實際應用
透過 Hubble Timescape,使用者可以在應用程式生命週期內觀察網路流量的變化,並據此調整網路策略。這種能力在測試和實施網路策略時尤其寶貴,可以減少中斷或組態錯誤的風險。
Network Policy Editor:簡化網路策略管理
Network Policy Editor 是 Hubble 的一個元件,允許使用者視覺化現有的網路策略,並建立新的策略,無論是從零開始還是根據觀察到的流量。
主要特點
- 視覺化編輯:使用圖形介面建立和編輯網路策略。
- 支援多種策略格式:相容 Kubernetes Network Policies 和 Cilium Network Policies。
- Layer 7 策略支援:提供對應用層流量的精細控制。
實際應用
透過 Network Policy Editor,使用者可以根據實際的網路流量建立精確的網路策略。例如,為 checkoutservice 建立策略,允許來自叢集內的流量,並拒絕其他所有流量。
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-in-out-to-checkout
namespace: microservices-demo
spec:
endpointSelector:
matchLabels:
app: checkoutservice
ingress:
- fromEntities:
- cluster
egress:
- toEntities:
- cluster
- toEndpoints:
- matchLabels:
io.kubernetes.pod.namespace: kube-system
k8s-app: kube-dns
toPorts:
- ports:
- port: "53"
protocol: UDP
rules:
dns:
- matchPattern: "*"
Hubble Metrics:深入洞察網路效能
Cilium 和 Hubble 提供 OpenMetrics 格式的指標,可以被多種工具收集和視覺化。這些指標提供了對網路效能和安全性的深入洞察。
主要特點
- 豐富的指標資料:涵蓋所有 Cilium 處理的流量、丟包和策略判決等。
- 靈活的視覺化選項:支援 Prometheus、Grafana 等多種工具。
實際應用
透過 Hubble Metrics,使用者可以監控網路策略的執行情況,並根據 Layer 7 的指標進行應用層的監控和故障排除。例如,利用 hubble_policy_verdicts_total 指標來分析網路策略的判決結果。
Isovalent作為Cilium的創造者,專注於為企業提供成熟的軟體解決方案,幫助企業簡化雲原生平台的運作負擔。對於平台維運人員來說,Isovalent企業客戶還可以存取額外的開箱即用的企業級平台儀錶板,用於監控Cilium在平台內的健康狀況和運作情況。
透過「高階健康狀態」儀錶板,使用者可以全面瞭解Cilium在受監控平台內的整體健康狀態。圖27展示了該儀錶板的策略執行部分,提供了諸如Cilium策略引擎中的關鍵訊號追蹤指標等資訊。