Só pode estabelecer ligação à sua instância do Redis a partir de clusters do Google Kubernetes Engine que usem a mesma rede autorizada que a instância do 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 initSiga 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 seu cluster do GKE
Se não tiver criado um cluster do GKE, crie um através dos seguintes comandos para a Google Cloud CLI:
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 com
gcloud, use o seguinte 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 seu cluster for a 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 à sua 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, descubra-o através da consola (opções avançadas) ou do seguinte 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 escolhida 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@latest
Exemplo de aplicação:
Java
Esta aplicação é baseada em 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 do contentor
Crie e envie a imagem de contentor 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
Implementar a sua aplicação no Google Kubernetes Engine
Para evitar a programação rígida do IP da instância do Redis, pode criar um redishost ConfigMap:
export REDISHOST_IP=REDISHOST_IP
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Valide a configuração através do 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 de contentor criada em Criar a imagem de contentor. Este ficheiro contém a configuração para a implementação e o 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 cluster:
kubectl apply -f gke_deployment/visit-counter.yaml
Determine o endereço IP externo desta app de exemplo executando o seguinte comando:
kubectl get service visit-counter
Valide se a sua app está alojada no IP externo através do navegador ou envie um pedido GET através do curl ou do navegador:
curl http://EXTERNAL_IP
Remover a entrada das tabelas de IP para a instância do Redis
Se seguiu o passo três da secção deste guia passo a passo de
Preparar o cluster do GKE,
instalou o intervalo de IPs reservado da sua instância do Redis nas tabelas de IP 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