[转]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

posted @ 2024-03-26 22:19  韩梦芫  阅读(145)  评论(0编辑  收藏  举报