Google Distributed Cloud (GDC) 오프라인 환경에서 Terraform을 사용하려면 Kubernetes 리소스를 처리하도록 다운로드하고 구성해야 합니다.
시작하기 전에
HashiCorp에서 제공하는 문서(https://developer.hashicorp.com/terraform/install)에 따라 워크스테이션에 Terraform을 다운로드합니다.
시스템에서 객체 스토리지에서 사용하는 인증 기관 (CA) 인증서를 인식할 수 있는지 확인합니다.
상태 파일 관리
Terraform의 상태 파일은 배포의 현재 상태를 기록하고 이를 Terraform 구성에 매핑하는 데 사용됩니다. GDC 객체 스토리지는 S3를 사용하여 구현되므로 Terraform S3 API를 사용하여 공유 상태 파일과 동기화할 수 있습니다. 이렇게 하려면 원격 상태와 동기화하도록 Terraform을 구성해야 합니다.
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_validation
및force_style_path
을true
로 설정해야 합니다.이전 단계에서 지정한 스토리지 버킷에서 새 상태 파일 수정사항을 초기화합니다.
terraform init
Terraform에서 필수 입력으로 AWS 리전을 요청할 수 있지만 GDC 객체 스토리지를 사용하므로 값은 사용되지 않습니다. 요구사항을 충족하기 위해 AWS 리전을 입력합니다.
권한 설정
Terraform을 사용하여 GDC 프로젝트를 만드는 등 특정 작업을 실행하는 데 필요한 권한 외에도 해당 범위에서 커스텀 리소스 정의를 볼 수 있는 권한이 있어야 합니다. 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"] EOF
KUBECONFIG
를 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.6.1" } } }
Terraform 작업 디렉터리를 초기화하여 제공업체를 설치합니다.
terraform init