출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

다음과 같은 Qwiklabs 과정을 거치면서 배우고 한 내용들이다:

  • Getting Started: Create and Manage Cloud Resources: Challenge Lab

Getting Started: Create and Manage Cloud Resources: Challenge Lab는 퀘스트에 있는 다른 Qwiklabs들을 실행하면서 배워온 내용을 간단하게 시험해보는 내용이다.

 

주어진 시간은 1시간

 

Task 1: Create a project jumphost instance

Make sure you:

  • name the instance nucleus-jumphost
  • use the default region/zone → us-east1-b
  • use the machine type of f1-micro
  • use the default image type (Debian Linux)

Jumphost instance가 뭔지 몰라서 쳐봤는데 다음과 같이 설명했다:

A jumphost is an intermediary host to a remote network. → A system on a network used to access and manage devices in a separate security zone.

즉 이 작업을 하는 것은 "중간 지점"을 만들어주기 위함이다.

 

방법은 간단하다. 지금까지 해왔던데로 VM Instance를 만들면 되는데, VM Instance Create에서 다음과 같은 작업만 하고 바로 생성을 누르면 된다.

Task 1: Create a jumphost instance

Task 2: Create a Kubernetes service cluster

  • Create a cluster (in the us-east1-b zone) to host the service
  • Use the Docker container hello-app ('gcr.io/google-samples/hello-app:2.0') as a place holder, the team will replace the container with their own work later
  • Expose the app on port 8080

여기서부터는 잘 기억이 안난다. 그래서 기존에 했던 Qwiklabs 들을 참고하면서 실행을 했다.

 

우선 default compute zone 을 us-east1-b로 해주어야 한다:

gcloud config set compute/zone us-central1-a

 

그 다음, kubernetes cluster을 만들어주어야 한다.

gcloud container clusters create nucleus-backend

 

cluster의 authentication credential들을 얻어야하므로,

gcloud container clusters get-credential nucleus-backend

 

Cluster에 Application을 Deploy 해주어야 한다

kubectl create deployment hello-app --image=gcr.io/google-samples/hello-app:2.0

 

※ 참고로 여기서 kubectl이 뭔지 궁금해서 찾아봤었다. kubectl 같은 경우, kubernetes cluster을 제어하기 위한 명령어이다. kubectl은 config 파일을 $HOME/.kube 에서 찾는다.

 

 

마지막으로, application을 port8080에 expose 시켜주어야한다.

kubectl expose deployment hello-app --type=LoadBalancer --port8080

 

Task 3: Setup and HTTP load balancer:

  • Create an instance template
  • Create a target pool
  • Create a managed instance grou
  • Create a firewall rule to allow traffic (80/tcp)
  • Create a health check
  • Create a backend service and attach the managed instance group
  • Create a URL map and target HTTP proxy to route requests to your URL map
  • Create a forwarding rule

조금 요구하는게 많다. 이 부분도 아직 처음 배우는 단계라 잘 몰라서, 이전에 했던 Qwiklabs들을 참고하면서 했다.

 

처음에는 모든 VM instance에서 사용될 startup script를 만들어주어야한다. 이 script가 startup에서 nginx server을 셋업시켜준다:

cat << EOF > startup.sh
#! /bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
EOF

 

instance template을 만들어준다. (startup script를 이용함):

gcloud compute instance-templates create web-server-template \
--metadata-from-file startup-script=startup.sh

 

Target Pool을 이제 만들어준다:

gcloud compute target-pools create nginx-pool

 

Instance template을 이요해서 managed instance group을 만들어준다;

gcloud compute instance-groups managed create web-server-group \
--base-instance-name web-server \
--size 2 \
--template web-server-template \
--target-pool nginx-pool

이 size 2로 인해 nginx- 가 붙여진 2개의 VM instance가 생긴다.

 

방화벽을 이제 만들어준다:

gcloud compute firewall-rules create web-server-firewall --allow tcp:80

 

HTTPS load balancer을 만들기 전에, health check을 해야한다:

gcloud compute http-health-checks create http-basic-check

 

HTTP service를 define 해준다:

gcloud compute instance-groups managed \
set-named-ports web-server-group \
--named-ports http:80

 

Backend Service를 만들어준다:

gcloud compute backend-service create web-server-backend \
--protocol HTTP \
http-health-checks http-basic-check \
--global

 

Backend Service에 instance group을 넣어준다:

gcloud compute backend-services add-backend web-server-backend
--instance-group web-server-group \
--instance-group-region us-east1 \
--global

 

들어오는 요청들을 instances로 안내하는 URL map을 만든다:

gcloud compute url-maps create web-map \
--default-service web-server-backend

 

URL map으로 요청들을 안내한 타켓 HTTP 프록시를 설정한다:

gcloud compute target-http-proxies create http-lb-proxy \
--url map web-map

 

forwarding rule을 만들어준다:

gcloud compute forwarding-rules create http-content-rule \
--global \
--target-http-proxy http-lb-proxy \
--ports 80

 

지금 진행한 instance groups → backend service → url map→ target HTTPS proxy → forwarding rule은 다음과 같은 구조를 가지고 있다:

이 url map를 가지고 direct requests to a destination을 이루어낸다.

 

마지막으로 확인작업을 한다.

gcloud compute forwarding-rules list

 

이제는 끝이다. 다음과 같은 화면이 나타나면 성공이다.

success!

이렇게 되는게 정상인데...

왜 나는 이런 현상이 나왔을까:

이유가 뭔지 아직도 못찾았다. 세번이나 시도를 하긴 했는데도 저렇게 된거라 무엇을 잘못했는지는 잘 모르겠다

아마도 잘못 친 것 같다.