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:
- 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.






