이 튜토리얼은 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 네트워킹 자세히 알아보기