Vous ne pouvez vous connecter à votre instance Redis qu'à partir de clusters Google Kubernetes Engine qui utilisent le même réseau autorisé que l'instance Redis.
Configuration
Si vous avez déjà installé Google Cloud CLI et créé une instance Redis, vous pouvez ignorer ces étapes.
Installez la gcloud CLI et initialisez-la :
gcloud initSuivez le Guide de démarrage rapide pour créer une instance Redis. Retenez la zone, l'adresse IP et le port de l'instance Redis.
Préparer le cluster GKE
Si vous n'avez pas créé de cluster GKE, créez-en un à l'aide des commandes suivantes pour Google Cloud CLI :
Désignez le projet pour cet exemple d'application dans
gcloud.gcloud config set project PROJECT_ID
Définissez la variable de configuration de la zone Compute Engine dans
gcloud.gcloud config set compute/zone ZONE
Créer un cluster GKE nommé
visitcount-cluster.gcloud container clusters create visitcount-cluster --num-nodes=3 --enable-ip-alias
Si vous n'avez pas créé le cluster à l'aide de
gcloud, utilisez la commande suivante pour récupérer les identifiants du cluster :gcloud container clusters get-credentials CLUSTER_NAME --zone CLUSTER_ZONE --project PROJECT_ID
- CLUSTER_NAME est le nom de votre cluster GKE.
- CLUSTER_ZONE est la zone dans laquelle se trouve votre cluster.
- PROJECT_ID est le projet dans lequel votre cluster et vos instances Redis se trouvent.
Si votre cluster est de version 1.8 ou supérieure et que les alias d'adresses IP sont activés, ignorez cette étape. Si le cluster est de version 1.7 ou inférieure, ou si les alias d'adresses IP ne sont pas activés sur votre cluster de version 1.8 ou ultérieure, procédez comme suit avant d'essayer de vous connecter à l'instance :
Exécutez les commandes suivantes, en remplaçant RESERVED_IP_RANGE par la plage d'adresses IP réservées de votre instance :
git clone https://github.com/bowei/k8s-custom-iptables.git cd k8s-custom-iptables/ TARGETS="RESERVED_IP_RANGE" ./install.sh cd ..Si vous ne connaissez pas la plage d'adresses IP réservées de votre instance, obtenez cette information à l'aide de la console (options avancées) ou de la commande suivante :
gcloud redis instances describe INSTANCE_ID --region=REGION
Pour en savoir plus sur les alias d'adresses IP et sur la création de clusters avec ce paramètre activé, consultez la documentation relative aux alias d'adresses IP.
Exemple d'application
Cet exemple d'application de serveur HTTP établit une connexion à une instance Redis à partir d'un cluster Google Kubernetes Engine.
Clonez le dépôt correspondant au langage de programmation de votre choix et accédez au dossier contenant l'exemple de 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
Cet exemple de code incrémente un compteur Redis à chaque accès au point de terminaison /.
Go
Cette application utilise le client github.com/gomodule/redigo/redis. Installez-le en exécutant la commande suivante :
go get github.com/gomodule/redigo/redis@latest
Exemple d'application :
Java
Cette application est basée sur un servlet Jetty 3.1.
Il utilise la bibliothèque Jedis :
La classe AppServletContextListener permet de créer un pool de connexions Redis longue durée :
La classe VisitCounterServlet est un servlet Web qui incrémente un compteur Redis :
Node.js
Cette application utilise le module redis.
Python
Cette application utilise Flask pour la diffusion Web et le package redis-py pour communiquer avec l'instance Redis.
Créer l'image du conteneur
Créez et transférez l'image du conteneur vers Container Registry de la manière suivante :
gcloud artifacts repositories create --location REPO_REGION --repository-format=docker REPO_ID
cp gke_deployment/Dockerfile .
docker build -t REPO_REGION-docker.pkg.dev/PROJECT_ID/REPO_ID/visit-counter:v1 .
gcloud docker -- push REPO_REGION-docker.pkg.dev/PROJECT_ID/REPO_ID/visit-counter:v1
Déployer votre application sur Google Kubernetes Engine
Pour éviter de coder en dur l'adresse IP de l'instance Redis, vous pouvez créer un ConfigMap redishost :
export REDISHOST_IP=REDISHOST_IP
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Vérifiez la configuration à l'aide de la commande suivante :
kubectl get configmaps redishost -o yaml
Mettez à jour gke_deployment/visit-counter.yaml en remplaçant <REPO_REGION>, <PROJECT_ID> et <REPO_ID> par les valeurs de votre image de conteneur créée dans Créer l'image de conteneur. Ce fichier contient la configuration du déploiement et du 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
Appliquez la configuration à votre cluster comme suit :
kubectl apply -f gke_deployment/visit-counter.yaml
Déterminez l'adresse IP externe pour cet exemple d'application en exécutant la commande suivante :
kubectl get service visit-counter
Vérifiez que votre application est hébergée à l'adresse IP externe en utilisant votre navigateur, ou envoyez une requête GET à l'aide de curl ou de votre navigateur :
curl http://EXTERNAL_IP
Supprimer l'entrée des tables d'adresses IP pour l'instance Redis
Si vous avez suivi la troisième étape de la section Préparer le cluster GKE de ce tutoriel, vous avez installé la plage d'adresses IP réservées de votre instance Redis dans les tables d'adresses IP de votre instance GKE. Si vous souhaitez supprimer cette entrée de plage d'adresses IP Redis des tables IP de votre instance GKE, exécutez la commande suivante à partir du répertoire k8s-custom-iptables/ :
./uninstall.sh