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 범위를 모르는 경우, 콘솔(고급 옵션)을 통하거나 다음 명령어를 입력하여 확인할 수 있습니다.
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
자바
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
자바
이 애플리케이션은 Jetty 3.1 서블릿 기반입니다.
Jedis 라이브러리를 사용합니다.
AppServletContextListener
클래스는 장기 Redis 연결 풀을 만드는 데 사용됩니다.
VisitCounterServlet
클래스는 Redis 카운터를 증가시키는 웹 서블릿입니다.
Node.js
이 애플리케이션은 redis
모듈을 사용합니다.
Python
이 애플리케이션은 웹 서빙에 Flask를 사용하고 Redis 인스턴스와 통신하기 위해 redis-py
패키지를 사용합니다.
컨테이너 이미지 빌드
컨테이너 이미지를 빌드하여 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에 애플리케이션 배포
<PROJECT_ID>
를 Google Cloud 프로젝트 ID로 바꾸어 gke_deployment/visit-counter.yaml
을 업데이트합니다. 이 파일에는 배포 및 서비스의 구성이 포함되어 있습니다.
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
자바
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 클러스터 준비 섹션에서 세 번째 단계를 거치면 Redis 인스턴스의 예약된 IP 범위가 GKE 인스턴스의 IP 테이블에 설치됩니다. GKE 인스턴스의 IP 테이블에서 이 Redis IP 범위 항목을 삭제하려면 k8s-custom-iptables/
디렉터리에서 다음 명령어를 실행합니다.
./uninstall.sh