[轉]Dapr - 基本概念 【深入官網】

Dapr 使用 sidecar 架構,與應用程序一起作爲單獨的流程運行,包括服務調用、網絡安全和分佈式跟蹤等功能

1 共同點:

  • 基於 mTLS 加密的服務到服務安全通信
  • 服務到服務的度量指標收集
  • 服務到服務分佈式跟蹤
  • 故障重試恢復能力

2 不同點:

  • Dapr 以開發人員爲中心,提供了通過名稱進行服務發現和調用的方式。
  • 服務網格在網絡級別運行,並跟蹤服務之間的網絡調用。
  • Dapr 可以在 發佈/訂閱 調用時,將相關的跟蹤 Id 寫入 Cloud Events 信封來達到此目的 。度量和跟蹤比使用“服務到服務調用”及“發佈/訂閱進行通信”的服務網格更易擴展
  • Dapr 也適用於服務網格。如果兩者部署在一起,Dapr 和服務網格的 sidecar 都在應用環境中運行。
  1. Dapr 和 Linkerd
  2. Dapr 和 Istio

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章