Connect to a Redis instance from a Google Kubernetes Engine cluster

You can only connect to your Redis instance from Google Kubernetes Engine clusters that use the same authorized network as the Redis instance.

Setup

If you have already installed the Google Cloud CLI and have created a Redis instance, you can skip these steps.

  1. Install the gcloud CLI and initialize:

    gcloud init
    
  2. Follow the Quickstart Guide to create a Redis instance. Take note of the zone, IP address, and port of the Redis instance.

Preparing your GKE cluster

  1. If you have not created a GKE cluster, create one using the following commands for the Google Cloud CLI:

    1. Designate the project for this sample application in gcloud.

      gcloud config set project PROJECT_ID
    2. Set the Compute Engine zone configuration variable in gcloud.

      gcloud config set compute/zone ZONE
    3. Create a GKE cluster called visitcount-cluster.

      gcloud container clusters create visitcount-cluster --num-nodes=3 --enable-ip-alias
  2. If you didn't create the cluster using gcloud, then use the following command to retrieve the cluster credentials:

    gcloud container clusters get-credentials CLUSTER_NAME --zone CLUSTER_ZONE --project PROJECT_ID
    1. CLUSTER_NAME is the name of your GKE cluster.
    2. CLUSTER_ZONE is the zone your cluster is in.
    3. PROJECT_ID is the project where your cluster and your Redis instances exist.
  3. If your cluster is version 1.8 or higher and has IP aliases enabled, skip this step. If your cluster is version 1.7 or lower, or your version 1.8 or higher cluster doesn't have IP aliases enabled, follow these workaround steps before trying to connect to your instance.

    1. Run these commands, replacing RESERVED_IP_RANGE with the reserved IP range of your instance:

      git clone https://github.com/bowei/k8s-custom-iptables.git
      cd k8s-custom-iptables/
      TARGETS="RESERVED_IP_RANGE" ./install.sh
      cd ..
      
    2. If you don't know the reserved IP range of your instance, then find out either by using the console (advanced options) or the following command:

      gcloud redis instances describe INSTANCE_ID --region=REGION
      

    For more information about IP aliases, including how to create a cluster with this setting enabled, see the IP aliases documentation.

Sample application

This sample HTTP server application establishes a connection to a Redis instance from a Google Kubernetes Engine cluster.

Clone the repository for your chosen programming language and navigate to the folder that contains the sample code:

Go

git clone https://github.com/GoogleCloudPlatform/golang-samples
cd golang-samples/memorystore/redis

Java

git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/memorystore/redis

Node.js

git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
cd nodejs-docs-samples/memorystore/redis

Python

git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/memorystore/redis

This sample application increments a Redis counter every time the / endpoint is accessed.

Go

This application uses the github.com/gomodule/redigo/redis client. Install it by running the following command:

go get github.com/gomodule/redigo/redis@latest

Example application:

Java

This application is Jetty 3.1 servlet-based.

It uses the Jedis library:

The AppServletContextListener class is used to create a long-lived Redis connection pool:

The VisitCounterServlet class is a web servlet that increments a Redis counter:

Node.js

This application uses the redis module. This is a sample package.json file:

Sample application code:

Python

This application uses Flask for web serving and the redis-py package to communicate with the Redis instance.

Sample application code:

Building the container image

Build and push the container image with Cloud Build to Container Registry:

cp gke_deployment/Dockerfile .
gcloud artifacts repositories create --location REPO_REGION --repository-format=docker REPO_ID
gcloud builds submit --tag REPO_REGION-docker.pkg.dev/PROJECT_ID/REPO_ID/visit-counter:v1

Deploying your application to Google Kubernetes Engine

To avoid hard-coding the Redis instance IP, you can create a redishost ConfigMap:

export REDISHOST_IP=REDISHOST_IP
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}

Verify that the configuration using the following command:

kubectl get configmaps redishost -o yaml

Update gke_deployment/visit-counter.yaml, replacing <REPO_REGION>, <PROJECT_ID>, and <REPO_ID> with the values from your container image created in Building the container image. This file contains the configuration for the deployment and service.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: visit-counter
  labels:
    app: visit-counter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: visit-counter
  template:
    metadata:
      labels:
        app: visit-counter
    spec:
      containers:
      - name: visit-counter
        image: "<REPO_REGION>-docker.pkg.dev/<PROJECT_ID>/<REPO_ID>/visit-counter:v1"
        env:
        - name: REDISHOST
          valueFrom:
            configMapKeyRef:
              name: redishost
              key: REDISHOST
        ports:
        - name: http
          containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: visit-counter
spec:
  type: LoadBalancer
  selector:
    app: visit-counter
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

Apply the configuration to your cluster:

kubectl apply -f gke_deployment/visit-counter.yaml

Determine the external IP address for this sample app by running the following command:

kubectl get service visit-counter

Verify that your app hosted at the external IP by using your browser, or send a GET request using curl or your browser:

curl http://EXTERNAL_IP

Removing the IP tables entry for the Redis instance

If you followed step three of the section of this walkthrough of Preparing your GKE cluster, then you installed the reserved IP range of your Redis instance to your GKE instance's IP tables. If you want to remove this Redis IP range entry from the IP tables of your GKE instance, run the following command from the k8s-custom-iptables/ directory:

./uninstall.sh

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2026-02-19 UTC.