操作指南:将组件限定到一个或多个应用程序

限制组件只能被特定的 Dapr 实例访问

Dapr 组件具有命名空间(与 Kubernetes 命名空间概念是独立的),这意味着 Dapr 运行时实例只能访问部署到同一命名空间的组件。

当 Dapr 运行时,它会将其自身配置的命名空间与组件的命名空间进行匹配,并仅加载和初始化与其命名空间匹配的组件。不同命名空间中的所有其他组件都不会被加载。

命名空间

命名空间可用于限制组件只能被特定的 Dapr 实例访问。

在自托管模式下,开发者可以通过设置 NAMESPACE 环境变量为 Dapr 实例指定命名空间。 如果设置了 NAMESPACE 环境变量,Dapr 将不会加载任何在元数据中未指定相同命名空间的组件。

例如,给定以下位于 production 命名空间中的组件

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  namespace: production
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: redis-master:6379

要告知 Dapr 其部署到的命名空间,请设置环境变量:

MacOS/Linux:

export NAMESPACE=production
# 像往常一样运行 Dapr

Windows:

setx NAMESPACE "production"
# 像往常一样运行 Dapr

让我们考虑 Kubernetes 中的以下组件:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  namespace: production
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: redis-master:6379

在此示例中,Redis 组件仅可由运行在 production 命名空间内的 Dapr 实例访问。

使用作用域控制应用程序对组件的访问

开发者和操作员可能希望限制某个应用程序或特定的一组应用程序访问某个数据库。 为了实现这一点,Dapr 允许你在组件 YAML 上指定 scopes。添加到组件的应用程序作用域仅允许具有特定 ID 的应用程序使用该组件。

以下示例展示了如何为两个启用了 Dapr 的应用程序授予访问名为 statestore 的 Redis 组件的权限,这两个应用程序的 app ID 分别为 app1app2,而该组件本身位于 production 命名空间中

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  namespace: production
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: redis-master:6379
scopes:
- app1
- app2

社区电话演示

在服务调用中使用命名空间

阅读跨命名空间的服务调用以了解更多关于在服务间调用时使用命名空间的信息。

在发布订阅中使用命名空间

阅读使用多个命名空间配置发布订阅组件以了解更多关于在发布订阅中使用命名空间的信息。

相关链接