Só pode estabelecer ligação à sua instância de Redis a partir de clusters do Google Kubernetes Engine que usam a mesma rede autorizada que a instância de Redis.
Configuração
Se já instalou a CLI Google Cloud e criou uma instância do Redis, pode ignorar estes passos.
Instale a CLI gcloud e inicialize-a:
gcloud init
Siga o guia de início rápido para criar uma instância do Redis. Tome nota da zona, do endereço IP e da porta da instância do Redis.
A preparar o cluster do GKE
Se não tiver criado um cluster do GKE, crie um através dos seguintes comandos para a CLI Google Cloud:
Designar o projeto para esta aplicação de exemplo em
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]
Cria um cluster do GKE denominado
visitcount-cluster
.gcloud container clusters create visitcount-cluster --num-nodes=3 --enable-ip-alias
Se não criou o cluster através do
gcloud
, use este comando para obter as credenciais do cluster:gcloud container clusters get-credentials [CLUSTER_NAME] --zone [CLUSTER_ZONE] --project [PROJECT_ID]
- CLUSTER_NAME é o nome do seu cluster do GKE.
- CLUSTER_ZONE é a zona em que o cluster se encontra.
- PROJECT_ID é o projeto onde existem o cluster e as instâncias do Redis.
Se o cluster tiver a versão 1.8 ou superior e tiver aliases de IP ativados, ignore este passo. Se o cluster for da versão 1.7 ou inferior, ou o cluster da versão 1.8 ou superior não tiver aliases de IP ativados, siga estes passos de solução alternativa antes de tentar estabelecer ligação à instância.
Execute estes comandos, substituindo RESERVED_IP_RANGE pelo intervalo de IP reservado da sua instância:
git clone https://github.com/bowei/k8s-custom-iptables.git cd k8s-custom-iptables/ TARGETS="RESERVED_IP_RANGE" ./install.sh cd ..
Se não souber o intervalo de IPs reservados da sua instância, pode descobri-lo através da consola (opções avançadas) ou introduzindo este comando:
gcloud redis instances describe INSTANCE_ID --region=REGION
Para mais informações sobre os alias de IP, incluindo como criar um cluster com esta definição ativada, consulte a documentação sobre os alias de IP.
Aplicação de exemplo
Esta aplicação de servidor HTTP de exemplo estabelece uma ligação a uma instância do Redis a partir de um cluster do Google Kubernetes Engine.
Clone o repositório para a linguagem de programação pretendida e navegue para a pasta que contém o código de exemplo:
Ir
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 aplicação de exemplo incrementa um contador do Redis sempre que o ponto final /
é acedido.
Ir
Esta aplicação usa o cliente
github.com/gomodule/redigo/redis
. Instale-o executando o seguinte comando:
go get github.com/gomodule/redigo/redis
Java
Esta aplicação baseia-se no servlet Jetty 3.1.
Usa a biblioteca Jedis:
A classe AppServletContextListener
é usada para criar um conjunto de ligações Redis de longa duração:
A classe VisitCounterServlet
é um servlet Web que incrementa um contador Redis:
Node.js
Esta aplicação usa o módulo redis
.
Python
Esta aplicação usa o Flask
para o serviço Web e o pacote redis-py
para comunicar com a instância do Redis.
Criar a imagem de contentor
Crie e envie a imagem de contentor 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
Implementar a sua aplicação no Google Kubernetes Engine
Atualizegke_deployment/visit-counter.yaml
substituindo <PROJECT_ID>
pelo ID do seu projeto do Google Cloud. Este ficheiro contém a configuração para a implementação e o serviço.
Ir
Para evitar a programação rígida do IP da instância do Redis, pode criar um ConfigMap redishost:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Valide a configuração através do seguinte comando:
kubectl get configmaps redishost -o yaml
Java
Node.js
Para evitar a programação rígida do IP da instância do Redis, pode criar um ConfigMap redishost:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Valide a configuração através do seguinte comando:
kubectl get configmaps redishost -o yaml
Python
Para evitar a programação rígida do IP da instância do Redis, pode criar um ConfigMap redishost:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Valide a configuração através do seguinte comando:
kubectl get configmaps redishost -o yaml
Aplique a configuração ao cluster:
kubectl apply -f gke_deployment/visit-counter.yaml
Determine o endereço [EXTERNAL-IP] para esta app de exemplo executando este comando:
kubectl get service visit-counter
Veja a sua app alojada em http://[EXTERNAL-IP] através do navegador ou envie um pedido GET através do cURL ou do seu navegador:
curl http://[EXTERNAL-IP]
Remover a entrada das tabelas de IP para a instância de Redis
Se seguiu o passo três da secção deste guia passo a passo denominada Preparar o cluster do GKE, instalou o intervalo de IPs reservado da sua instância do Redis nas tabelas de IPs da instância do GKE. Se quiser remover esta entrada do intervalo de IPs do Redis das tabelas de IPs da sua instância do GKE, execute o seguinte comando a partir do diretório k8s-custom-iptables/
:
./uninstall.sh