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
Se você já tiver instalado a CLI do Google Cloud e criado uma instância do Redis, poderá pular essas etapas.
Instale a CLI gcloud e inicialize:
gcloud init
Siga 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ê ainda não criou um cluster do GKE, crie um usando o comandos a seguir para a Google Cloud CLI:
Designe o projeto para este aplicativo de amostra no
gcloud
gcloud.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 por meio do
gcloud
, use este comando 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 através do console (opções avançadas) ou digitando este 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 pretendida 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
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:
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
Como implantar um aplicativo no Google Kubernetes Engine
Atualizegke_deployment/visit-counter.yaml
substituindo <PROJECT_ID>
pelo código do projeto do Google Cloud. Esse arquivo contém a configuração da implantação e do serviço.
Go
Para evitar a codificação do IP da instância do Redis, é possível criar um redishost ConfigMap:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Verifique a configuração usando o seguinte comando:
kubectl get configmaps redishost -o yaml
Java
Node.js
Para evitar a codificação do IP da instância do Redis, é possível criar um redishost ConfigMap:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Verifique a configuração usando o seguinte comando:
kubectl get configmaps redishost -o yaml
Python
Para evitar a codificação do IP da instância do Redis, é possível criar um redishost ConfigMap:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Verifique a configuração usando o seguinte comando:
kubectl get configmaps redishost -o yaml
Aplique a configuração ao seu cluster:
kubectl apply -f gke_deployment/visit-counter.yaml
Determine o endereço [EXTERNAL-IP] para este app de amostra executando este comando:
kubectl get service visit-counter
Veja seu app hospedado em http://[EXTERNAL-IP] pelo navegador ou envie uma solicitação GET via cURL ou pelo navegador:
curl http://[EXTERNAL-IP]
Como remover a entrada de tabelas IP para a instância do Redis
Se tiver seguido o passo três da seção destas instruções, chamado Como preparar seu cluster do GKE, você terá instalado 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