Pour utiliser Terraform dans votre environnement Google Distributed Cloud (GDC) air-gapped, vous devez le télécharger et le configurer pour gérer les ressources Kubernetes.
Avant de commencer
Téléchargez Terraform 1.6.3 ou une version ultérieure sur votre poste de travail en suivant la documentation fournie par HashiCorp : https://developer.hashicorp.com/terraform/install. La configuration du backend dans ce document utilise des paramètres qui ne sont pas compatibles avec les anciennes versions de Terraform.
Vérifiez que vous disposez d'un bucket de stockage GDC. Si vous n'avez pas de bucket de stockage, créez-en un.
Assurez-vous que votre système peut reconnaître le certificat de l'autorité de certification (CA) utilisé par le stockage d'objets.
Gérer le fichier d'état
Le fichier d'état dans Terraform permet d'enregistrer l'état actuel du déploiement et de le mapper à la configuration Terraform. Étant donné que le store d'objets GDC est implémenté à l'aide de S3, vous pouvez utiliser l'API Terraform S3 pour effectuer la synchronisation avec un fichier d'état partagé. Pour ce faire, vous devez configurer Terraform pour qu'il se synchronise avec l'état distant :
Ajoutez la configuration suivante à un fichier Terraform stocké localement, tel que le fichier
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 } }Remplacez les éléments suivants :
BUCKET_FQN: valeurstatus.fullyQualifiedNamede la ressource personnaliséeBucket. Par exemple,aabc2z8-platform-terraform-state.TF_STATE_PATH: chemin d'accès au fichier d'état Terraform à stocker dans le bucket de stockage. Exemple :main.tfstateZONE: zone de la ressource personnaliséeBucket(status.region). Par exemple,zone1. Terraform nécessite une valeur de région, mais le stockage d'objets GDC ne la vérifie pas.BUCKET_ENDPOINT: valeurstatus.endpointde la ressource personnaliséeBucket. Par exemple,https://objectstorage.org-1.zone1.google.gdch.test.ACCESS_KEY: clé d'accès acquise à partir du secret contenant vos identifiants d'accès. Suivez les instructions de la section Obtenir les identifiants d'accès au bucket pour obtenir la clé d'accès. La valeur du secret est encodée en base64. Décodez-la avant de l'utiliser.SECRET_KEY: clé secrète acquise à partir du secret contenant vos identifiants d'accès. Suivez les instructions de la section Obtenir les identifiants d'accès au bucket pour acquérir la clé secrète. La valeur du secret est encodée en base64. Décodez-la avant de l'utiliser.
Le stockage d'objets GDC est compatible avec S3, mais il ne s'agit pas d'AWS. Les paramètres restants configurent le backend pour le stockage non AWS S3 :
use_path_style: utilise l'adressage de bucket de style chemin d'accès pour le store d'objets GDC.skip_credentials_validationetskip_requesting_account_id: empêche Terraform d'appeler AWS STS et AWS IAM. GDC ne fournit pas ces services.skip_metadata_api_check: empêche Terraform d'interroger le service de métadonnées AWS EC2.skip_region_validation: vous permet d'utiliser le nom de la zone comme région.skip_s3_checksum: empêche Terraform de demander une somme de contrôle SHA-256 lors de l'importation du fichier d'état.
Initialisez les modifications du nouveau fichier d'état dans le bucket de stockage que vous avez spécifié à l'étape précédente :
terraform init
Définir des autorisations
En plus des autorisations requises pour effectuer une tâche spécifique à l'aide de Terraform, comme la création d'un projet GDC, vous devez également disposer des autorisations nécessaires pour afficher les définitions de ressources personnalisées dans ce champ d'application. Appliquez les autorisations requises pour utiliser Terraform :
Créez la ressource de rôle de 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"] EOFRemplacez
KUBECONFIGpar le fichier kubeconfig du serveur d'API ou du cluster qui héberge la ressource que vous gérez avec Terraform. Par exemple, la plupart des ressources s'exécutent sur le serveur d'API Management. Pour les charges de travail de conteneur, définissez le fichier kubeconfig de votre cluster Kubernetes. Veillez à définir le serveur d'API global si vous gérez une ressource globale.Liez le rôle de cluster défini à l'étape précédente à l'utilisateur :
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
Répétez ces étapes pour chaque serveur ou cluster d'API pour lequel vous souhaitez définir des autorisations Terraform.
Installer et configurer le fournisseur Terraform
Vous devez installer le fournisseur Kubernetes pour provisionner et gérer les ressources Kubernetes.
Dans un fichier Terraform de votre module, tel que le fichier
main.tf, insérez le blocrequired_providerssuivant :terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }Initialisez votre répertoire de travail Terraform pour installer le fournisseur :
terraform init