Terraform 구성

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

시작하기 전에

  • HashiCorp에서 제공하는 문서(https://developer.hashicorp.com/terraform/install)에 따라 워크스테이션에 Terraform을 다운로드합니다.

  • 기존 GDC 스토리지 버킷이 있는지 확인합니다. 스토리지 버킷이 없으면 버킷을 만듭니다.

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

상태 파일 관리

Terraform의 상태 파일은 배포의 현재 상태를 기록하고 이를 Terraform 구성에 매핑하는 데 사용됩니다. GDC 객체 스토리지는 S3를 사용하여 구현되므로 Terraform S3 API를 사용하여 공유 상태 파일과 동기화할 수 있습니다. 이렇게 하려면 원격 상태와 동기화하도록 Terraform을 구성해야 합니다.

  1. main.tf 파일과 같이 로컬에 저장된 Terraform 파일에 다음 구성을 추가합니다.

    terraform {
      backend "s3" {
        bucket = "BUCKET_FQN"
        key = "TF_STATE_PATH"
        endpoint = "BUCKET_ENDPOINT"
        skip_credentials_validation = true
        force_path_style = true
        access_key = "ACCESS_KEY"
        secret_key = "SECRET_KEY"
        ...
      }
    }
    

    다음을 바꿉니다.

    • BUCKET_FQN: Bucket 커스텀 리소스의 정규화된 이름입니다.

    • TF_STATE_PATH: 스토리지 버킷에 저장할 Terraform 상태 파일의 위치입니다.

    • BUCKET_ENDPOINT: Bucket 커스텀 리소스의 엔드포인트입니다.

    • ACCESS_KEY: 액세스 사용자 인증 정보가 포함된 보안 비밀에서 획득한 액세스 키입니다. 버킷 액세스 사용자 인증 정보 가져오기에 따라 액세스 키를 획득합니다.

    • SECRET_KEY: 액세스 사용자 인증 정보가 포함된 보안 비밀에서 획득한 보안 비밀 키입니다. 버킷 액세스 사용자 인증 정보 가져오기에 따라 보안 비밀 키를 획득합니다.

    GDC는 사용자 인증 정보 유효성 검사를 지원하지 않고 경로 스타일 엔드포인트를 사용하므로 skip_credentials_validationforce_style_pathtrue로 설정해야 합니다.

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

    terraform init
    

    Terraform에서 필수 입력으로 AWS 리전을 요청할 수 있지만 GDC 객체 스토리지를 사용하므로 값은 사용되지 않습니다. 요구사항을 충족하기 위해 AWS 리전을 입력합니다.

권한 설정

Terraform을 사용하여 GDC 프로젝트를 만드는 등 특정 작업을 실행하는 데 필요한 권한 외에도 해당 범위에서 커스텀 리소스 정의를 볼 수 있는 권한이 있어야 합니다. Terraform을 사용하기 위해 필요한 권한을 적용합니다.

  1. 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"]
    EOF
    

    KUBECONFIG를 Terraform으로 관리하는 리소스를 호스팅하는 API 서버 또는 클러스터의 kubeconfig 파일로 바꿉니다. 예를 들어 대부분의 리소스는 Management API 서버에서 실행됩니다. 컨테이너 워크로드의 경우 Kubernetes 클러스터 kubeconfig 파일을 설정합니다. 전역 리소스를 관리하는 경우 전역 API 서버를 설정해야 합니다.

  2. 이전 단계에서 정의한 클러스터 역할을 사용자에게 바인딩합니다.

    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 제공자를 설치해야 합니다.

  1. 모듈 내의 Terraform 파일(예: main.tf 파일)에 다음 required_providers 블록을 삽입합니다.

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = "~>2.6.1"
        }
      }
    }
    
  2. Terraform 작업 디렉터리를 초기화하여 제공업체를 설치합니다.

    terraform init