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.
-
Install the gcloud CLI and initialize:
gcloud init -
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
-
If you have not created a GKE cluster, create one using the following commands for the Google Cloud CLI:
-
Designate the project for this sample application in
gcloud.gcloud config set project PROJECT_ID -
Set the Compute Engine zone configuration variable in
gcloud.gcloud config set compute/zone ZONE -
Create a GKE cluster called
visitcount-cluster.gcloud container clusters create visitcount-cluster --num-nodes=3 --enable-ip-alias
-
-
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
- CLUSTER_NAME is the name of your GKE cluster.
- CLUSTER_ZONE is the zone your cluster is in.
- PROJECT_ID is the project where your cluster and your Redis instances exist.
-
If your cluster is version 1.8 or higher andhas 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.
-
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 .. -
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

