Solo puedes conectarte a tu instancia de Redis desde clústeres de Google Kubernetes Engine que usen la misma red autorizada que la instancia de Redis.
Configuración
Si ya has instalado la CLI de Google Cloud y has creado una instancia de Redis, puedes saltarte estos pasos.
Instala gcloud CLI e inicialízala:
gcloud init
Sigue la guía de inicio rápido para crear una instancia de Redis. Anota la zona, la dirección IP y el puerto de la instancia de Redis.
Preparar el clúster de GKE
Si no has creado un clúster de GKE, crea uno con los siguientes comandos de la CLI de Google Cloud:
Designa el proyecto de esta aplicación de ejemplo en
gcloud
.gcloud config set project [PROJECT_ID]
Define la variable de configuración de la zona de Compute Engine en
gcloud
.gcloud config set compute/zone [ZONE]
Crea un clúster de GKE llamado
visitcount-cluster
.gcloud container clusters create visitcount-cluster --num-nodes=3 --enable-ip-alias
Si no has creado el clúster mediante
gcloud
, usa este comando para obtener las credenciales del clúster:gcloud container clusters get-credentials [CLUSTER_NAME] --zone [CLUSTER_ZONE] --project [PROJECT_ID]
- CLUSTER_NAME es el nombre de tu clúster de GKE.
- CLUSTER_ZONE es la zona en la que se encuentra tu clúster.
- PROJECT_ID es el proyecto en el que se encuentran tu clúster y tus instancias de Redis.
Si tu clúster tiene la versión 1.8 o una posterior y los alias de IP están habilitados, omite este paso. Si tu clúster tiene la versión 1.7 o una anterior, o si tu clúster con la versión 1.8 o una posterior no tiene habilitados los alias de IP, sigue estos pasos alternativos antes de intentar conectarte a tu instancia.
Ejecuta estos comandos y sustituye RESERVED_IP_RANGE por el intervalo de IP reservado de tu instancia:
git clone https://github.com/bowei/k8s-custom-iptables.git cd k8s-custom-iptables/ TARGETS="RESERVED_IP_RANGE" ./install.sh cd ..
Si no conoces el intervalo de IPs reservado de tu instancia, puedes consultarlo en la consola (opciones avanzadas) o introduciendo este comando:
gcloud redis instances describe INSTANCE_ID --region=REGION
Para obtener más información sobre los alias de IP, incluido cómo crear un clúster con este ajuste habilitado, consulta la documentación sobre alias de IP.
Aplicación de ejemplo
Esta aplicación de servidor HTTP de ejemplo establece una conexión con una instancia de Redis desde un clúster de Google Kubernetes Engine.
Clona el repositorio del lenguaje de programación que quieras y ve a la carpeta que contiene el código de ejemplo:
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
Esta aplicación de ejemplo incrementa un contador de Redis cada vez que se accede al endpoint /
.
Go
Esta aplicación usa el cliente de
github.com/gomodule/redigo/redis
. Para instalarlo, ejecuta el siguiente comando:
go get github.com/gomodule/redigo/redis
Java
Esta aplicación se basa en servlets de Jetty 3.1.
Usa la biblioteca Jedis:
La clase AppServletContextListener
se usa para crear un grupo de conexiones de Redis de larga duración:
La clase VisitCounterServlet
es un servlet web que incrementa un contador de Redis:
Node.js
Esta aplicación usa el módulo redis
.
Python
Esta aplicación usa Flask
para el servicio web y el paquete redis-py
para comunicarse con la instancia de Redis.
Crear la imagen de contenedor
Crea la imagen de contenedor y envíala a Container Registry:
cp gke_deployment/Dockerfile .
export PROJECT_ID="$(gcloud config get-value project -q)"
docker build -t gcr.io/${PROJECT_ID}/visit-counter:v1 .
gcloud docker -- push gcr.io/${PROJECT_ID}/visit-counter:v1
Desplegar una aplicación en Google Kubernetes Engine
Actualizagke_deployment/visit-counter.yaml
y sustituye <PROJECT_ID>
por el ID de tu proyecto de Google Cloud. Este archivo contiene la configuración del despliegue y del servicio.
Go
Para evitar codificar de forma rígida la IP de la instancia de Redis, puedes crear un ConfigMap de redishost:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Verifica la configuración con el siguiente comando:
kubectl get configmaps redishost -o yaml
Java
Node.js
Para evitar codificar de forma rígida la IP de la instancia de Redis, puedes crear un ConfigMap de redishost:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Verifica la configuración con el siguiente comando:
kubectl get configmaps redishost -o yaml
Python
Para evitar codificar de forma rígida la IP de la instancia de Redis, puedes crear un ConfigMap de redishost:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Verifica la configuración con el siguiente comando:
kubectl get configmaps redishost -o yaml
Aplica la configuración a tu clúster:
kubectl apply -f gke_deployment/visit-counter.yaml
Para determinar la dirección [EXTERNAL-IP] de esta aplicación de ejemplo, ejecuta este comando:
kubectl get service visit-counter
Consulta tu aplicación alojada en http://[EXTERNAL-IP] a través de tu navegador o envía una solicitud GET a través de cURL o de tu navegador:
curl http://[EXTERNAL-IP]
Eliminar la entrada de tablas de IP de la instancia de Redis
Si has seguido el paso 3 de la sección Preparar el clúster de GKE de esta guía, habrás instalado el intervalo de IPs reservado de tu instancia de Redis en las tablas de IPs de tu instancia de GKE. Si quieres quitar esta entrada de intervalo de IPs de Redis de las tablas de IPs de tu instancia de GKE, ejecuta el siguiente comando desde el directorio k8s-custom-iptables/
:
./uninstall.sh