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:
- Create a
Secretcontaining the credentials for the external storage provider. - Create a
NamespaceStorecustom resource that points to the target bucket/container. - Create a
BucketClassthat uses theNamespaceStore. - 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-94aefa23cb11is 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.







