Mengonfigurasi Terraform

Untuk menggunakan Terraform di lingkungan Google Distributed Cloud (GDC) dengan air gap, Anda harus mendownload dan mengonfigurasinya untuk menangani resource Kubernetes.

Sebelum memulai

  • Download Terraform 1.6.3 atau yang lebih baru ke workstation Anda dengan mengikuti dokumentasi yang disediakan oleh HashiCorp: https://developer.hashicorp.com/terraform/install. Konfigurasi backend dalam dokumen ini menggunakan setelan yang tidak didukung oleh versi Terraform yang lebih lama.

  • Pastikan Anda sudah memiliki bucket penyimpanan GDC. Jika Anda belum memiliki bucket penyimpanan, buat bucket penyimpanan.

  • Pastikan sistem Anda dapat mengenali sertifikat Certificate Authority (CA) yang digunakan oleh penyimpanan objek.

Mengelola state file

State file di Terraform digunakan untuk mencatat status deployment saat ini dan memetakannya ke konfigurasi Terraform. Karena penyimpanan objek GDC diimplementasikan menggunakan S3, Anda dapat menggunakan S3 API Terraform untuk menyinkronkan dengan file status bersama. Untuk melakukannya, Anda harus mengonfigurasi Terraform agar disinkronkan dengan status jarak jauh:

  1. Tambahkan konfigurasi berikut ke file Terraform yang disimpan secara lokal, seperti file 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
      }
    }
    

    Ganti kode berikut:

    • BUCKET_FQN: nilai status.fullyQualifiedName dari resource kustom Bucket. Contoh, aabc2z8-platform-terraform-state.

    • TF_STATE_PATH: jalur file status Terraform yang akan disimpan di bucket penyimpanan. Contoh, main.tfstate.

    • ZONE: zona resource kustom Bucket (status.region). Misalnya, zone1. Terraform memerlukan nilai region, tetapi penyimpanan objek GDC tidak memeriksanya.

    • BUCKET_ENDPOINT: nilai status.endpoint dari resource kustom Bucket. Contoh, https://objectstorage.org-1.zone1.google.gdch.test.

    • ACCESS_KEY: kunci akses yang diperoleh dari secret yang berisi kredensial akses Anda. Ikuti Mendapatkan kredensial akses bucket untuk mendapatkan kunci akses. Nilai dalam secret dienkode base64. Dekode sebelum Anda menggunakannya.

    • SECRET_KEY: kunci rahasia yang diperoleh dari secret yang berisi kredensial akses Anda. Ikuti Mendapatkan kredensial akses bucket untuk mendapatkan kunci rahasia. Nilai dalam secret dienkode base64. Dekode sebelum Anda menggunakannya.

    Penyimpanan objek GDC kompatibel dengan S3, tetapi bukan AWS. Setelan lainnya mengonfigurasi backend untuk penyimpanan non-AWS S3:

    • use_path_style: menggunakan alamat bucket bergaya jalur untuk penyimpanan objek GDC.

    • skip_credentials_validation dan skip_requesting_account_id: menghentikan Terraform memanggil AWS STS dan AWS IAM. GDC tidak menyediakan layanan tersebut.

    • skip_metadata_api_check: menghentikan Terraform untuk mengkueri layanan metadata AWS EC2.

    • skip_region_validation: memungkinkan Anda menggunakan nama zona sebagai region.

    • skip_s3_checksum: menghentikan Terraform meminta checksum SHA-256 saat mengupload state file.

  2. Lakukan inisialisasi pengeditan file status baru di bucket penyimpanan yang Anda tentukan di langkah sebelumnya:

    terraform init
    

Menetapkan izin

Selain izin yang diperlukan untuk melakukan tugas tertentu menggunakan Terraform, seperti membuat project GDC, Anda juga harus memiliki izin untuk melihat definisi resource kustom pada cakupan tersebut. Terapkan izin yang diperlukan untuk menggunakan Terraform:

  1. Buat resource peran cluster 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
    

    Ganti KUBECONFIG dengan file kubeconfig server API atau cluster yang menghosting resource yang Anda kelola dengan Terraform. Misalnya, sebagian besar resource berjalan di server Management API. Untuk workload container, tetapkan file kubeconfig cluster Kubernetes Anda. Pastikan untuk menetapkan server API global jika Anda mengelola resource global.

  2. Ikat peran cluster yang ditentukan pada langkah sebelumnya ke pengguna:

    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
    

Ulangi langkah-langkah ini untuk setiap server atau cluster API yang ingin Anda tetapkan izin Terraform-nya.

Menginstal dan mengonfigurasi penyedia Terraform

Anda harus menginstal Penyedia Kubernetes untuk menyediakan dan mengelola resource Kubernetes.

  1. Dalam file Terraform di dalam modul Anda, seperti file main.tf, sisipkan blok required_providers berikut:

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = ">=2.24.0"
        }
      }
    }
    
  2. Lakukan inisialisasi direktori kerja Terraform untuk menginstal penyedia:

    terraform init