Google Distributed Cloud (GDC) 에어 갭 환경에서 Terraform을 사용하려면 이를 다운로드하고 Kubernetes 리소스를 처리하도록 구성해야 합니다.
시작하기 전에
HashiCorp에서 제공하는 문서(https://developer.hashicorp.com/terraform/install)에 따라 Terraform 1.6.3 이상을 워크스테이션에 다운로드합니다. 이 문서의 백엔드 구성은 이전 Terraform 버전에서 지원하지 않는 설정을 사용합니다.
시스템이 객체 스토리지에서 사용하는 인증 기관 (CA) 인증서를 인식할 수 있는지 확인합니다.
상태 파일 관리
Terraform의 상태 파일은 배포의 현재 상태를 기록하고 이를 Terraform 구성에 매핑하는 데 사용됩니다. GDC 객체 스토리지는 S3를 사용하여 구현되므로 Terraform S3 API를 사용하여 공유 상태 파일과 동기화할 수 있습니다. 이렇게 하려면 원격 상태와 동기화하도록 Terraform을 구성해야 합니다.
로컬에 저장된 Terraform 파일(예:
main.tf파일)에 다음 구성을 추가합니다.terraform { backend "s3" { bucket = "BUCKET_FQN" key = "TF_STATE_PATH" region = "ZONE" endpoints = { s3 = "BUCKET_ENDPOINT" } use_path_style = true access_key = "ACCESS_KEY" secret_key = "SECRET_KEY" skip_credentials_validation = true skip_requesting_account_id = true skip_metadata_api_check = true skip_region_validation = true skip_s3_checksum = true } }다음을 바꿉니다.
BUCKET_FQN:Bucket커스텀 리소스의status.fullyQualifiedName값입니다. 예를 들면aabc2z8-platform-terraform-state입니다.TF_STATE_PATH: 스토리지 버킷에 저장할 Terraform 상태 파일의 경로입니다. 예를 들면main.tfstate입니다.ZONE:Bucket커스텀 리소스(status.region)의 영역입니다(예:zone1). Terraform에는 리전 값이 필요하지만 GDC 객체 스토리지는 이를 확인하지 않습니다.BUCKET_ENDPOINT:Bucket커스텀 리소스의status.endpoint값입니다. 예를 들면https://objectstorage.org-1.zone1.google.gdch.test입니다.ACCESS_KEY: 액세스 사용자 인증 정보가 포함된 보안 비밀에서 가져온 액세스 키입니다. 버킷 액세스 사용자 인증 정보 가져오기에 따라 액세스 키를 가져옵니다. 보안 비밀의 값은 base64로 인코딩됩니다. 사용하기 전에 디코딩하세요.SECRET_KEY: 액세스 사용자 인증 정보가 포함된 보안 비밀에서 가져온 보안 비밀 키입니다. 버킷 액세스 사용자 인증 정보 가져오기에 따라 보안 비밀 키를 가져옵니다. 보안 비밀의 값은 base64로 인코딩됩니다. 사용하기 전에 디코딩하세요.
GDC 객체 스토리지는 S3와 호환되지만 AWS가 아닙니다. 나머지 설정은 AWS S3 이외의 스토리지에 대한 백엔드를 구성합니다.
use_path_style: GDC 객체 스토리지에 경로 스타일 버킷 주소 지정을 사용합니다.skip_credentials_validation및skip_requesting_account_id: Terraform이 AWS STS 및 AWS IAM을 호출하지 못하도록 합니다. GDC는 이러한 서비스를 제공하지 않습니다.skip_metadata_api_check: Terraform이 AWS EC2 메타데이터 서비스를 쿼리하지 못하게 합니다.skip_region_validation: 영역 이름을 리전으로 사용할 수 있습니다.skip_s3_checksum: Terraform이 상태 파일을 업로드할 때 SHA-256 체크섬을 요청하지 못하게 합니다.
이전 단계에서 지정한 스토리지 버킷에서 새 상태 파일 수정을 초기화합니다.
terraform init
권한 설정
GDC 프로젝트 만들기와 같이 Terraform을 사용하여 특정 작업을 수행하는 데 필요한 권한 외에도 해당 범위에서 커스텀 리소스 정의를 볼 수 있는 권한도 있어야 합니다. Terraform을 사용하는 데 필요한 권한을 적용합니다.
crd-viewer클러스터 역할 리소스를 만듭니다.kubectl apply --kubeconfig KUBECONFIG -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: crd-viewer rules: - apiGroups: ["apiextensions.k8s.io"] resources: ["customresourcedefinitions"] verbs: ["get", "list", "watch"] EOFKUBECONFIG를 Terraform으로 관리하는 리소스를 호스팅하는 API 서버 또는 클러스터의 kubeconfig 파일로 바꿉니다. 예를 들어 대부분의 리소스는 Management API 서버에서 실행됩니다. 컨테이너 워크로드의 경우 Kubernetes 클러스터 kubeconfig 파일을 설정합니다. 전역 리소스를 관리하는 경우 전역 API 서버를 설정해야 합니다.이전 단계에서 정의한 클러스터 역할을 사용자에게 바인딩합니다.
kubectl apply --kubeconfig KUBECONFIG -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: crd-viewer-binding subjects: - kind: User name: USER_EMAIL roleRef: kind: ClusterRole name: crd-viewer apiGroup: rbac.authorization.k8s.io EOF
Terraform 권한을 설정하려는 각 API 서버 또는 클러스터에 대해 이 단계를 반복합니다.
Terraform 제공업체 설치 및 구성
Kubernetes 리소스를 프로비저닝하고 관리하려면 Kubernetes 제공업체를 설치해야 합니다.
모듈 내의 Terraform 파일(예:
main.tf파일)에 다음required_providers블록을 삽입합니다.terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }Terraform 작업 디렉터리를 초기화하여 제공업체를 설치합니다.
terraform init