HowTo: Configure Pub/Sub components with multiple namespaces

In some scenarios, applications can be spread across namespaces and share a queue or topic via PubSub. In this case, the PubSub component must be provisioned on each namespace.

Note

Namespaces are a Dapr concept used for scoping applications and components. This example uses Kubernetes namespaces, however the Dapr component namespace scoping can be used on any supported platform. Read for more information on scoping components.

This example uses the PubSub sample. The Redis installation and the subscribers are in namespace-a while the publisher UI is in namespace-b. This solution will also work if Redis is installed on another namespace or if you use a managed cloud service like Azure ServiceBus, AWS SNS/SQS or GCP PubSub.

This is a diagram of the example using namespaces.

  • in any namespace since Dapr works at the cluster level.
  • Checkout and cd into the directory for PubSub quickstart.

Setup namespace-a

Create namespace and switch kubectl to use it.

Install Redis (master and slave) on namespace-a, following these instructions.

Now, configure deploy/redis.yaml, paying attention to the hostname containing namespace-a.

  1. apiVersion: dapr.io/v1alpha1
  2. metadata:
  3. spec:
  4. type: pubsub.redis
  5. version: v1
  6. metadata:
  7. - name: "redisHost"
  8. value: "redis-master.namespace-a.svc:6379"
  9. - name: "redisPassword"
  10. value: "YOUR_PASSWORD"

Deploy resources to namespace-a:

  1. kubectl apply -f deploy/python-subscriber.yaml

Create namespace and switch kubectl to use it.

  1. kubectl apply -f deploy/redis.yaml
  2. kubectl apply -f deploy/react-form.yaml

Now, find the IP address for react-form, open it on your browser and publish messages to each topic (A, B and C).

  1. kubectl get service -A

Confirm subscribers received the messages.

Switch back to namespace-a:

Find the POD names:

  1. kubectl get pod # Copy POD names and use in the next commands.

Display logs:

  1. kubectl logs node-subscriber-XYZ node-subscriber
  2. kubectl logs python-subscriber-XYZ python-subscriber

The messages published on the browser should show in the corresponding subscriber’s logs. The Node.js subscriber receives messages of type “A” and “B”, while the Python subscriber receives messages of type “A” and “C”.