簡單介紹Istio
What is Istio?
1. Is a service mesh, implement network mechanism
- service mesh 基本上是透過在 Pod 上面做 Sidecar
- 把網路相關的工作剝離出來,讓工程師可以專注在開發上
- 而網路的控管像是 Gatewway,經過 pod 的 request 都是經由 Sidecar 轉發給 pod。
2. Integrate with many observability tools
- 不只可以做網路,還可以整合各種第三方的觀察工具
- (e.g. Prometheus, Kiali, Grafana, etc.)。
3. Handle microservice challenges
- 在 microservice 架構下當 service/pod 一多,要去管控各個 service 間的網路連線是非常頭痛的
- 但是透過Istio可以負責解決網路的事情,並由control plane統一管理和設定。
可以從上方看到,每個Pod裡面有兩個container,一個是Service另一個是Proxy,而Istio主要就是透過Control Plane來控制Proxy進行網路流量的操控與設定。
注意:Sidecar不是只負責把網路相關的工作剝離,Sidecar是一種附加在Pod內的容器,用於提供額外的功能或服務,與主要應用容器共同運行並共享相同的生命周期。像是如果要收集pod的log,通常就會需要fluentd的Sidecar共享pod的產生log的資料夾,把log傳送給elasticSearch。
Istio 的主要核心
Istio 主要有兩個核心元件:
- Envoy: 就在Proxy旁邊
- 目的:Istio使用Envoy Agent作為與data plane交互的Istio元件,被部署為服務的Sidecar。主要協調Service Mesh中所有服務進去和出去的流量。
- 功能:動態的service discover, load balance, TLS, Http/2和gRPC agent, health check, 金絲雀發布 等等。
- 貢獻:可以允許Istio執行決策並且提取豐富的數據,並發送數據到監控系統中提供整個Mesh的行為信息。
- Istiod: 就在Control Plane
- 目的:提供service discover, 配置和憑證管理負責實現強大的服務隊服務的用戶認證,可以用來升級服務網格中未加密的流量,對不穩定的layer 3 (network)或是 layer 4 (Transport layer, TCP)來執行策略。
Istio 如何做到安全?
- 在
Control Plane
可以看到Istiod
負責:- 憑證與授權管理
- 網路設定
- 授權政策設定
使用Istio有以下特色
- Secure by default : 透過Sidecar的方式應用程式代碼和基礎設施不需更改。
- Defense in depth:與現有安全系統集成以提供多層防禦。
- Zero-trust network:在不受信任的網路上建構安全解決方案。
- Secure Endpoints, Communication, Platform, Data
- Do Identity, Policy, AAA, Encryption
Istio 的安全元件
- CA:用於密鑰和憑證管理的頒發機構CA。
- 配置API服務器:把認證策略, 授權策略, 安全命名分發給agent。
- Sidecar和邊緣agent作為PEP:保護客戶端和服務之間的通信安全。而PEP用Envoy實現。
- 一組Envoy Agent Extension:用於監控和審計。
Istio 身份和憑證管理
注意:以下內容的istio-agent
是指Sidecar容器中的pilot-agent
process。
Istio-agent
在啟動時,創建pk 和 CSR 並且把 CSR和憑證送到istiod
簽名。Istiod CA
驗證CSR裡面的憑證,在成功驗證後簽署CSR以生成證書。- 當工作附載啟動時,Envoy 通過
Secret Discover Service (SDS) API
向同容器內的istio-agent
發送憑證和pk請求。 Istio-agent
透過Envoy SDS API
將從istiod
收到的證書和密鑰發送給Envoy。Istio-agent
監控工作負載憑證的過期時間,會定期重複做憑證和pk的輪換。
Istio 的政策授權
畢竟Istio的重點在控制Pod服務的網路流量,因此要對於特定情況的流量應該作接受還是拒絕,仍然要政策的設置與規則引擎的判斷。Istio有提供政策的設置,若要建立授權策略需要創建 AuthorizationPolicy
的自定義資源。一個授權策略包含:
Selector
選擇器:用來指定策略的執行目標。Action
操作:指定允許還是拒絕請求。Rules
規則集:指定何時觸發動作。From
:指定請求的來源To
:指定請求的操作When
:指定規則所需的條件
以下是策略設定的範例:
1 | apiVersion: security.istio.io/v1 |
Istio 的政策驗證流程
- 在對Server端的Envoy Agent進入流量實施訪問控制,
- 每個Envoy Agent會運行一個授權的引擎,該引擎會根據當前的策略,評估上下文。
- 然後返回授權結果Allow或Deny。
- 而策略是使用
.yaml
文件指定Istio授權策略。 - 如果沒有相關的授權策略,Istio允許所有請求。
- 支援
Custom
操作,可以根據需求設定策略執行不同的操作。 - 檢查順序的匹配規則是:
Custom
>Deny
>Allow
,會先檢查是否有策略的操作被應用,檢查策略的規則是否滿足。如果其中一層的不匹配就執行到下一層(可以參考下圖)。
參考資料
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Shannon's Blog 🐟 技術 | 生活 | 旅行! 如果你覺得我的文章有幫助,希望你可以到我的 github 給我一個 star ⭐️ Shannon Blog Repo
評論