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 を設定するには、次の操作を行います。
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-stateTF_STATE_PATH: ストレージ バケットに保存する Terraform 状態ファイルのパス。例:main.tfstateZONE:Bucketカスタム リソース(status.region)のゾーン。例:zone1。Terraform にはリージョン値が必要ですが、GDC オブジェクト ストレージはそれをチェックしません。BUCKET_ENDPOINT:Bucketカスタム リソースのstatus.endpoint値。例:https://objectstorage.org-1.zone1.google.gdch.testACCESS_KEY: アクセス認証情報を含むシークレットから取得したアクセスキー。アクセスキーの取得の詳細については、バケットのアクセス認証情報を取得するをご覧ください。Secret の値は Base64 でエンコードされています。使用する前にデコードします。SECRET_KEY: アクセス認証情報を含むシークレットから取得した秘密鍵。秘密鍵の取得の詳細については、バケット アクセス認証情報を取得するをご覧ください。Secret の値は 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 チェックサムを要求しないようにします。
前の手順で指定したストレージ バケットで Terraform 状態ファイルを初期化します。
terraform initcrd-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ロールをデプロイします。main.tfファイルに、次のrequired_providersブロックを挿入します。terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }この構成では、Kubernetes プロバイダをインストールして、GDC 環境で Kubernetes リソースをプロビジョニングして管理します。
Terraform 作業ディレクトリを初期化して、プロバイダをインストールします。
terraform init