Terraform을 사용하여 멀티테넌트 클러스터 만들기
Google Kubernetes Engine (GKE) Enterprise 버전의 멀티테넌트 클러스터는 테넌트라고 하는 여러 팀 또는 사용자가 공유하는 Kubernetes 클러스터입니다. 일반적으로 각 테넌트는 클러스터 내에 자체 리소스 및 애플리케이션 집합을 보유합니다.
이 Terraform 튜토리얼에서는 두 팀(backend
및 frontend
)이 공유하고 클러스터에 팀별 워크로드를 배포할 수 있는 GKE Enterprise 클러스터를 빠르게 만들 수 있습니다. 이 튜토리얼에서는 Terraform에 이미 익숙하다고 가정합니다. 그렇지 않은 경우 다음 리소스를 사용하여 Terraform의 기본사항을 숙지할 수 있습니다.
- Terraform 시작하기 (동영상)
- Terraform 명령어
시작하기 전에
다음 단계에 따라 Kubernetes Engine API를 사용 설정합니다.
- 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, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, GKE Hub, Cloud SQL, Resource Manager, IAM, Connect gateway APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, GKE Hub, Cloud SQL, Resource Manager, IAM, Connect gateway APIs.
-
Make sure that you have the following role or roles on the project: roles/owner, roles/iam.serviceAccountTokenCreator
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
IAM으로 이동 - 프로젝트를 선택합니다.
- 액세스 권한 부여를 클릭합니다.
-
새 주 구성원 필드에 사용자 식별자를 입력합니다. 일반적으로 Google 계정의 이메일 주소입니다.
- 역할 선택 목록에서 역할을 선택합니다.
- 역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.
- 저장을 클릭합니다.
-
환경 준비
이 튜토리얼에서는 Cloud Shell을 사용하여Google Cloud에서 호스팅되는 리소스를 관리합니다. Cloud Shell에는 Terraform, kubectl
, Google Cloud CLI를 포함하여 이 튜토리얼에 필요한 소프트웨어가 사전에 설치되어 있습니다.
Cloud Shell 활성화 아이콘 Cloud Shell 활성화 를 클릭하여 Google Cloud 콘솔에서 Cloud Shell 세션을 시작합니다. 그러면 Google Cloud 콘솔 하단 창에서 세션이 시작됩니다.
이 가상 머신과 연결된 서비스 사용자 인증 정보가 자동으로 생성되므로 서비스 계정 키를 설정하거나 다운로드할 필요가 없습니다.
명령어를 실행하기 전에 다음 명령어를 사용하여 gcloud CLI에서 기본 프로젝트를 설정합니다.
gcloud config set project PROJECT_ID
여기서
PROJECT_ID
를 프로젝트 ID로 바꿉니다.GitHub 저장소를 클론합니다.
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
작업 디렉터리로 변경합니다.
cd terraform-docs-samples/gke/quickstart/multitenant
Terraform 파일 검토
Google Cloud 프로바이더는 Terraform을 사용하여 Google Cloud 리소스를 관리하고 프로비저닝할 수 있는 플러그인입니다. Terraform 구성과Google Cloud API 사이의 브리지 역할을 하므로 가상 머신 및 네트워크와 같은 인프라 리소스를 선언적으로 정의할 수 있습니다.
GKE Enterprise 클러스터 리소스를 설명하는
main.tf
파일을 검토합니다.cat main.tf
출력은 다음과 비슷합니다.
클러스터 및 SQL 데이터베이스 만들기
Cloud Shell에서 다음 명령어를 실행하여 Terraform을 사용할 수 있는지 확인합니다.
terraform
출력은 다음과 비슷하게 표시됩니다.
Usage: terraform [global options] <subcommand> [args] The available commands for execution are listed below. The primary workflow commands are given first, followed by less common or more advanced commands. Main commands: init Prepare your working directory for other commands validate Check whether the configuration is valid plan Show changes required by the current configuration apply Create or update infrastructure destroy Destroy previously-created infrastructure
Terraform을 초기화합니다.
terraform init
선택사항: Terraform 구성을 계획합니다.
terraform plan
Terraform 구성 적용
terraform apply
메시지가 표시되면
yes
를 입력하여 작업을 확인합니다. 이 명령어가 완료되는 데 몇 분이 소요될 수 있습니다. 출력은 다음과 비슷합니다.Apply complete! Resources: 23 added, 0 changed, 0 destroyed.
백엔드 팀 애플리케이션 배포
다음 Terraform 파일을 검토합니다.
cat backend.yaml
출력은 다음과 비슷하게 표시됩니다.
이 파일은 다음 리소스를 설명합니다.
- 샘플 애플리케이션이 포함된 배포
- LoadBalancer 유형의 서비스.
이 서비스는 포트 80에서 배포를 노출합니다. 애플리케이션을 인터넷에 노출하려면
networking.gke.io/load-balancer-type
주석을 삭제하여 외부 부하 분산기를 구성합니다.
Cloud Shell에서 다음 명령어를 실행하여 백엔드팀의 서비스 계정을 명의 도용합니다.
gcloud config set auth/impersonate_service_account backend@PROJECT_ID.iam.gserviceaccount.com
여기서
PROJECT_ID
를 프로젝트 ID로 바꿉니다.클러스터 사용자 인증 정보를 검색합니다.
gcloud container fleet memberships get-credentials gke-enterprise-cluster --location us-central1
백엔드팀의 매니페스트를 클러스터에 적용합니다.
kubectl apply -f backend.yaml
백엔드 애플리케이션 작동 확인
클러스터가 올바르게 실행 중인지 확인하려면 다음을 수행합니다.
Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.
backend
워크로드를 클릭합니다. 포드 세부정보 페이지가 표시됩니다. 이 페이지에는 주석, 포드에서 실행되는 컨테이너, 포드를 노출하는 서비스, 측정항목(예: CPU, 메모리, 디스크 사용량)과 같은 포드에 대한 정보가 표시됩니다.backend
LoadBalancer 서비스를 클릭합니다. 서비스 세부정보 페이지가 표시됩니다. 이 페이지에는 서비스와 연결된 포드 및 서비스에서 사용하는 포트와 같은 서비스에 대한 정보가 표시됩니다.엔드포인트 섹션에서 IPv4 링크를 클릭하여 브라우저에서 서비스를 봅니다. 출력은 다음과 비슷합니다.
Backend! Hostname: backendweb-765f6c4fc9-cl7jx Set Color: green
사용자가 백엔드 엔드포인트에 액세스할 때마다 서비스는 공유 데이터베이스에서 빨간색, 초록색, 파란색 중에서 색상을 무작위로 선택하여 저장합니다.
프런트엔드 팀 애플리케이션 배포
다음 Terraform 파일을 검토합니다.
cat frontend.yaml
출력은 다음과 비슷하게 표시됩니다.
이 파일은 다음 리소스를 설명합니다.
- 샘플 애플리케이션이 포함된 배포
- LoadBalancer 유형의 서비스.
이 서비스는 포트 80에서 배포를 노출합니다. 애플리케이션을 인터넷에 노출하려면
networking.gke.io/load-balancer-type
주석을 삭제하여 외부 부하 분산기를 구성합니다.
Cloud Shell에서 다음 명령어를 실행하여 프런트엔드팀의 서비스 계정을 명의 도용합니다.
gcloud config set auth/impersonate_service_account frontend@PROJECT_ID.iam.gserviceaccount.com
여기서
PROJECT_ID
를 프로젝트 ID로 바꿉니다.클러스터 사용자 인증 정보를 검색합니다.
gcloud container fleet memberships get-credentials gke-enterprise-cluster --location us-central1
클러스터에 프런트엔드팀의 매니페스트를 적용합니다.
kubectl apply -f frontend.yaml
프런트엔드 애플리케이션 작동 확인
클러스터가 올바르게 실행 중인지 확인하려면 다음을 수행합니다.
Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.
frontend
워크로드를 클릭합니다. 포드 세부정보 페이지가 표시됩니다. 이 페이지에는 주석, 포드에서 실행되는 컨테이너, 포드를 노출하는 서비스, 측정항목(예: CPU, 메모리, 디스크 사용량)과 같은 포드에 대한 정보가 표시됩니다.frontend
LoadBalancer 서비스를 클릭합니다. 서비스 세부정보 페이지가 표시됩니다. 이 페이지에는 서비스와 연결된 포드 및 서비스에서 사용하는 포트와 같은 서비스에 대한 정보가 표시됩니다.엔드포인트 섹션에서 IPv4 링크를 클릭하여 브라우저에서 서비스를 봅니다. 출력은 다음과 비슷합니다.
Frontend! Hostname: frontendweb-5cd888d88f-gwwtc Got Color: green
삭제
이 페이지에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.
Cloud Shell에서 다음 명령어를 실행하여 서비스 계정 명의 도용을 설정 해제합니다.
gcloud config unset auth/impersonate_service_account
다음 명령어를 실행하여 Terraform 리소스를 삭제합니다.
terraform destroy --auto-approve
다음 단계
GKE용 Terraform 리소스를 살펴보세요.
Terraform GKE 모듈 GitHub 저장소에서 독자적인 구성 샘플을 살펴보세요.