You are looking at the documentation of a prior release. To read the documentation of the latest release, please visit here.

Unified Data Access with NooBaa

NooBaa provides unified data access by allowing you to connect to various storage resources, whether they are in the cloud or on-premises, and manage them through a single S3-compatible endpoint. This is primarily achieved using Namespace Stores.

What is a Namespace Store?

A Namespace Store is a NooBaa resource that represents an underlying storage location, such as an existing AWS S3 bucket, Azure Blob container, or any S3-compatible object store. Unlike a BackingStore, which is used for storing NooBaa’s own data chunks, a NamespaceStore provides read and/or write access to data that already exists in the target store.

This enables you to create “Namespace Buckets” in NooBaa that act as a virtual view into one or more of these external storage locations.

Key Use Cases

  • Hybrid and Multi-Cloud Access: Access data from multiple public clouds (AWS, Azure, GCP) and on-prem S3 stores through a single S3 endpoint.
  • Transparent Data Migration: Migrate data between storage systems in the background while applications continue to have uninterrupted access.
  • Unified Data Access: Access data from multiple storage systems through a single S3 endpoint.

How to Configure a Namespace Store

Setting up a Namespace Store involves three main steps:

  1. Create a Secret containing the credentials for the external storage provider.
  2. Create a NamespaceStore custom resource that points to the target bucket/container.
  3. Create a BucketClass that uses the NamespaceStore.
  4. Create an ObjectBucketClaim (OBC) to provision the Namespace Bucket.

This guide demonstrates how to configure a Namespace Store using an existing Azure Blob Storage container. Once configured, you can access the data in your Azure container through NooBaa’s S3-compatible endpoint.

Create a Provider Secret for Azure

First, create a Kubernetes secret containing your Azure Storage Account credentials. NooBaa will use this secret to authenticate with Azure.

kubectl create secret generic azure-secret -n noobaa \
  --from-literal=Azure_Storage_Account_Name=<your-azure-storage-account-name> \
  --from-literal=Azure_Storage_Account_Key=<your-azure-storage-account-key>

Create the Azure NamespaceStore

Next, define a NamespaceStore resource that points to your Azure Blob container. This resource tells NooBaa how to connect to the external store.

apiVersion: noobaa.io/v1alpha1
kind: NamespaceStore
metadata:
  name: azure-namespacestore
  namespace: noobaa
spec:
  type: azure-blob
  azureBlob:
    targetBlobContainer: noobaa
    secret:
      name: azure-secret
      namespace: noobaa

Here,

  • type: azure-blob: Specifies the provider type.
  • targetBucket: The name of your existing container in Azure Blob Storage.
  • secret: A reference to the secret created in the previous step.

Create a BucketClass

apiVersion: noobaa.io/v1alpha1
kind: BucketClass
metadata:
  name: azure-namespace-bucket-class
spec:
  namespacePolicy:
    type: Single
    single:
      resource: azure-namespacestore

Create an ObjectBucketClaim (OBC)

Finally, create an ObjectBucketClaim (OBC) to provision the S3-compatible bucket that your applications will use. This OBC references the BucketClass you just created.

apiVersion: objectbucket.io/v1alpha1
kind: ObjectBucketClaim
metadata:
  name: azure-bucket
spec:
  generateBucketName: azure-bucket
  storageClassName: noobaa.noobaa.io
  additionalConfig:
    bucketclass: azure-namespace-bucketclass

Accessing Your Data via the S3 Endpoint

Connect with the NooBaa S3 endpoint

export EXTERNAL_IP=$(kubectl get svc s3 -n noobaa -o json | jq -r '.status.loadBalancer.ingress[0].ip')
export NOOBAA_ACCESS_KEY=$(kubectl get secret noobaa-admin -n noobaa -o json | jq -r '.data.AWS_ACCESS_KEY_ID|@base64d')
export NOOBAA_SECRET_KEY=$(kubectl get secret noobaa-admin -n noobaa -o json | jq -r '.data.AWS_SECRET_ACCESS_KEY|@base64d')
alias s3='AWS_ACCESS_KEY_ID=$NOOBAA_ACCESS_KEY AWS_SECRET_ACCESS_KEY=$NOOBAA_SECRET_KEY aws --endpoint https://$EXTERNAL_IP:443 --no-verify-ssl s3'
export AWS_REQUEST_CHECKSUM_CALCULATION=when_required
export AWS_RESPONSE_CHECKSUM_CALCULATION=when_required

Verify the Bucket

s3 ls
2025-08-27 16:08:14 azure-bucket-33ef992e-68aa-4489-bc72-94aefa23cb11
2025-08-26 18:57:55 first.bucket

Here,

  • azure-bucket-33ef992e-68aa-4489-bc72-94aefa23cb11 is the name of the bucket for the obectbucketclaim we created.

List objects in the bucket

s3 ls s3://azure-bucket-33ef992e-68aa-4489-bc72-94aefa23cb11/ --recursive

Now, whatever we upload here, it’ll redirect to the Azure Blob Storage container.

Upload a file

echo "hello azure" > test.txt
s3 cp test.txt s3://azure-bucket-33ef992e-68aa-4489-bc72-94aefa23cb11 
upload: ./test.txt to s3://azure-bucket-33ef992e-68aa-4489-bc72-94aefa23cb11/test.txt

Now, verify that the file is in the Azure Blob Storage container.

az storage blob list \
        --container-name noobaa \
        --account-name kubestash \
        --output table
Name      Blob Type    Blob Tier    Length    Content Type    Last Modified              Snapshot
--------  -----------  -----------  --------  --------------  -------------------------  ----------
test.txt  BlockBlob    Hot          12        text/plain      2025-09-01T08:33:49+00:00

You should see test.txt listed in the output, confirming that the data was successfully written to Azure through NooBaa.