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

限制组件访问特定的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的应用程序提供访问权限,这两个应用程序的ID分别为app1app2,访问名为statestore的Redis组件,该组件本身位于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

社区电话演示

使用命名空间进行服务调用

阅读跨命名空间的服务调用以获取有关在服务之间调用时使用命名空间的更多信息。

使用命名空间进行pub/sub

阅读配置具有多个命名空间的Pub/Sub组件以获取有关在pub/sub中使用命名空间的更多信息。

相关链接