Terraform 사용

Google Distributed Cloud (GDC) 에어 갭 환경에서 Terraform을 구성하려면 Terraform을 다운로드하고 Kubernetes 리소스를 처리하도록 구성해야 합니다.

이 문서는 에어 갭 하드웨어 및 소프트웨어 워크플로를 관리하기 위해 Terraform을 설정해야 하는 모든 잠재고객 그룹을 대상으로 합니다. 자세한 내용은 GDC 에어 갭 문서 대상을 참조하세요.

시작하기 전에

  • HashiCorp에서 제공하는 문서(https://developer.hashicorp.com/terraform/install)에 따라 Terraform 1.6.3 이상을 워크스테이션에 다운로드합니다. 이 문서의 백엔드 구성은 이전 Terraform 버전에서 지원하지 않는 설정을 사용합니다.

  • 기존 GDC 스토리지 버킷이 있는지 확인합니다. 스토리지 버킷이 없으면 버킷을 만듭니다. 자세한 내용은 스토리지 버킷 만들기를 참조하세요.

  • 시스템이 객체 스토리지에서 사용하는 인증 기관 (CA) 인증서를 인식할 수 있는지 확인합니다.

  • gdcloud CLI를 설치합니다. 자세한 내용은 gdcloud CLI 사용을 참조하세요.

  • Terraform으로 관리하려는 리소스를 호스팅하는 API 서버 또는 클러스터의 kubeconfig 파일을 생성합니다. 자세한 내용은 kubeconfig 파일 가져오기를 참조하세요.

Terraform 설정

GDC 환경에서 Terraform을 설정하려면 다음을 완료하세요.

  1. 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 체크섬을 요청하지 못하게 합니다.

  2. 이전 단계에서 지정한 스토리지 버킷에서 Terraform 상태 파일을 초기화합니다.

    terraform init
    
  3. 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"]
    ---
    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
    

    다음을 바꿉니다.

    • KUBECONFIG: Terraform으로 관리하는 리소스를 호스팅하는 API 서버 또는 클러스터의 kubeconfig 파일입니다.

    • USER_EMAIL: 역할을 바인딩할 사용자의 이메일입니다.

    Terraform을 사용하려는 각 API 서버 또는 클러스터에 crd-viewer 역할을 배포합니다.

  4. main.tf 파일에 다음 required_providers 블록을 삽입합니다.

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = ">=2.24.0"
        }
      }
    }
    

    이 구성은 GDC 환경에서 Kubernetes 리소스를 프로비저닝하고 관리하기 위해 Kubernetes 제공업체를 설치합니다.

  5. Terraform 작업 디렉터리를 초기화하여 제공업체를 설치합니다.

    terraform init
    

다음 단계