您只能从与 Redis 实例使用相同授权网络的 Google Kubernetes Engine 集群连接到该 Redis 实例。
设置
如果您已安装 Google Cloud CLI 且已创建 Redis 实例,则可以跳过这些步骤。
安装 gcloud CLI 并初始化:
gcloud init
按照快速入门指南创建一个 Redis 实例。记下该 Redis 实例的地区、IP 地址和端口。
准备 GKE 集群
如果您尚未创建 GKE 集群,请使用以下命令对 Google Cloud CLI 创建一个:
在
gcloud
中为此示例应用指定项目。gcloud config set project [PROJECT_ID]
在
gcloud
中设置 Compute Engine 地区配置变量。gcloud config set compute/zone [ZONE]
创建一个名为
visitcount-cluster
的 GKE 集群。gcloud container clusters create visitcount-cluster --num-nodes=3 --enable-ip-alias
如果未通过
gcloud
创建集群,请使用此命令检索集群凭据:gcloud container clusters get-credentials [CLUSTER_NAME] --zone [CLUSTER_ZONE] --project [PROJECT_ID]
- CLUSTER_NAME 是 GKE 集群的名称。
- CLUSTER_ZONE 是集群所在的地区。
- PROJECT_ID 是集群和 Redis 实例所在的项目。
如果您的集群是版本 1.8 或更高版本且启用了 IP 别名,请跳过此步骤。如果您的集群是版本 1.7 或更低版本,或者集群为版本 1.8 或更高版本但未启用 IP 别名,请在尝试连接到实例之前,按照以下解决方法步骤操作:
运行以下命令,将 RESERVED_IP_RANGE 替换为实例的预留 IP 范围:
git clone https://github.com/bowei/k8s-custom-iptables.git cd k8s-custom-iptables/ TARGETS="RESERVED_IP_RANGE" ./install.sh cd ..
如果您不清楚实例的预留 IP 范围,可通过 Console(高级选项)或输入以下命令找到:
gcloud redis instances describe INSTANCE_ID --region=REGION
如需详细了解 IP 别名(包括如何创建启用了此设置的集群),请参阅 IP 别名文档。
示例应用
此示例 HTTP 服务器应用通过 Google Kubernetes Engine 集群建立与 Redis 实例的连接。
克隆您所需编程语言的代码库,并转到包含示例代码的文件夹:
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
每次访问 /
端点时,此示例应用都会增加一个 Redis 计数器。
Go
此应用使用 github.com/gomodule/redigo/redis
客户端。通过运行以下命令进行安装:
go get github.com/gomodule/redigo/redis
Java
此应用基于 Jetty 3.1 servlet。
它使用 Jedis 库:
AppServletContextListener
类用于创建长效 Redis 连接池:
VisitCounterServlet
类是一个网络 Servlet,用于增加 Redis 计数器。
Node.js
此应用使用 redis
模块。
Python
构建容器映像
构建容器映像并将其推送到 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
将应用部署到 Google Kubernetes Engine
更新gke_deployment/visit-counter.yaml
,将 <PROJECT_ID>
替换为您的 Google Cloud 项目 ID。此文件包含部署和服务的配置。
Go
为避免对 Redis 实例 IP 进行硬编码,您可以创建 redishost ConfigMap:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
使用以下命令验证配置:
kubectl get configmaps redishost -o yaml
Java
Node.js
为避免对 Redis 实例 IP 进行硬编码,您可以创建 redishost ConfigMap:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
使用以下命令验证配置:
kubectl get configmaps redishost -o yaml
Python
为避免对 Redis 实例 IP 进行硬编码,您可以创建 redishost ConfigMap:
export REDISHOST_IP=XXX.XXX.XXX.XXX
kubectl create configmap redishost --from-literal=REDISHOST=${REDISHOST_IP}
使用以下命令验证配置:
kubectl get configmaps redishost -o yaml
将配置应用到您的集群:
kubectl apply -f gke_deployment/visit-counter.yaml
通过运行以下命令,确定此示例应用的 [EXTERNAL-IP] 地址:
kubectl get service visit-counter
通过浏览器查看 http://[EXTERNAL-IP] 处托管的应用,或者通过 cURL 或浏览器发送 GET 请求:
curl http://[EXTERNAL-IP]
删除 Redis 实例的 IP 表条目
如果您按照本演示中准备 GKE 集群部分的步骤 3 进行了操作,则您已将 Redis 实例的预留 IP 范围安装到了 GKE 实例的 IP 表中。如果要从 GKE 实例的 IP 表中移除此 Redis IP 范围条目,请从 k8s-custom-iptables/
目录运行以下命令:
./uninstall.sh