Rotate Authentication of Ignite
Rotate Authentication is a feature of the KubeDB Ops-Manager that allows you to rotate an Ignite user’s authentication credentials using an IgniteOpsRequest. There are two ways to perform this rotation.
- Operator Generated: The KubeDB operator automatically generates a random credential and updates the existing secret with the new credential.
- User Defined: The user can create their own credentials by defining a Secret of type
kubernetes.io/basic-authcontaining the desiredpasswordand then reference this secret in theIgniteOpsRequest.
Before You Begin
You should be familiar with the following
KubeDBconcepts:At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using kind.
Now, install KubeDB cli on your workstation and KubeDB operator in your cluster following the steps here.
To keep things isolated, this tutorial uses a separate namespace called
demothroughout this tutorial.$ kubectl create ns demo namespace/demo created
Create an Ignite database
KubeDB implements an Ignite CRD to define the specification of an Ignite database. Below is the Ignite object created in this tutorial.
apiVersion: kubedb.com/v1alpha2
kind: Ignite
metadata:
name: ignite-quickstart
namespace: demo
spec:
replicas: 3
version: 2.17.0
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
deletionPolicy: WipeOut
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2026.4.27/docs/guides/ignite/quickstart/examples/ignite-quickstart.yaml
ignite.kubedb.com/ignite-quickstart created
Now, wait until ignite-quickstart has status Ready. i.e,
$ kubectl get ignite -n demo -w
NAME VERSION STATUS AGE
ignite-quickstart 2.16.0 Ready 30m
Verify authentication
The user can verify whether they are authorized by executing a query directly in the database. To do this, the user needs username and password in order to connect to the database using the kubectl exec command. Below is an example showing how to retrieve the credentials from the Secret.
$ ubectl get ignite -n demo ignite-quickstart -ojson | jq .spec.authSecret.name
"ignite-quickstart-auth"
$ kubectl get secret -n demo ignite-quickstart-auth -o=jsonpath='{.data.username}' | base64 -d
ignite⏎
$ kubectl get secret -n demo ignite-quickstart-auth -o=jsonpath='{.data.password}' | base64 -d
EO3AhW7uypPxPsQQ⏎
Create RotateAuth IgniteOpsRequest
1. Using operator generated credentials:
In order to rotate authentication to the Ignite using operator generated credentials, we have to create an
IgniteOpsRequest CRO with RotateAuth type. Below is the YAML of the IgniteOpsRequest CRO that we
are going to create,
apiVersion: ops.kubedb.com/v1alpha1
kind: IgniteOpsRequest
metadata:
name: igops-rotate-auth-generated
namespace: demo
spec:
type: RotateAuth
databaseRef:
name: ignite-quickstart
timeout: 5m
apply: IfReady
Here,
spec.databaseRef.namespecifies that we are performing rotate authentication operation onignite-quickstartdatabase.spec.typespecifies that we are performingRotateAuthon Ignite.
Let’s create the IgniteOpsRequest CR we have shown above,
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2026.4.27/docs/guides/ignite/rotate-auth/overview/examples/Ignite-rotate-auth-generated.yaml
igniteopsrequest.ops.kubedb.com/igops-rotate-auth-generated created
Let’s wait for IgniteOpsRequest to be Successful. Run the following command to watch IgniteOpsRequest CRO
$ kubectl get igniteopsrequest -n demo
NAME TYPE STATUS AGE
igops-rotate-auth-generated RotateAuth Successful 7m7s
If we describe the IgniteOpsRequest we will get an overview of the steps that were followed.
$ kubectl describe igniteopsrequest -n demo igops-rotate-auth-generated
Name: igops-rotate-auth-generated
Namespace: demo
Labels: <none>
Annotations: <none>
API Version: ops.kubedb.com/v1alpha1
Kind: IgniteOpsRequest
Metadata:
Creation Timestamp: 2026-06-11T08:25:20Z
Generation: 1
Resource Version: 246724
UID: 9190f15b-eaf0-4418-b24f-52209e56c55b
Spec:
Apply: IfReady
Database Ref:
Name: ignite-quickstart
Max Retries: 1
Timeout: 5m
Type: RotateAuth
Status:
Conditions:
Last Transition Time: 2026-06-11T08:25:20Z
Message: Ignite ops-request has started to rotate auth for Ignite nodes
Observed Generation: 1
Reason: RotateAuth
Status: True
Type: RotateAuth
Last Transition Time: 2026-06-11T08:25:23Z
Message: Successfully generated new credentials
Observed Generation: 1
Reason: UpdateCredential
Status: True
Type: UpdateCredential
Last Transition Time: 2026-06-11T08:25:35Z
Message: successfully reconciled the Ignite with updated version
Observed Generation: 1
Reason: UpdatePetSets
Status: True
Type: UpdatePetSets
Last Transition Time: 2026-06-11T08:28:03Z
Message: Successfully restarted all nodes
Observed Generation: 1
Reason: RestartNodes
Status: True
Type: RestartNodes
Last Transition Time: 2026-06-11T08:25:48Z
Message: get pod; ConditionStatus:True; PodName:ignite-quickstart-0
Observed Generation: 1
Status: True
Type: GetPod--ignite-quickstart-0
Last Transition Time: 2026-06-11T08:25:48Z
Message: evict pod; ConditionStatus:True; PodName:ignite-quickstart-0
Observed Generation: 1
Status: True
Type: EvictPod--ignite-quickstart-0
Last Transition Time: 2026-06-11T08:25:53Z
Message: running pod; ConditionStatus:False
Observed Generation: 1
Status: False
Type: RunningPod
Last Transition Time: 2026-06-11T08:26:28Z
Message: running pod; ConditionStatus:True; PodName:ignite-quickstart-0
Observed Generation: 1
Status: True
Type: RunningPod--ignite-quickstart-0
Last Transition Time: 2026-06-11T08:26:33Z
Message: get pod; ConditionStatus:True; PodName:ignite-quickstart-1
Observed Generation: 1
Status: True
Type: GetPod--ignite-quickstart-1
Last Transition Time: 2026-06-11T08:26:33Z
Message: evict pod; ConditionStatus:True; PodName:ignite-quickstart-1
Observed Generation: 1
Status: True
Type: EvictPod--ignite-quickstart-1
Last Transition Time: 2026-06-11T08:27:13Z
Message: running pod; ConditionStatus:True; PodName:ignite-quickstart-1
Observed Generation: 1
Status: True
Type: RunningPod--ignite-quickstart-1
Last Transition Time: 2026-06-11T08:27:18Z
Message: get pod; ConditionStatus:True; PodName:ignite-quickstart-2
Observed Generation: 1
Status: True
Type: GetPod--ignite-quickstart-2
Last Transition Time: 2026-06-11T08:27:18Z
Message: evict pod; ConditionStatus:True; PodName:ignite-quickstart-2
Observed Generation: 1
Status: True
Type: EvictPod--ignite-quickstart-2
Last Transition Time: 2026-06-11T08:27:58Z
Message: running pod; ConditionStatus:True; PodName:ignite-quickstart-2
Observed Generation: 1
Status: True
Type: RunningPod--ignite-quickstart-2
Last Transition Time: 2026-06-11T08:28:03Z
Message: Successfully completed reconfigure Ignite
Observed Generation: 1
Reason: Successful
Status: True
Type: Successful
Observed Generation: 1
Phase: Successful
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Starting 7m30s KubeDB Ops-manager Operator Pausing Ignite databse: demo/ignite-quickstart
Normal Successful 7m30s KubeDB Ops-manager Operator Successfully paused Ignite database: demo/ignite-quickstart for IgniteOpsRequest: igops-rotate-auth-generated
Normal UpdatePetSets 7m17s KubeDB Ops-manager Operator successfully reconciled the Ignite with updated version
Warning get pod; ConditionStatus:True; PodName:ignite-quickstart-0 7m4s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:ignite-quickstart-0
Warning evict pod; ConditionStatus:True; PodName:ignite-quickstart-0 7m4s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:ignite-quickstart-0
Warning running pod; ConditionStatus:False 6m59s KubeDB Ops-manager Operator running pod; ConditionStatus:False
Warning running pod; ConditionStatus:True; PodName:ignite-quickstart-0 6m24s KubeDB Ops-manager Operator running pod; ConditionStatus:True; PodName:ignite-quickstart-0
Warning get pod; ConditionStatus:True; PodName:ignite-quickstart-1 6m19s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:ignite-quickstart-1
Warning evict pod; ConditionStatus:True; PodName:ignite-quickstart-1 6m19s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:ignite-quickstart-1
Warning running pod; ConditionStatus:False 6m14s KubeDB Ops-manager Operator running pod; ConditionStatus:False
Warning running pod; ConditionStatus:True; PodName:ignite-quickstart-1 5m39s KubeDB Ops-manager Operator running pod; ConditionStatus:True; PodName:ignite-quickstart-1
Warning get pod; ConditionStatus:True; PodName:ignite-quickstart-2 5m34s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:ignite-quickstart-2
Warning evict pod; ConditionStatus:True; PodName:ignite-quickstart-2 5m34s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:ignite-quickstart-2
Warning running pod; ConditionStatus:False 5m29s KubeDB Ops-manager Operator running pod; ConditionStatus:False
Warning running pod; ConditionStatus:True; PodName:ignite-quickstart-2 4m54s KubeDB Ops-manager Operator running pod; ConditionStatus:True; PodName:ignite-quickstart-2
Normal RestartNodes 4m49s KubeDB Ops-manager Operator Successfully restarted all nodes
Normal Starting 4m49s KubeDB Ops-manager Operator Resuming Ignite database: demo/ignite-quickstart
Normal Successful 4m49s KubeDB Ops-manager Operator Successfully resumed Ignite database: demo/ignite-quickstart for IgniteOpsRequest: igops-rotate-auth-generated
Verify Auth is rotated
$ kubectl get ignite -n demo ignite-quickstart -ojson | jq .spec.authSecret.name
"ignite-quickstart-auth"
$ kubectl get secret -n demo ignite-quickstart-auth -o=jsonpath='{.data.username}' | base64 -d
ignite⏎
$ kubectl get secret -n demo ignite-quickstart-auth -o=jsonpath='{.data.password}' | base64 -d
is0x8KNq6hGFfmvU⏎
Also, there will be two more new keys in the secret that stores the previous credentials. The keys are username.prev and password.prev. You can find the secret and its data by running the following command:
$ kubectl get secret -n demo ignite-quickstart-auth -o go-template='{{ index .data "username.prev" }}' | base64 -d
ignite⏎
$ kubectl get secret -n demo ignite-quickstart-auth -o go-template='{{ index .data "password.prev" }}' | base64 -d
EO3AhW7uypPxPsQQ⏎
The above output shows that the password has been changed successfully. The previous username & password is stored for rollback purpose.
2. Using user created credentials
At first, we need to create a secret with kubernetes.io/basic-auth type using custom username and password. Below is the command to create a secret with kubernetes.io/basic-auth type,
Note: You cannot change the database
username, but you can update thepasswordwhile keeping the existingusername.
$ kubectl create secret generic ignite-quickstart-auth-user -n demo \
--type=kubernetes.io/basic-auth \
--from-literal=username=ignite \
--from-literal=password=testpassword
secret/ignite-quickstart-auth-user created
Now create an IgniteOpsRequest with RotateAuth type. Below is the YAML of the IgniteOpsRequest that we are going to create,
apiVersion: ops.kubedb.com/v1alpha1
kind: IgniteOpsRequest
metadata:
name: igops-rotate-auth-user
namespace: demo
spec:
type: RotateAuth
databaseRef:
name: ignite-quickstart
authentication:
secretRef:
kind: Secret
name: ignite-quickstart-auth-user
timeout: 5m
apply: IfReady
Here,
spec.databaseRef.namespecifies that we are performing rotate authentication operation onignite-quickstartcluster.spec.typespecifies that we are performingRotateAuthonIgnite.spec.authentication.secretRef.namespecifies that we are usingignite-quickstart-auth-userasspec.authSecret.namefor authentication.
Let’s create the IgniteOpsRequest CR we have shown above,
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2026.4.27/docs/guides/ignite/rotate-auth/overview/examples/rotate-auth-user.yaml
igniteopsrequest.ops.kubedb.com/igops-rotate-auth-user created
Let’s wait for IgniteOpsRequest to be Successful. Run the following command to watch IgniteOpsRequest CRO:
$ kubectl get igniteopsrequest -n demo
NAME TYPE STATUS AGE
igops-rotate-auth-generated RotateAuth Successful 15m
igops-rotate-auth-user RotateAuth Successful 4m34s
We can see from the above output that the IgniteOpsRequest has succeeded. If we describe the IgniteOpsRequest we will get an overview of the steps that were followed.
$ kubectl describe igniteopsrequest -n demo igops-rotate-auth-user
Name: igops-rotate-auth-user
Namespace: demo
Labels: <none>
Annotations: <none>
API Version: ops.kubedb.com/v1alpha1
Kind: IgniteOpsRequest
Metadata:
Creation Timestamp: 2026-06-11T08:36:04Z
Generation: 1
Resource Version: 247262
UID: 68890c94-59d4-4d7d-ba4b-b5bf502cd998
Spec:
Apply: IfReady
Authentication:
Secret Ref:
API Group:
Kind: Secret
Name: ignite-quickstart-auth-user
Database Ref:
Name: ignite-quickstart
Max Retries: 1
Timeout: 5m
Type: RotateAuth
Status:
Conditions:
Last Transition Time: 2026-06-11T08:36:04Z
Message: Ignite ops-request has started to rotate auth for Ignite nodes
Observed Generation: 1
Reason: RotateAuth
Status: True
Type: RotateAuth
Last Transition Time: 2026-06-11T08:36:07Z
Message: Successfully referenced the user provided authSecret
Observed Generation: 1
Reason: UpdateCredential
Status: True
Type: UpdateCredential
Last Transition Time: 2026-06-11T08:36:19Z
Message: successfully reconciled the Ignite with updated version
Observed Generation: 1
Reason: UpdatePetSets
Status: True
Type: UpdatePetSets
Last Transition Time: 2026-06-11T08:38:47Z
Message: Successfully restarted all nodes
Observed Generation: 1
Reason: RestartNodes
Status: True
Type: RestartNodes
Last Transition Time: 2026-06-11T08:36:32Z
Message: get pod; ConditionStatus:True; PodName:ignite-quickstart-0
Observed Generation: 1
Status: True
Type: GetPod--ignite-quickstart-0
Last Transition Time: 2026-06-11T08:36:32Z
Message: evict pod; ConditionStatus:True; PodName:ignite-quickstart-0
Observed Generation: 1
Status: True
Type: EvictPod--ignite-quickstart-0
Last Transition Time: 2026-06-11T08:36:37Z
Message: running pod; ConditionStatus:False
Observed Generation: 1
Status: False
Type: RunningPod
Last Transition Time: 2026-06-11T08:37:12Z
Message: running pod; ConditionStatus:True; PodName:ignite-quickstart-0
Observed Generation: 1
Status: True
Type: RunningPod--ignite-quickstart-0
Last Transition Time: 2026-06-11T08:37:17Z
Message: get pod; ConditionStatus:True; PodName:ignite-quickstart-1
Observed Generation: 1
Status: True
Type: GetPod--ignite-quickstart-1
Last Transition Time: 2026-06-11T08:37:17Z
Message: evict pod; ConditionStatus:True; PodName:ignite-quickstart-1
Observed Generation: 1
Status: True
Type: EvictPod--ignite-quickstart-1
Last Transition Time: 2026-06-11T08:37:57Z
Message: running pod; ConditionStatus:True; PodName:ignite-quickstart-1
Observed Generation: 1
Status: True
Type: RunningPod--ignite-quickstart-1
Last Transition Time: 2026-06-11T08:38:02Z
Message: get pod; ConditionStatus:True; PodName:ignite-quickstart-2
Observed Generation: 1
Status: True
Type: GetPod--ignite-quickstart-2
Last Transition Time: 2026-06-11T08:38:02Z
Message: evict pod; ConditionStatus:True; PodName:ignite-quickstart-2
Observed Generation: 1
Status: True
Type: EvictPod--ignite-quickstart-2
Last Transition Time: 2026-06-11T08:38:42Z
Message: running pod; ConditionStatus:True; PodName:ignite-quickstart-2
Observed Generation: 1
Status: True
Type: RunningPod--ignite-quickstart-2
Last Transition Time: 2026-06-11T08:38:47Z
Message: Successfully completed reconfigure Ignite
Observed Generation: 1
Reason: Successful
Status: True
Type: Successful
Observed Generation: 1
Phase: Successful
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Starting 4m53s KubeDB Ops-manager Operator Pausing Ignite databse: demo/ignite-quickstart
Normal Successful 4m53s KubeDB Ops-manager Operator Successfully paused Ignite database: demo/ignite-quickstart for IgniteOpsRequest: igops-rotate-auth-user
Normal UpdatePetSets 4m40s KubeDB Ops-manager Operator successfully reconciled the Ignite with updated version
Warning get pod; ConditionStatus:True; PodName:ignite-quickstart-0 4m27s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:ignite-quickstart-0
Warning evict pod; ConditionStatus:True; PodName:ignite-quickstart-0 4m27s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:ignite-quickstart-0
Warning running pod; ConditionStatus:False 4m22s KubeDB Ops-manager Operator running pod; ConditionStatus:False
Warning running pod; ConditionStatus:True; PodName:ignite-quickstart-0 3m47s KubeDB Ops-manager Operator running pod; ConditionStatus:True; PodName:ignite-quickstart-0
Warning get pod; ConditionStatus:True; PodName:ignite-quickstart-1 3m42s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:ignite-quickstart-1
Warning evict pod; ConditionStatus:True; PodName:ignite-quickstart-1 3m42s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:ignite-quickstart-1
Warning running pod; ConditionStatus:False 3m37s KubeDB Ops-manager Operator running pod; ConditionStatus:False
Warning running pod; ConditionStatus:True; PodName:ignite-quickstart-1 3m2s KubeDB Ops-manager Operator running pod; ConditionStatus:True; PodName:ignite-quickstart-1
Warning get pod; ConditionStatus:True; PodName:ignite-quickstart-2 2m57s KubeDB Ops-manager Operator get pod; ConditionStatus:True; PodName:ignite-quickstart-2
Warning evict pod; ConditionStatus:True; PodName:ignite-quickstart-2 2m57s KubeDB Ops-manager Operator evict pod; ConditionStatus:True; PodName:ignite-quickstart-2
Warning running pod; ConditionStatus:False 2m52s KubeDB Ops-manager Operator running pod; ConditionStatus:False
Warning running pod; ConditionStatus:True; PodName:ignite-quickstart-2 2m17s KubeDB Ops-manager Operator running pod; ConditionStatus:True; PodName:ignite-quickstart-2
Normal RestartNodes 2m12s KubeDB Ops-manager Operator Successfully restarted all nodes
Normal Starting 2m12s KubeDB Ops-manager Operator Resuming Ignite database: demo/ignite-quickstart
Normal Successful 2m12s KubeDB Ops-manager Operator Successfully resumed Ignite database: demo/ignite-quickstart for IgniteOpsRequest: igops-rotate-auth-user
Verify auth is rotate
$ kubectl get ignite -n demo ignite-quickstart -ojson | jq .spec.authSecret.name
"ignite-quickstart-auth-user"
$ kubectl get secret -n demo ignite-quickstart-auth-user -o=jsonpath='{.data.username}' | base64 -d
ignite⏎
$ kubectl get secret -n demo ignite-quickstart-auth-user -o=jsonpath='{.data.password}' | base64 -d
testpassword⏎
Also, there will be two more new keys in the secret that stores the previous credentials. The keys are username.prev and password.prev. You can find the secret and its data by running the following command:
$ kubectl get secret -n demo ignite-quickstart-auth-user -o go-template='{{ index .data "username.prev" }}' | base64 -d
ignite⏎
$ kubectl get secret -n demo ignite-quickstart-auth-user -o go-template='{{ index .data "password.prev" }}' | base64 -d
is0x8KNq6hGFfmvU⏎
The above output shows that the password has been changed successfully. The previous username & password is stored in the secret for rollback purpose.
Cleaning up
To clean up the Kubernetes resources you can delete the CRD or namespace. Or, you can delete one by one resource by their name by this tutorial, run:
$ kubectl delete igniteopsrequest igops-rotate-auth-generated igops-rotate-auth-user -n demo
igniteopsrequest.ops.kubedb.com "igops-rotate-auth-generated" deleted
igniteopsrequest.ops.kubedb.com "igops-rotate-auth-user" deleted
$ kubectl delete secret -n demo ignite-quickstart-auth-user
secret "ignite-quickstart-auth-user" deleted
$ kubectl delete secret -n demo ignite-quickstart-auth
secret "ignite-quickstart-auth" deleted
Next Steps
- Want to hack on KubeDB? Check our contribution guidelines.































