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
Vous souhaitez gérer efficacement vos infrastructures et garantir la cohérence de vos environnements applicatifs ? Notre formation Terraform en inter et intraentreprise vous apprendra à utiliser Terraform conjointement avec des fournisseurs cloud comme AWS ou Azure afin d’intégrer l’outil a n’importe quelle configuration.
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.