Solo puedes conectarte a tu instancia de Redis desde los clústeres de Google Kubernetes Engine que usan la misma red autorizada que la instancia de Redis.
Configuración
Si ya instalaste Google Cloud CLI y creaste una instancia de Redis, puedes omitir estos pasos.
Instala la CLI de gcloud y, luego, inicialízala:
gcloud initSigue 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 tu clúster GKE
Si no creaste un clúster de GKE, crea uno con los siguientes comandos de Google Cloud CLI:
Designa el proyecto para esta aplicación de muestra en
gcloud.gcloud config set project PROJECT_ID
Establece 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 creaste el clúster con
gcloud, usa el siguiente comando para recuperar 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 GKE.
- CLUSTER_ZONE es la zona en la que se encuentra tu clúster.
- PROJECT_ID es el proyecto donde existen tu clúster y tus instancias de Redis.
Si tu clúster es de la versión 1.8 o superior y tienes habilitados los alias de IP, omite este paso. Si tu clúster es de la versión 1.7 o inferior, o tu clúster de la versión 1.8 o superior no tiene habilitados los alias de IP, sigue estos pasos alternativos antes de intentar conectarse a tu instancia.
Ejecuta estos comandos, reemplazando RESERVED_IP_RANGE con el rango 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 rango de IP reservado de tu instancia, puedes averiguarlo a través de la consola (opciones avanzadas) o con el siguiente 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 esta configuración habilitada, consulta la documentación de los alias de IP.
Aplicación de muestra
Esta aplicación de servidor HTTP de muestra establece una conexión a una instancia de Redis desde un clúster de Google Kubernetes Engine.
Clona el repositorio del lenguaje de programación que elegiste y navega a la carpeta que contiene el código de muestra:
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 muestra aumenta un contador de Redis cada vez que se accede al extremo /.
Go
En esta aplicación, se usa el cliente github.com/gomodule/redigo/redis. Para instalarla, ejecuta el siguiente comando:
go get github.com/gomodule/redigo/redis@latest
Aplicación de ejemplo:
Java
Esta aplicación se basa en el servlet Jetty 3.1.
Usa la biblioteca de 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
En esta aplicación, se usa el módulo redis.
Python
Esta aplicación usa Flask para la entrega web y el paquete redis-py a fin de comunicarse con la instancia de Redis.
Compila la imagen de contenedor
Construye y envía la imagen del contenedor a Container Registry:
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
Implementar la aplicación en Google Kubernetes Engine
Para evitar la codificación IP de la instancia de Redis, puedes crear un redishost ConfigMap:
export REDISHOST_IP=REDISHOST_IP
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Verifica la configuración con el siguiente comando:
kubectl get configmaps redishost -o yaml
Actualiza gke_deployment/visit-counter.yaml y reemplaza <REPO_REGION>, <PROJECT_ID> y <REPO_ID> por los valores de la imagen de contenedor que creaste en Compila la imagen de contenedor. Este archivo contiene la configuración para el servicio y la implementación.
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
Aplica la configuración a tu clúster:
kubectl apply -f gke_deployment/visit-counter.yaml
Para determinar la dirección IP externa de esta app de ejemplo, ejecuta el siguiente comando:
kubectl get service visit-counter
Verifica que tu app esté alojada en la IP externa con tu navegador o envía una solicitud GET con curl o tu navegador:
curl http://EXTERNAL_IP
Quitar la entrada de tablas de IP para la instancia de Redis
Si seguiste el paso tres de la sección de este instructivo de Cómo preparar tu clúster de GKE, ya instalaste el rango de IP reservado de tu instancia de Redis en las tablas de IP de tu instancia de GKE. Si deseas quitar esta entrada del rango de IP de Redis de las tablas de IP de tu instancia de GKE, ejecuta el siguiente comando desde el directorio k8s-custom-iptables/:
./uninstall.sh