이 튜토리얼은 Google Kubernetes Engine(GKE) 클러스터에 웹 애플리케이션을 배포하고 HTTPS 부하 분산기로 노출하는 데 관심이 있는 클라우드 설계자 및 운영 관리자를 대상으로 합니다.
목표
이 튜토리얼에서는 다음과 같은 방법을 알아봅니다.
- GKE 클러스터 만들기
- Terraform으로 전역 IP 주소 및 Cloud DNS 영역 만들기
- HTTPS 부하 분산구성하기
- 샘플 웹 애플리케이션 배포하기
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
프로젝트 설정
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Google Kubernetes Engine, Cloud DNS APIs.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Google Kubernetes Engine, Cloud DNS APIs.
- 도메인 이름을 소유하고 있어야 합니다. 도메인 이름은 63자(영문 기준) 이하여야 합니다. Google Domains 또는 다른 등록기관을 이용할 수 있습니다.
환경 설정하기
이 튜토리얼에서는 Cloud Shell을 사용하여 Google Cloud에서 호스팅되는 리소스를 관리합니다. Cloud Shell에는 Terraform, kubectl
, gcloud CLI 등 이 튜토리얼에 필요한 소프트웨어가 사전 설치되어 있습니다.
환경 변수를 설정합니다.
PROJECT_ID=$(gcloud config get-value project) gcloud config set project $PROJECT_ID gcloud config set compute/region us-central1
코드 저장소를 클론합니다.
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
작업 디렉터리로 변경합니다.
cd kubernetes-engine-samples/autopilot/networking-tutorial
GKE 클러스터 만들기
다음 Terraform 파일에서 GKE 클러스터를 만듭니다.
다음 Terraform 파일에서 전역 IP 주소와 Cloud DNS 영역을 만듭니다.
Terraform을 초기화합니다.
terraform init
인프라 변경사항을 확인합니다.
terraform plan
메시지가 표시되면
my-domain.net
과 같은 도메인을 입력하세요.Terraform 구성을 적용합니다.
terraform apply --auto-approve
메시지가 표시되면
my-domain.net
과 같은 도메인을 입력하세요.출력은 다음과 비슷합니다.
Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: cluster_name = "networking-cluster" region = "us-central1"
외부 애플리케이션 부하 분산기 만들기
다음 매니페스트에서는 ManagedCertificate, FrontendConfig, 배포, 서비스, 인그레스를 설명합니다.
DOMAIN_NAME
을 도메인 이름으로 바꿉니다(예:my-domain.net
).이 매니페스트에는 다음과 같은 속성이 있습니다.
networking.gke.io/managed-certificates
: ManagedCertificate의 이름networking.gke.io/v1beta1.FrontendConfig
: FrontendConfig 리소스의 이름kubernetes.io/ingress.global-static-ip-name
: IP 주소의 이름kubernetes.io/ingress.class
: GKE 인그레스 컨트롤러에 외부 애플리케이션 부하 분산기를 만들도록 지시
매니페스트를 클러스터에 적용합니다.
kubectl apply -f kubernetes-manifests.yaml
인그레스가 생성되었는지 확인합니다.
kubectl describe ingress frontend
출력은 다음과 비슷합니다.
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 2m loadbalancer-controller default/frontend Normal CREATE 1m loadbalancer-controller ip: 203.0.113.2 ...
인그레스가 프로비저닝되는 데 몇 분 정도 걸릴 수 있습니다.
애플리케이션 테스트
SSL 인증서 상태를 확인합니다.
kubectl get managedcertificates.networking.gke.io networking-managed-cert
SSL 인증서를 프로비저닝하는 데 최대 30분이 걸릴 수 있습니다. 다음 출력은 SSL 인증서가 준비되었음을 나타냅니다.
NAME AGE STATUS networking-managed-cert 28m Active
curl
명령어를 실행합니다.curl -Lv https://DOMAIN_NAME
출력은 다음과 비슷합니다.
* Trying 34.160.115.33:443... * Connected to DOMAIN_NAME (34.160.115.33) port 443 (#0) ... * TLSv1.3 (IN), TLS handshake, Certificate (11): ... * Server certificate: * subject: CN=DOMAIN_NAME ... > Host: DOMAIN_NAME
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
개별 리소스 삭제
Kubernetes 리소스를 삭제합니다.
kubectl delete -f kubernetes-manifests.yaml
Terraform 리소스를 삭제합니다.
terraform destroy --auto-approve
메시지가 표시되면
my-domain.net
과 같은 도메인을 입력하세요.
다음 단계
- GKE 네트워킹 자세히 알아보기