Sie können eine Verbindung zur Redis-Instanz nur über einen Google Kubernetes Engine-Cluster herstellen, der dasselbe autorisierte Netzwerk wie die Redis-Instanz verwendet.
Einrichtung
Wenn Sie die Google Cloud CLI bereits installiert und eine Redis-Instanz erstellt haben, können Sie diese Schritte überspringen.
Installieren Sie die gcloud CLI und initialisieren Sie Folgendes:
gcloud init
Folgen Sie der Schnellstartanleitung zum Erstellen einer Redis-Instanz. Notieren Sie sich die Zone, die IP-Adresse und den Port der Redis-Instanz.
GKE-Cluster vorbereiten
Wenn Sie noch keinen GKE-Cluster erstellt haben, erstellen Sie einen mit den folgenden Befehlen für die Google Cloud CLI:
Legen Sie das Projekt für diese Beispielanwendung in
gcloud
fest:gcloud config set project [PROJECT_ID]
Legen Sie die Konfigurationsvariable für die Compute Engine-Zone in
gcloud
fest.gcloud config set compute/zone [ZONE]
Erstellen Sie einen GKE-Cluster mit dem Namen
visitcount-cluster
.gcloud container clusters create visitcount-cluster --num-nodes=3 --enable-ip-alias
Wenn Sie den Cluster nicht über
gcloud
erstellt haben, verwenden Sie diesen Befehl, um die Anmeldedaten des Clusters abzurufen:gcloud container clusters get-credentials [CLUSTER_NAME] --zone [CLUSTER_ZONE] --project [PROJECT_ID]
- CLUSTER_NAME ist der Name des GKE-Clusters.
- CLUSTER_ZONE ist die Zone, in der sich der Cluster befindet.
- PROJECT_ID ist das Projekt, in dem sich der Cluster und die Redis-Instanzen befinden.
Wenn die Cluster-Version 1.8 oder höher ist und IP-Aliasse aktiviert sind, überspringen Sie diesen Schritt. Wenn Sie einen Cluster der Version 1.7 oder niedriger haben oder für Ihren Cluster der Version 1.8 oder höher keine IP-Aliasse aktiviert sind, führen Sie die folgenden Umgehungsschritte aus. Daraufhin können Sie versuchen, eine Verbindung zu Ihrer Instanz herzustellen.
Führen Sie diese Befehle aus und ersetzen Sie dabei RESERVED_IP_RANGE durch den reservierten IP-Bereich Ihrer Instanz:
git clone https://github.com/bowei/k8s-custom-iptables.git cd k8s-custom-iptables/ TARGETS="RESERVED_IP_RANGE" ./install.sh cd ..
Wenn Sie den reservierten IP-Bereich Ihrer Instanz nicht kennen, rufen Sie ihn über die Konsole (erweiterte Optionen) oder durch Eingabe dieses Befehls ab:
gcloud redis instances describe INSTANCE_ID --region=REGION
Weitere Informationen zu IP-Aliassen und zum Erstellen eines Clusters mit dieser Einstellung finden Sie in der Dokumentation zu IP-Aliassen.
Beispielanwendung
Diese HTTP-Server-Beispielanwendung stellt eine Verbindung zu einer Redis-Instanz aus einem Google Kubernetes Engine-Cluster her.
Klonen Sie das Repository für die gewünschte Programmiersprache und rufen Sie den Ordner auf, der den Beispielcode enthält:
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
Diese Beispielanwendung erhöht einen Redis-Zähler jedes Mal, wenn auf den Endpunkt /
zugegriffen wird.
Go
Diese Anwendung verwendet den github.com/gomodule/redigo/redis
-Client. Installieren Sie diesen mit dem folgenden Befehl:
go get github.com/gomodule/redigo/redis
Java
Diese Anwendung basiert auf dem Jetty-Servlet 3.1.
Sie verwendet die Jedis-Bibliothek:
Die Klasse AppServletContextListener
wird zum Erstellen eines langlebigen Redis-Verbindungspools verwendet:
Die Klasse VisitCounterServlet
ist ein Web-Servlet, das einen Redis-Zähler schrittweise erhöht.
Node.js
Diese Anwendung verwendet das Modul redis
.
Python
Diese Anwendung verwendet Flask für das Web-Serving und das redis-py
-Paket für die Kommunikation mit der Redis-Instanz.
Container-Image erstellen
Erstellen Sie das Container-Image und verschieben Sie es in 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
Anwendung in Google Kubernetes Engine bereitstellen
Aktualisieren Siegke_deployment/visit-counter.yaml
und ersetzen Sie <PROJECT_ID>
durch Ihre Google Cloud-Projekt-ID. Diese Datei enthält die Konfiguration für die Bereitstellung und den Dienst.
Go
Wenn Sie die IP-Adresse der Redis-Instanz nicht hartcodieren möchten, können Sie eine redishost-ConfigMap erstellen:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
So überprüfen Sie die Konfiguration:
kubectl get configmaps redishost -o yaml
Java
Node.js
Wenn Sie die IP-Adresse der Redis-Instanz nicht hartcodieren möchten, können Sie eine redishost-ConfigMap erstellen:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
So überprüfen Sie die Konfiguration:
kubectl get configmaps redishost -o yaml
Python
Wenn Sie die IP-Adresse der Redis-Instanz nicht hartcodieren möchten, können Sie eine redishost-ConfigMap erstellen:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
So überprüfen Sie die Konfiguration:
kubectl get configmaps redishost -o yaml
Wenden Sie die Konfiguration auf Ihren Cluster an:
kubectl apply -f gke_deployment/visit-counter.yaml
Führen Sie den folgenden Befehl aus, um die [EXTERNAL-IP]-Adresse für diese Beispielanwendung abzurufen:
kubectl get service visit-counter
Sie können die Anwendung in Ihrem Browser unter http://[EXTERNAL-IP] aufrufen. Alternativ können Sie eine GET-Anfrage über cURL oder Ihren Browser senden:
curl http://[EXTERNAL-IP]
IP-Tabelleneintrag für die Redis-Instanz entfernen
Wenn Sie Schritt drei des Abschnitts GKE-Cluster vorbereiten dieser Schritt-für-Schritt-Anleitung ausgeführt haben, wurde der reservierte IP-Bereich Ihrer Redis-Instanz in den IP-Tabellen der GKE-Instanz installiert. Wenn Sie diesen Redis-IP-Bereichseintrag aus den IP-Tabellen Ihrer GKE-Instanz entfernen möchten, führen Sie den folgenden Befehl im Verzeichnis k8s-custom-iptables/
aus:
./uninstall.sh