Menggunakan Terraform

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

Dokumen ini ditujukan untuk semua grup audiens yang perlu menyiapkan Terraform untuk mengelola alur kerja hardware dan software yang di-air-gap. Untuk mengetahui informasi selengkapnya, lihat Audiens untuk dokumentasi GDC dengan air gap.

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 tidak memiliki bucket penyimpanan, buatlah. Untuk mengetahui informasi selengkapnya, lihat Membuat bucket penyimpanan.

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

  • Instal gdcloud CLI. Untuk mengetahui informasi selengkapnya, lihat Menggunakan gdcloud CLI.

  • Buat file kubeconfig untuk server API atau cluster yang menghosting resource yang ingin Anda kelola dengan Terraform. Untuk mengetahui informasi selengkapnya, lihat Mendapatkan file kubeconfig.

Menyiapkan Terraform

Untuk menyiapkan Terraform di lingkungan GDC Anda, selesaikan langkah-langkah berikut:

  1. Dalam modul Terraform, atau kumpulan file Terraform di workstation Anda, buat file main.tf dan tambahkan konfigurasi berikut:

    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. Untuk mengetahui informasi selengkapnya tentang cara mendapatkan kunci akses, lihat Mendapatkan kredensial akses bucket. Nilai dalam secret dienkode base64. Dekode sebelum Anda menggunakannya.

    • SECRET_KEY: kunci rahasia yang diperoleh dari secret yang berisi kredensial akses Anda. Untuk mengetahui informasi selengkapnya tentang cara mendapatkan kunci rahasia, lihat Mendapatkan kredensial akses bucket. 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 file status Terraform di bucket penyimpanan yang Anda tentukan pada langkah sebelumnya:

    terraform init
    
  3. Deploy resource peran cluster crd-viewer dan ikat ke akun pengguna Anda:

    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
    

    Ganti kode berikut:

    • KUBECONFIG: file kubeconfig server API atau cluster yang menghosting resource yang Anda kelola dengan Terraform.

    • USER_EMAIL: email pengguna yang akan diikat dengan peran.

    Deploy peran crd-viewer ke setiap server atau cluster API yang ingin Anda gunakan Terraform.

  4. Di file main.tf, sisipkan blok required_providers berikut:

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

    Konfigurasi ini menginstal penyedia Kubernetes untuk menyediakan dan mengelola resource Kubernetes di lingkungan GDC Anda.

  5. Lakukan inisialisasi direktori kerja Terraform untuk menginstal penyedia:

    terraform init
    

Langkah berikutnya