Google Distributed Cloud(GDC)のエアギャップ環境で Terraform を使用するには、ダウンロードして、Kubernetes リソースを処理するように構成する必要があります。
始める前に
HashiCorp が提供するドキュメント(https://developer.hashicorp.com/terraform/install)に沿って、ワークステーションに Terraform をダウンロードします。
オブジェクト ストレージで使用される認証局(CA)証明書をシステムが認識できることを確認します。
状態ファイルを管理する
Terraform の状態ファイルは、デプロイの現在の状態を記録し、Terraform 構成にマッピングするために使用されます。GDC オブジェクト ストレージは S3 を使用して実装されているため、Terraform S3 API を使用して共有状態ファイルと同期できます。これを行うには、リモート状態と同期するように Terraform を構成する必要があります。
次の構成を、ローカルに保存されている Terraform ファイル(
main.tf
ファイルなど)に追加します。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