Dapr 使用 sidecar 架構,與應用程序一起作爲單獨的流程運行,包括服務調用、網絡安全和分佈式跟蹤等功能
1 共同點:
- 基於 mTLS 加密的服務到服務安全通信
- 服務到服務的度量指標收集
- 服務到服務分佈式跟蹤
- 故障重試恢復能力
2 不同點:
- Dapr 以開發人員爲中心,提供了通過名稱進行服務發現和調用的方式。
- 服務網格在網絡級別運行,並跟蹤服務之間的網絡調用。
- Dapr 可以在 發佈/訂閱 調用時,將相關的跟蹤 Id 寫入 Cloud Events 信封來達到此目的 。度量和跟蹤比使用“服務到服務調用”及“發佈/訂閱進行通信”的服務網格更易擴展
- Dapr 也適用於服務網格。如果兩者部署在一起,Dapr 和服務網格的 sidecar 都在應用環境中運行。
2 雲平臺和邊緣計算的微服務構建塊
構建塊 | 終結點 | 說明 |
---|---|---|
服務調用 | /v1.0/invoke | 服務調用使應用程序能夠通過 Http 或 gRPC 消息形式相互通信。 Dapr 提供了一個終結點,它充當反向代理與內置服務發現的組合,同時內置分佈式跟蹤和錯誤處理。 |
狀態管理 | /v1.0/state | 應用程序狀態是應用程序想要保留在單個會話之外的任何內容。 Dapr 提供基於鍵 / 值的狀態 API ,使用可插拔的狀態存儲進行持久化。 |
發佈訂閱 | /v1.0/publish /v1.0/subscribe | 發佈/預訂是鬆散耦合的消息傳遞模式,發送方 (或發佈者) 將消息推送到訂閱者預訂的主題。 Dapr 支持應用程序之間的發佈/訂閱模式。 |
資源綁定 | /v1.0/bindings | 綁定提供一個外部雲與本地服務或系統的雙向連接。 Dapr 允許您通過 Dapr 綁定 API 調用外部服務,也可以通過已連接的服務發送的事件來觸發應用程序。 |
Actors | /v1.0/actors | 參與者是孤立的獨立計算單元,具有單線程執行。 Dapr提供了基於Virtual Actor模式的actor實現,該模式提供了單線程編程模型,並且在不使用actor時會對其進行垃圾回收。 |
可觀測性 | N/A | Dapr 系統組件和運行時記錄 metrics,log 和 trace 以調試,操作和監視 Dapr 系統服務,組件和用戶應用程序。 |
祕密 | /v1.0/secrets | Dapr 提供一個機密構建塊 API ,並與 Azure Key Vault 和 Kubernetes 等機密商店集成,以存儲機密。 服務代碼可以調用密鑰 API 從 Dapr 支持的密鑰存儲中檢索密鑰。 |
1 邊車架構
. Dapr以 sidecar 架構的方式公開其API,可以是容器,也可以是進程,不需要應用代碼包含任何 Dapr 運行時代碼
2 託管環境
- 自託管 Dapr 運行一個單獨的 sidecar 程序,在您的服務代碼中可以通過 HTTP 或 gRPC 調用它。 每個運行的服務都有一個 Dapr 運行時進程 (或 sidecar) ,配置爲使用狀態存儲, pub/sub,綁定組件和其他構建塊。
- Kubernetes 託管 在託管在容器環境中(如 Kubernetes),Dapr 作爲 sidecar 容器運行,和應用程序容器在同一個 pod 中
在 Kubernetes 中dapr-sidecar-injector
和dapr-operator
服務提供一流的集成,以將 Dapr 作爲 sidecar 容器啓動在與服務容器相同的 pod 中 ,併爲在集羣中部署的 Dapr 組件提供更新通知。dapr-sentry
服務是一個認證中心,它允許 Dapr sidecar 實例之間的相互 TLS 進行安全數據加密。
3 SDK 語言
- C++
- Go
- Java
- JavaScript
- Python
- Rust
- .NET
- PHP
4 Configuration
您可以在 Dapr 控制面板中更改 Dapr 全局系統服務配置,這些設置能夠改變單個 Dapr 應用程序 sidecar。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: daprConfig
namespace: default
spec:
tracing:
samplingRate: "1"
zipkin:
endpointAddress: "http://localhost:9411/api/v2/spans"
這個配置文件配置了遙測錄製跟蹤
5 這個配置文件配置了遙測錄製跟蹤
. Dapr 允許通過鏈接一系列中間件組件來定義自定義處理管道。 請求在路由到用戶代碼之前經過所有已定義的中間件組件,然後在返回到客戶機之前,按相反順序經過已定義的中間件
.. 默認情況下,管道由追蹤中間件和 CORS 中間件組成。 其他中間件,由 Daprconfiguration配置,按照定義的順序添加到管道中。
6 可觀測性
. 在利用 Dapr 構建塊來執行服務到服務調用和 pub/sub 消息傳遞構建應用程序時, Dapr 擁有相對於distributed tracing的優勢,因爲此服務間通信全部流經 Dapr sidecar,sidecar 處於這樣獨特的位置,可以消除應用程序級別檢測的負擔。Dapr 可以配置發送跟蹤數據,並且由於 Dapr 使用廣泛採用的協議(如Zipkin協議)進行跟蹤,因此可以輕鬆地集成多個監控後端。
OpenTelemetry 採集器
Dapr sidecar 和系統服務的可觀察性
. 至於系統的其他部分,您希望能夠觀察 Dapr 本身,並收集 Dapr sidecar 沿每個微服務以及您環境中的 Dapr 相關服務(如部署在 Dapr 啓用的 Kubernetes 集羣中的控制面板服務)發出的指標和日誌。
3 安全
. Dapr 用於加密傳輸中數據的安全機制之一是相互認證(mutual authentication)TLS或簡寫爲 mTLS。 mTLS 爲應用程序內的網絡流量提供了一些關鍵功能:
- 雙向身份驗證 - 客戶端向服務器證明其身份,反之亦然
- 建立雙向認證後,所有進行中通信都走加密通道
. Dapr 支持 mTLS 和本文檔中描述的應用程序中的所有功能,在生產系統中幾乎不需要額外的代碼或複雜配置。
. Dapr sidecar通過localhost運行在應用程序附近,建議在與應用程序相同的網絡邊界下運行.Dapr 包括一個"默認開啓",自動相互 TLS.Dapr 利用名爲Sentry
的系統服務,該服務充當證書頒發機構 (Certificate Authority/CA),併爲來自 Dapr sidecar的工作負載 (app) 簽署證書請求。
. 在 Kubernetes 集羣中,保存根證書的密鑰的範圍是 Dapr 組件部署所在的命名空間,並且只有 Dapr 系統 pod才能訪問。
. 在 Kubernetes 上部署時,Dapr 還支持強標識,它依賴於Pod 的 Service Account 令牌,而這個令牌會作爲證書籤名請求 (CSR) 的一部分發送到 Sentry。
. 默認情況下,工作負荷證書的有效期爲 24 小時,時鐘偏差設置爲 15 分鐘。
. 編輯與 Dapr 一起部署的默認配置中的spec.mtls.enabled
字段,可以關閉/開啓相互TLS。 這既可用於 Kubernetes 模式,也可以用於自託管模式。
1 自託管中的 mTL
2 kubernetes 中的 mTLS
3 組件命名空間的作用域和密鑰
. Dapr 組件是受限於命名空間的。 這意味着 Dapr runtime sidecar 的實例只能訪問部署到同一命名空間的組件.Dapr 組件使用 Dapr 的內置密鑰管理功能來管理密鑰。
4 網絡安全
. 您可以採用常見的網絡安全技術,如網絡安全組 (NSG)、非軍事區 (DMZ) 和防火牆,以便爲您的網絡資源提供層層保護
5 狀態存儲安全
. Dapr 不會轉換來自應用程序的狀態數據。 這意味着 Dapr 不會嘗試加密/解密狀態數據。 但是,您的應用程序可以採用您選擇的加密/解密方法,而且狀態數據對 Dapr 保持不透明。
轉自 https://zhuanlan.zhihu.com/p/658430123?utm_id=0