, um zu prüfen, ob Ihr Cluster IP-Aliasing verwendet.
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 das 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 sie:
gcloud initFolgen 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
gcloudfest:gcloud config set project PROJECT_ID
Legen Sie die Konfigurationsvariable für die Compute Engine-Zone in
gcloudfest.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 mit
gclouderstellt haben, verwenden Sie den folgenden 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 Console (erweiterte Optionen) oder mit dem folgenden Befehl 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@latest
Beispielanwendung:
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:
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
Anwendung in Google Kubernetes Engine bereitstellen
Wenn Sie die IP-Adresse der Redis-Instanz nicht hartcodieren möchten, können Sie eine redishost-ConfigMap erstellen:
export REDISHOST_IP=REDISHOST_IP
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
Prüfen Sie die Konfiguration mit dem folgenden Befehl:
kubectl get configmaps redishost -o yaml
Aktualisieren Sie gke_deployment/visit-counter.yaml und ersetzen Sie <REPO_REGION>, <PROJECT_ID> und <REPO_ID> durch die Werte aus dem Container-Image, das Sie unter Container-Image erstellen erstellt haben. Diese Datei enthält die Konfiguration für die Bereitstellung und den Dienst.
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
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 externe IP-Adresse für diese Beispielanwendung abzurufen:
kubectl get service visit-counter
Prüfen Sie, ob Ihre Anwendung unter der externen IP-Adresse gehostet wird. Rufen Sie sie dazu in Ihrem Browser auf oder senden Sie eine GET-Anfrage mit curl oder Ihrem Browser:
curl http://EXTERNAL_IP
IP-Tabelleneintrag für die Redis-Instanz entfernen
Wenn Sie Schritt 3 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