{"id":6791,"date":"2019-05-06T10:39:28","date_gmt":"2019-05-06T17:39:28","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6791"},"modified":"2025-06-13T23:42:54","modified_gmt":"2025-06-14T06:42:54","slug":"couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/","title":{"rendered":"Using Couchbase Autonomous Operator on GKE"},"content":{"rendered":"<p>We are excited to announce release of Couchbase Autonomous Operator 1.2. This is landmark release marking several features requested by customers, mainly<\/p>\n<ul>\n<li id=\"automated-upgrade-of-couchbase-clusters\">Automated Upgrade of Couchbase Clusters<\/li>\n<li id=\"integrated-couchbasecluster-resource-validation\">Integrated CouchbaseCluster Resource Validation via Adminission Controller<\/li>\n<li id=\"helm-support\">Helm Support<\/li>\n<li id=\"public-connectivity-for-couchbase-clients\">Public Connectivity for Couchbase Clients<\/li>\n<li id=\"rolling-upgrade-of-kubernetes-clusters\">Rolling Upgrade of Kubernetes Clusters<\/li>\n<li id=\"tls-certificate-rotation\">TLS x509 Certificate Rotation<\/li>\n<li>Unified log collection experience for stateful and stateless deployments<\/li>\n<li>\n<p id=\"support-for-public-kubernetes-services\">Support for Public Kubernetes Services on GKE, AKS and EKS. Kubernetes running on public cloud was already working from day 1, but with Autonomous Operator 1.2, we are supporting it in an official capacity. For this blog&#8217;s perspective, we will be using GKE to setup kubernetes cluster on GKE with version 1.12, then deploying Autonomous Operator and then eventually deploying Couchbase Cluster with Server Groups, with persistent volumes, and with x509 TLS certificates.<\/p>\n<\/li>\n<\/ul>\n<p>Overall steps that we will be doing in this blog are as follows:<\/p>\n<ol>\n<li>\n<h5>Initialize gcloud utils<\/h5>\n<\/li>\n<li>\n<h5>Deploy kubernetes cluster (v1.12+) with 2 nodes in each availability zones<\/h5>\n<\/li>\n<li>\n<h5>Deploy Autonomous Operator 1.2<\/h5>\n<\/li>\n<li>\n<h5>Deploy Couchbase Cluster<\/h5>\n<\/li>\n<li>\n<h5>Perform Server Group Autofailover<\/h5>\n<\/li>\n<\/ol>\n<p>Pre-requisites<\/p>\n<ul>\n<li>kubectl (<em><strong>gcloud components install kubect<\/strong>l<\/em>)<\/li>\n<li>GCP account with right credentials<\/li>\n<\/ul>\n<h5>Initialize gcloud utils<\/h5>\n<p>Download gcloud sdk for the OS version of your choice from this <a href=\"https:\/\/cloud.google.com\/sdk\/\">URL.<\/a><\/p>\n<p>One would need google cloud credentials to initialize the gcloud cli<\/p>\n<pre class=\"lang:default decode:true \">cd google-cloud-sdk\r\n.\/install.sh\r\n.\/bin\/gcloud init<\/pre>\n<h5><\/h5>\n<h5>Deploy kubernetes cluster (v1.12) with 2 nodes in each availability zones<\/h5>\n<p>Deploying kubernetes cluster on GKE is fairly straightforward job. To deploy resilient kubernetes clusters, its good idea to deploy nodes in all available zones within a given region. Doing it in such way we can make use of Server Groups or Rack Zone or Availability Zone(AZ) awareness feature within Couchbase server, means if we lose entire AZ, couchbase can failover entire AZ and Application will be active, as it still has the working dataset.<\/p>\n<pre class=\"lang:default decode:true\">gcloud container clusters create rd-k8s-gke --region us-east1 --machine-type n1-standard-16 --num-nodes 2<\/pre>\n<pre class=\"lang:default decode:true\">Details about above command\r\nK8s cluster name :\u00a0 rd-k8s-gke\r\nmachine-type: n1-standard-16 (16 vCPUs and 60GB RAM)\r\nnum-nodes\/AZ : 2<\/pre>\n<p>More Machines types can be <a href=\"https:\/\/cloud.google.com\/compute\/docs\/machine-types\">here<\/a><\/p>\n<p>At this point, k8s cluster with required number of nodes should be up and running<\/p>\n<pre class=\"lang:default decode:true\">$ gcloud container clusters list\r\nNAME       LOCATION MASTER_VERSION MASTER_IP   MACHINE_TYPE   NODE_VERSION  <strong>NUM_NODES<\/strong>  STATUS\r\nrd-k8s-gke us-east1 1.12.6-gke.10 35.229.24.36 n1-standard-16 1.12.6-gke.10    <strong>6<\/strong>       RUNNING<\/pre>\n<p>Details of the k8s cluster can be found like below<\/p>\n<pre class=\"lang:default decode:true\">$ kubectl cluster-info\r\nKubernetes master is running at https:\/\/55.229.24.36\r\nGLBCDefaultBackend is running at https:\/\/55.229.24.36\/api\/v1\/namespaces\/kube-system\/services\/default-http-backend:http\/proxy\r\nHeapster is running at https:\/\/55.229.24.36\/api\/v1\/namespaces\/kube-system\/services\/heapster\/proxy\r\nKubeDNS is running at https:\/\/55.229.24.36\/api\/v1\/namespaces\/kube-system\/services\/kube-dns:dns\/proxy\r\nMetrics-server is running at https:\/\/55.229.24.36\/api\/v1\/namespaces\/kube-system\/services\/https:metrics-server:\/proxy<\/pre>\n<h5><\/h5>\n<h5>Deploy Autonomous Operator 1.2<\/h5>\n<p>GKE supports RBAC in order to limit permissions. Since the Couchbase Operator creates resources in our GKE cluster, we will need to grant it the permission to do so.<\/p>\n<pre class=\"lang:default decode:true\">$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user $(gcloud config get-value account)<\/pre>\n<p><a href=\"https:\/\/www.couchbase.com\/downloads\/\">Download<\/a> the appropriate package for deploying kubernetes in your environment. Untar the package and deploy the admission controller.<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl create -f admission.yaml<\/pre>\n<p>Check the status of admission controller<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl get deployments\r\nNAME\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 DESIRED\u00a0 CURRENT UP-TO-DATE \u00a0AVAILABLE AGE\r\ncouchbase-operator-admission \u00a0\u00a01\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 1\u00a0 \u00a0 \u00a01\u00a0 \u00a0 \u00a0 \u00a0   \u00a0 1 \u00a0 \u00a0 \u00a07s<\/pre>\n<p>In order to visualize how admission controller works in sync with operator and couchbase cluster, it can be illustrated better with the following diagram<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6800 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/05\/image001.png\" alt=\"\" width=\"1865\" height=\"1065\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/image001.png 1865w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/image001-300x171.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/image001-1024x585.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/image001-768x439.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/image001-1536x877.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/image001-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/image001-1320x754.png 1320w\" sizes=\"auto, (max-width: 1865px) 100vw, 1865px\" \/><\/p>\n<p>Next steps are to create crd, operator role and operator 1.2<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl create -f crd.yaml\r\n$ kubectl create -f operator-role.yaml\r\n$ kubectl create -f operator-deployment.yaml<\/pre>\n<p>Once the operator is deployed, it gets ready and available within secs<\/p>\n<pre class=\"lang:default decode:true\">$ kubectl get deployments \r\nNAME \u00a0\u00a0                     DESIRED CURRENT UP-TO-DATE \u00a0AVAILABLE AGE\r\ncouchbase-operator-admission \u00a0\u00a01        1        1 \u00a0         1     11m\r\ncouchbase-operator \u00a0          \u00a01        1        1 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  1     25s<\/pre>\n<h5>Deploy Couchbase Cluster<\/h5>\n<p>Couchbase cluster will be deployed with following features<\/p>\n<ul>\n<li>\n<h6>TLS certificates<\/h6>\n<\/li>\n<li>\n<h6>Server Groups (each server group in one AZ)<\/h6>\n<\/li>\n<li>\n<h6>Persistent Volumes (which are AZ aware)<\/h6>\n<\/li>\n<li>\n<h6>Server Group auto-failover<\/h6>\n<\/li>\n<\/ul>\n<h6>TLS certificates<\/h6>\n<p>Its fairly easy to generate tls certificates, details steps are be found <a href=\"https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/gke\/tls\/x509.txt\">here<\/a><\/p>\n<p>Once deployed, tls secrets can be found with kubectl secret command like below<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl get secrets\r\n      NAME             TYPE  DATA AGE\r\ncouchbase-operator-tls Opaque 1    1d\r\ncouchbase-server-tls   Opaque 2    1d<\/pre>\n<h6>Server Groups<\/h6>\n<p>Setting up server groups is also straightforward, which will be discussed in the following sections when we deploy the couchbase cluster yaml file.<\/p>\n<h6>Persistent Volumes<\/h6>\n<p>Persistent Volumes provide way for a reliable way to run stateful applications. Creating them on public cloud is one click operation.<\/p>\n<p>First we can check what storageclass is available for use<\/p>\n<pre class=\"lang:default decode:true\">$ kubectl get storageclass\r\nNAME                 PROVISIONER         AGE\r\nstandard (default) kubernetes.io\/gce-pd  1d<\/pre>\n<p>All the worker nodes available in the k8s cluster should failure domain labels like below<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl get nodes -o yaml | grep zone\r\nfailure-domain.beta.kubernetes.io\/zone: us-east1-b\r\nfailure-domain.beta.kubernetes.io\/zone: us-east1-b\r\nfailure-domain.beta.kubernetes.io\/zone: us-east1-d\r\nfailure-domain.beta.kubernetes.io\/zone: us-east1-d\r\nfailure-domain.beta.kubernetes.io\/zone: us-east1-c\r\nfailure-domain.beta.kubernetes.io\/zone: us-east1-c<\/pre>\n<p>NOTE: I don&#8217;t have to add any failure domain labels, GKE added automatically.<\/p>\n<p>Create PV for each AZ<\/p>\n<pre class=\"lang:default decode:true\">$ kubectl apply -f svrgp-pv.yaml<\/pre>\n<p>yaml file svrgp-pv.yaml, can be found <a href=\"https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/gke\/yamlfiles\/svrgp-pv.yaml\">here<\/a>.<\/p>\n<p>Create secret for accessing couchbase UI<\/p>\n<pre class=\"lang:default decode:true\">$ kubectl apply -f secret.yaml<\/pre>\n<p>Finally deploy couchbase cluster with TLS support, along with Server Groups(which are Az aware) and on persistent volumes (which are also AZ aware).<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl apply -f couchbase-persistent-tls-svrgps.yaml<\/pre>\n<p>yaml file couchbase-persistent-tls-svrgps.yaml, can be found <a href=\"https:\/\/raw.githubusercontent.com\/ramdhakne\/blogs\/master\/gke\/yamlfiles\/couchbase-persistent-tls-svrgps.yaml\">here<\/a><\/p>\n<p>Give a few mins, and couchbase cluster will come up, and it should look like this<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl get pods\r\nNAME            READY STATUS RESTARTS AGE\r\ncb-gke-demo-0000 1\/1 Running 0 1d\r\ncb-gke-demo-0001 1\/1 Running 0 1d\r\ncb-gke-demo-0002 1\/1 Running 0 1d\r\ncb-gke-demo-0003 1\/1 Running 0 1d\r\ncb-gke-demo-0004 1\/1 Running 0 1d\r\ncb-gke-demo-0005 1\/1 Running 0 1d\r\ncb-gke-demo-0006 1\/1 Running 0 1d\r\ncb-gke-demo-0007 1\/1 Running 0 1d\r\ncouchbase-operator-6cbc476d4d-mjhx5 1\/1 Running 0 1d\r\ncouchbase-operator-admission-6f97998f8c-cp2mp 1\/1 Running 0 1d<\/pre>\n<p>Quick check on persistent volumes claims can be done like below<\/p>\n<pre class=\"lang:default decode:true\">$ kubectl get pvc<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6822 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-02-at-2.01.12-PM.png\" alt=\"\" width=\"2622\" height=\"828\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-02-at-2.01.12-PM.png 2622w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-02-at-2.01.12-PM-300x95.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-02-at-2.01.12-PM-1024x323.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-02-at-2.01.12-PM-768x243.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-02-at-2.01.12-PM-1536x485.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-02-at-2.01.12-PM-2048x647.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-02-at-2.01.12-PM-20x6.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-02-at-2.01.12-PM-1320x417.png 1320w\" sizes=\"auto, (max-width: 2622px) 100vw, 2622px\" \/><\/p>\n<p>In order to access the Couchbase Cluster UI, either we can port-foward port 8091 of any pod or service itself, on local laptop, or local machine, or it can be exposed via lb.<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl port-forward service\/cb-gke-demo-ui 8091:8091<\/pre>\n<p>port-forward any pod like below<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl port-forward cb-gke-demo-0002 8091:8091<\/pre>\n<p>At this point couchbase server is up and running and we have way to access it.<\/p>\n<h5>Perform Server Group Autofailover<\/h5>\n<h6>Server Group auto-failover<\/h6>\n<p>When a couchbase cluster node fails, then it can auto-failover and without any user intervention ALL the working set is available, no user intervention is needed and Application won&#8217;t see downtime.<\/p>\n<p>If Couchbase cluster is setup to be Server Group(SG) or AZ or Rack Zone(RZ) aware, then even if we lose entire SG then entire server groups fails over and working set is available, no user intervention is needed and Application won&#8217;t see downtime.<\/p>\n<p>In order to have Disaster Recovery, XDCR can be used to replicate Couchbase data to other Couchbase Cluster. This helps in the event if entire source Data Center or Region is lost, Applications can cut over to Remote site and application won&#8217;t see downtime.<\/p>\n<p>Lets take down the Server Group. Before that, lets see how the cluster looks like<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6830\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-03-at-11.48.10-AM.png\" alt=\"\" width=\"2862\" height=\"1170\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.48.10-AM.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.48.10-AM-300x123.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.48.10-AM-1024x419.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.48.10-AM-768x314.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.48.10-AM-1536x628.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.48.10-AM-20x8.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.48.10-AM-1320x539.png 1320w\" sizes=\"auto, (max-width: 2862px) 100vw, 2862px\" \/><\/p>\n<p>Delete all pods in group us-east1-b, once the pods are deleted, Couchbase cluster will see that nodes are <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6831\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-03-at-11.53.53-AM.png\" alt=\"\" width=\"2852\" height=\"1366\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.53.53-AM.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.53.53-AM-300x144.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.53.53-AM-1024x491.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.53.53-AM-768x368.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.53.53-AM-1536x736.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.53.53-AM-20x10.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-11.53.53-AM-1320x632.png 1320w\" sizes=\"auto, (max-width: 2852px) 100vw, 2852px\" \/><\/p>\n<p>Operator is constantly watching the cluster definition and it will see that server group is lost, and it spins the 3 pods, re-establishes the claims on the PVs and performs delta-node recovery, and then eventually performs rebalance operation and cluster is healthy again. All with no user-intervention whatsoever.<\/p>\n<p>After sometime, cluster is back and up and running.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6833\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-03-at-1.29.58-PM.png\" alt=\"\" width=\"2864\" height=\"1170\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-1.29.58-PM.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-1.29.58-PM-300x123.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-1.29.58-PM-1024x419.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-1.29.58-PM-768x314.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-1.29.58-PM-1536x628.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-1.29.58-PM-20x8.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-1.29.58-PM-1320x539.png 1320w\" sizes=\"auto, (max-width: 2864px) 100vw, 2864px\" \/><\/p>\n<p>From the operator logs,<\/p>\n<pre class=\"lang:default decode:true\">$ kubectl logs -f couchbase-operator-6cbc476d4d-mjhx5<\/pre>\n<p>we can see that cluster is automatically rebalanced.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6834\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-03-at-2.10.00-PM.png\" alt=\"\" width=\"2690\" height=\"1200\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-2.10.00-PM.png 2690w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-2.10.00-PM-300x134.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-2.10.00-PM-1024x457.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-2.10.00-PM-768x343.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-2.10.00-PM-1536x685.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-2.10.00-PM-2048x914.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-2.10.00-PM-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/Screen-Shot-2019-05-03-at-2.10.00-PM-1320x589.png 1320w\" sizes=\"auto, (max-width: 2690px) 100vw, 2690px\" \/><\/p>\n<h6>Epilogue<\/h6>\n<p>Sustained differentiation is key to our technology. We have added quite a number of new and supportability features. With all these enterprise grade supportability features, they enable end user to find the issues faster and help operationalize the Couchbase Operator in their environments in a efficient faster and way. We are very excited about the release, feel free to give a try!<\/p>\n<p>&nbsp;<\/p>\n<h6>References:<\/h6>\n<p><a href=\"https:\/\/docs.couchbase.com\/operator\/1.2\/whats-new.html\">https:\/\/docs.couchbase.com\/operator\/1.2\/whats-new.html<\/a><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/downloads\/\">https:\/\/www.couchbase.com\/downloads<\/a><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/manage\/manage-groups\/manage-groups.html\">https:\/\/docs.couchbase.com\/server\/6.0\/manage\/manage-groups\/manage-groups.html<\/a><\/p>\n<p>K8s Autonomous Operator Book from <a href=\"https:\/\/www.couchbase.com\/blog\/author\/anil-kumar\/\">@AnilKumar<\/a><\/p>\n<p><a href=\"https:\/\/info.couchbase.com\/rs\/302-GJY-034\/images\/Kubernetes_ebook.pdf\">https:\/\/info.couchbase.com\/rs\/302-GJY-034\/images\/Kubernetes_ebook.pdf<\/a><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/operator\/1.2\/tls.html\">https:\/\/docs.couchbase.com\/operator\/1.2\/tls.html<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/ramdhakne\/blogs\/tree\/master\/gke\">All yaml files and help files used for this blog can be found here<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We are excited to announce release of Couchbase Autonomous Operator 1.2. This is landmark release marking several features requested by customers, mainly Automated Upgrade of Couchbase Clusters Integrated CouchbaseCluster Resource Validation via Adminission Controller Helm Support Public Connectivity for Couchbase [&hellip;]<\/p>\n","protected":false},"author":12023,"featured_media":10768,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1821,2225,1816,2322,1813],"tags":[2248,2247,1545,2138],"ppma_author":[9071],"class_list":["post-6791","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-architecture","category-cloud","category-couchbase-server","category-kubernetes","category-security","tag-gke","tag-google-kubernetes-engine","tag-kubernetes","tag-kubernetes-operator"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using Couchbase Autonomous Operator on GKE - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Learn to use GKE to set up a Kubernetes cluster with version 1.2 of Autonomous Operator and deploy a Couchbase Cluster with Server Groups.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Couchbase Autonomous Operator on GKE\" \/>\n<meta property=\"og:description\" content=\"Learn to use GKE to set up a Kubernetes cluster with version 1.2 of Autonomous Operator and deploy a Couchbase Cluster with Server Groups.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-06T17:39:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:42:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ram Dhakne\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ram Dhakne\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/\"},\"author\":{\"name\":\"Ram Dhakne\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/219548e728c73c6f1ae06f994ebbfb13\"},\"headline\":\"Using Couchbase Autonomous Operator on GKE\",\"datePublished\":\"2019-05-06T17:39:28+00:00\",\"dateModified\":\"2025-06-14T06:42:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/\"},\"wordCount\":1066,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg\",\"keywords\":[\"GKE\",\"Google Kubernetes Engine\",\"kubernetes\",\"kubernetes operator\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Architecture\",\"Couchbase Capella\",\"Couchbase Server\",\"Kubernetes\",\"Security\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/\",\"name\":\"Using Couchbase Autonomous Operator on GKE - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg\",\"datePublished\":\"2019-05-06T17:39:28+00:00\",\"dateModified\":\"2025-06-14T06:42:54+00:00\",\"description\":\"Learn to use GKE to set up a Kubernetes cluster with version 1.2 of Autonomous Operator and deploy a Couchbase Cluster with Server Groups.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg\",\"width\":1200,\"height\":800,\"caption\":\"A lightbulb surrounded by a transparent cone attached a stick handle\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Couchbase Autonomous Operator on GKE\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/219548e728c73c6f1ae06f994ebbfb13\",\"name\":\"Ram Dhakne\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/0f4c71d7c27bda26464a202747e04acd\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g\",\"caption\":\"Ram Dhakne\"},\"description\":\"Ram Dhakne is Solutions Consultant - US West at Couchbase. He currently helps Enterprise customers with their digital innovations journey and helping them adopt NoSQL technologies. His current interests are running persistent applications like Couchbase NoSQL server on Kubernetes clusters running on AKS, GKE, ACS and OpenShift, securing end-to-end on kubernetes. In his past life has worked on IaaS platforms (AWS, GCP, Azure &amp; Private Clouds), Enterprise Backup Target Products &amp; Backup Applications.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/ram-dhaknecouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using Couchbase Autonomous Operator on GKE - The Couchbase Blog","description":"Learn to use GKE to set up a Kubernetes cluster with version 1.2 of Autonomous Operator and deploy a Couchbase Cluster with Server Groups.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/","og_locale":"en_US","og_type":"article","og_title":"Using Couchbase Autonomous Operator on GKE","og_description":"Learn to use GKE to set up a Kubernetes cluster with version 1.2 of Autonomous Operator and deploy a Couchbase Cluster with Server Groups.","og_url":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-05-06T17:39:28+00:00","article_modified_time":"2025-06-14T06:42:54+00:00","og_image":[{"width":1200,"height":800,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg","type":"image\/jpeg"}],"author":"Ram Dhakne","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ram Dhakne","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/"},"author":{"name":"Ram Dhakne","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/219548e728c73c6f1ae06f994ebbfb13"},"headline":"Using Couchbase Autonomous Operator on GKE","datePublished":"2019-05-06T17:39:28+00:00","dateModified":"2025-06-14T06:42:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/"},"wordCount":1066,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg","keywords":["GKE","Google Kubernetes Engine","kubernetes","kubernetes operator"],"articleSection":["Best Practices and Tutorials","Couchbase Architecture","Couchbase Capella","Couchbase Server","Kubernetes","Security"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/","name":"Using Couchbase Autonomous Operator on GKE - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg","datePublished":"2019-05-06T17:39:28+00:00","dateModified":"2025-06-14T06:42:54+00:00","description":"Learn to use GKE to set up a Kubernetes cluster with version 1.2 of Autonomous Operator and deploy a Couchbase Cluster with Server Groups.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/05\/31579784413_d853331601_b_RESIZED.jpg","width":1200,"height":800,"caption":"A lightbulb surrounded by a transparent cone attached a stick handle"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-autonomous-operator-on-gke-securing-couchbase-data-platform-with-tls-certs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using Couchbase Autonomous Operator on GKE"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/219548e728c73c6f1ae06f994ebbfb13","name":"Ram Dhakne","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/0f4c71d7c27bda26464a202747e04acd","url":"https:\/\/secure.gravatar.com\/avatar\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g","caption":"Ram Dhakne"},"description":"Ram Dhakne is Solutions Consultant - US West at Couchbase. He currently helps Enterprise customers with their digital innovations journey and helping them adopt NoSQL technologies. His current interests are running persistent applications like Couchbase NoSQL server on Kubernetes clusters running on AKS, GKE, ACS and OpenShift, securing end-to-end on kubernetes. In his past life has worked on IaaS platforms (AWS, GCP, Azure &amp; Private Clouds), Enterprise Backup Target Products &amp; Backup Applications.","url":"https:\/\/www.couchbase.com\/blog\/author\/ram-dhaknecouchbase-com\/"}]}},"authors":[{"term_id":9071,"user_id":12023,"is_guest":0,"slug":"ram-dhaknecouchbase-com","display_name":"Ram Dhakne","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a1f4aec5276e885840e6a5179ddab527fd6e0e3d2451ca7fcb847e0135cd7e7a?s=96&d=mm&r=g","author_category":"","last_name":"Dhakne","first_name":"Ram","job_title":"","user_url":"","description":"Ram Dhakne is Solutions Consultant - US West at Couchbase. He currently helps Enterprise customers with their digital innovations journey and helping them adopt NoSQL technologies. His current interests are running persistent applications like Couchbase NoSQL server on Kubernetes clusters running on AKS, GKE, ACS and OpenShift, securing end-to-end on kubernetes. In his past life has worked on IaaS platforms (AWS, GCP, Azure &amp; Private Clouds), Enterprise Backup Target Products &amp; Backup Applications."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/6791","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/12023"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=6791"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/6791\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/10768"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=6791"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=6791"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=6791"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=6791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}