[转]Dapr - 基本概念 【深入官网】
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