Só é possível se conectar à instância do Redis a partir dos clusters do Google Kubernetes Engine que usam a mesma rede autorizada que a instância do Redis.
Configuração
Essas etapas podem ser ignoradas se você já tiver instalado a Google Cloud CLI e criado uma instância do Redis.
Instale a CLI gcloud e inicialize:
gcloud initSiga o Guia de início rápido para criar uma instância do Redis. Anote a zona, o endereço IP e a porta da instância do Redis.
Como preparar seu cluster do GKE
Se você não criou um cluster do GKE, crie um usando os seguintes comandos para a Google Cloud CLI:
Designe o projeto para este aplicativo de amostra no
gcloudgcloud.gcloud config set project PROJECT_ID
Defina a variável de configuração da zona do Compute Engine em
gcloud.gcloud config set compute/zone ZONE
Criar um cluster do GKE chamado
visitcount-cluster.gcloud container clusters create visitcount-cluster --num-nodes=3 --enable-ip-alias
Se você não criou o cluster usando
gcloud, use o comando a seguir para recuperar as credenciais do cluster:gcloud container clusters get-credentials CLUSTER_NAME --zone CLUSTER_ZONE --project PROJECT_ID
- CLUSTER_NAME é o nome do cluster do GKE.
- CLUSTER_ZONE é a zona em que o cluster está.
- PROJECT_ID é o projeto em que estão o cluster e as instâncias do Redis.
Se a versão do seu cluster for 1.8 ou superior e tiver aliases de IP ativados, pule esta etapa. Se a versão do seu cluster for 1.7 ou inferior, ou se o cluster da versão 1.8 ou superior não tiver aliases de IP ativados, siga estas etapas de solução alternativa antes de tentar se conectar à sua instância:
Execute estes comandos, substituindo RESERVED_IP_RANGE pelo intervalo de IPs reservados da instância:
git clone https://github.com/bowei/k8s-custom-iptables.git cd k8s-custom-iptables/ TARGETS="RESERVED_IP_RANGE" ./install.sh cd ..Se você não souber o intervalo de IPs reservados da sua instância, descubra-o usando o console (opções avançadas) ou o seguinte comando:
gcloud redis instances describe INSTANCE_ID --region=REGION
Para mais informações sobre aliases de IP, incluindo como criar um cluster com essa configuração ativada, consulte a Documentação de aliases de IP.
Exemplo de app
Com este aplicativo de servidor HTTP de amostra, é estabelecida uma conexão com uma instância do Redis, a partir de um cluster do Google Kubernetes Engine.
Clone o repositório da linguagem de programação escolhida e navegue até a pasta que contém o código de amostra:
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
Este aplicativo de amostra incrementa um contador do Redis sempre que o endpoint
/ é acessado.
Go
Este aplicativo usa o cliente
github.com/gomodule/redigo/redis. Instale-o executando o comando a seguir:
go get github.com/gomodule/redigo/redis@latest
Exemplo de aplicativo:
Java
Esta aplicação é baseada em servlets do Jet 3.1.
Ele usa a biblioteca Jedis (em inglês):
A classe AppServletContextListener é usada para criar um pool de conexão
Redis de longa duração:
A classe VisitCounterServlet é um servlet da Web que incrementa um
contador do Redis:
Node.js
Este aplicativo usa o módulo redis
(em inglês).
Python
Este aplicativo usa o Flask
para veiculação na Web e o pacote redis-py
(links em inglês) para se comunicar com a instância do Redis.
Como construir a imagem do container
Crie e envie a imagem do contêiner para o 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
Como implantar um aplicativo no Google Kubernetes Engine
Para evitar a codificação do IP da instância do Redis, é possível criar um redishost ConfigMap:
export REDISHOST_IP=REDISHOST_IP
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Verifique a configuração usando o seguinte comando:
kubectl get configmaps redishost -o yaml
Atualize gke_deployment/visit-counter.yaml, substituindo <REPO_REGION>, <PROJECT_ID> e <REPO_ID> pelos valores da imagem do contêiner criada em Como criar a imagem do contêiner. Esse arquivo contém a configuração da implantação e do serviço.
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
Aplique a configuração ao seu cluster:
kubectl apply -f gke_deployment/visit-counter.yaml
Determine o endereço IP externo para este app de amostra executando o seguinte comando:
kubectl get service visit-counter
Verifique se o app está hospedado no IP externo usando o navegador ou envie uma solicitação GET usando curl ou o navegador:
curl http://EXTERNAL_IP
Como remover a entrada de tabelas IP para a instância do Redis
Se você seguiu o passo três da seção destas instruções de
Como preparar seu cluster do GKE,
você instalou o intervalo de IPs reservados da sua instância do Redis para as tabelas de IP da instância do GKE. Se você quiser remover essa entrada de intervalo de IP do Redis das tabelas de IP da instância do GKE, execute o seguinte comando no diretório k8s-custom-iptables/:
./uninstall.sh