Formation > Blog > Terraform > Utiliser GKE avec Terraform

Terraform est un outil phare de l’Infrastructure as Code (IaC). Il n’a pas fallu beaucoup de temps pour que les pros du DevOps l’adoptent comme solution incontournable pour interagir avec le Google Kubernetes Engine (GKE). L’action des deux outils permet de déployer et gérer des clusters Kubernetes de façon efficace et surtout sécurisée, ce qui est crucial dans les applications conteneurisées.

Avant de se lancer

L’équipe Ambient IT

Prérequis

Avant de commencer d’utiliser Terraform et GKE, il faut savoir en profondeur comment fonctionne Kubernetes ainsi que Google Cloud Platform qui sont les outils les plus utilisés lors de l’utilisation de GKE.

Bien évidemment, vous devez aussi avoir Terraform installé ou Google Cloud Shell qui dispose nativement de l’outil.

Comment installer Terraform pour GCP ?

Pour utiliser Terraform avec GCP vous devez télécharger la configuration du SDK Google Cloud (gcloud). Vous pouvez suivre la documentation officielle, ou bien le faire en homebrew comme ceci :

brew install --cask google-cloud-sdk

Une fois installé, configurez-le comme ceci :

gcloud init

Ensuite, il faut autoriser SDK à accéder à GCP en utilisant les informations d’identification de votre compte utilisateur et ajoutera le SDK à votre PATH :

gcloud auth application-default login

Avant de réaliser cette action, vous devez d’abord vous connecter et que vous sélectionniez le projet dans lequel vous souhaitez travailler.

Configuration de Terraform pour GKE

Comment définir un cluster GKE avec Terraform ?

Afin de définir un cluster GKE pour votre application Terraform, vous devez spécifier la configuration que vous voulez dans un fichier .tf.

La ressource google_container_cluster vous permet de choisir entre un cluster standard ou Autopilot, la région, la version de Kubernetes et même des stratégies de mise à jour.

Cette commande génère une Kubeconfig qui utilise gcloud comme mécanisme d’authentification :

gcloud container clusters get-credentials cluster-name

Quelles configurations pour un cluster GKE ?

Les configurations pour votre cluster GKE incluent de nombreux aspects :

  • Le réseau VPC
  • La configuration des sous-réseaux
  • L’activation de l’IPv6
  • Des spécifications autour de la sécurité et de l’accès au cluster

Comment structurer un projet Terraform pour GKE ?

Une bonne structuration de votre projet Terraform sera essentielle pour l’utiliser au mieux avec GKE.

Votre projet devrait comporter des fichiers dédiés pour :

  • Les réseaux (VPC)
  • Les clusters
  • Les node pools
  • Les règles IAM

Je vous conseille aussi fortement d’utiliser des modules Terraform pour encapsuler des composants répétitifs.

Gestion des versions de Kubernetes avec Terraform

Grâce à Terraform, la gestion des versions dans Kubernetes est beaucoup plus facile !

Les arguments in_master_version et version pour les node pools vous permettront de réaliser ces tâches beaucoup plus facilement.

Je vous conseille tout de même d’utiliser des canaux de release pour bénéficier de mises à jour stables et automatisées.

Utiliser les fournisseurs Kubernetes et helm

Lorsque vous vous servez des fournisseurs kubernetes et helm, des informations de connexion statiques peuvent vous permettre de vous connecter sur des clusters définis, que ce soit dans la même configuration ou dans un état distant.

data "google_client_config" "provider" {}

data "google_container_cluster" "my_cluster" {
  name     = "my-cluster"
  location = "us-central1"
}

provider "kubernetes" {
  host  = "https://${data.google_container_cluster.my_cluster.endpoint}"
  token = data.google_client_config.provider.access_token
  cluster_ca_certificate = base64decode(
    data.google_container_cluster.my_cluster.master_auth[0].cluster_ca_certificate,
  )
}

Cette commande permet d’enregistrer un jeton d’accès dans google_client_cofig. Ce jeton est stocké dans le state mais sa durée de vie est très courte.

Heureusement pour nous, le fournisseur kubernetes peut accepter des informations d’identification valides à partir d’un plugin exec-based pour récupérer un nouveau jeton avant chaque opération Terraform, comme ceci :

data "google_client_config" "provider" {}

data "google_container_cluster" "my_cluster" {
  name     = "my-cluster"
  location = "us-central1"
}

provider "kubernetes" {
  host  = "https://${data.google_container_cluster.my_cluster.endpoint}"
  token = data.google_client_config.provider.access_token
  cluster_ca_certificate = base64decode(
    data.google_container_cluster.my_cluster.master_auth[0].cluster_ca_certificate,
  )
  exec {
    api_version = "client.authentication.k8s.io/v1beta1"
    command     = "gke-gcloud-auth-plugin"
  }
}

Notez bien que vous devez impérativement avoir le plugin gke-cloud-auth pour kubectl installé sinon cela ne marche pas !

Autogestion et Autoscaling

L’auto-scaling et l’autogestion sont de gros avantages de Terraform.

Pour les configurer, il faut définir un google_container_node_pool avec la section autoscaling activée. Il faut aussi spécifier le nombre minimum et maximum de nœuds.

Bonnes pratiques d’Autoscaling pour GKE

Même si l’autoscaling est bien pratique, il faut surveiller les performances et les coûts ainsi que de bien tester régulièrement l’élasticité de votre infrastructure.

IAM et Sécurité

Intégration d’IAM avec Terraform pour GKE

L’intégration d’IAM avec Terraform et GKE est très importante pour la sécurité de vos clusters.

Utilisez des ressources comme google_project_iam_binding et google_service_account pour gérer finement les permissions et les comptes de services que vous avez associés aux clusters et aux nœuds.

Comment implémenter des politiques de sécurité avec Terraform ?

Je vous conseille très fortement d’implémenter des politiques de sécurité maison dans Terraform. Vous pouvez utiliser les commandes suivantes pour le faire :

google_container_cluster
private_cluster_config
master_authorized_networks_config

Réutilisation avec Modules

C’est l’un des gros avantages de Terraform pour GKE : la réutilisation de modules. Vous pouvez standardiser le déploiement de clusters, et donc grandement le faciliter.

Vous pouvez encapsuler des logiques communes dans tous vos modules réutilisables et vous n’avez qu’à les invoquer avec des paramètres spécifiques dans vos déploiements.

Ressources et Documentation

Si vous souhaitez approfondir vos connaissances sur Terraform et GKE, de nombreuses ressources sont à votre disposition :

  • La Documentation officielle Terraform
  • La Documentation GKE Terraform Provider
  • Les Tutoriels HashiCorp
  • De nombreux tuto sont disponibles sur youtube
  • N’hésitez pas à vous rendre sur des forums comme Reddit pour y poser vos questions

Conclusion

Gérer un cluster GKE avec Terraform est un exercice qui vous demandera une bonne rigueur et surtout une maitrise des deux outils mais j’espère que cet article vous aura été utile.

C’est une méthode extrêmement pratique pour optimiser la gestion de votre infrastructure Kubernetes sur GCP en vous assurant la conformité, la sécurité et la maitrise de vos coûts.

UNE QUESTION ? UN PROJET ? UN AUDIT DE CODE / D'INFRASTRUCTURE ?

Pour vos besoins d’expertise que vous ne trouvez nulle part ailleurs, n’hésitez pas à nous contacter.

ILS SE SONT FORMÉS CHEZ NOUS

partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp
partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp