Kubernetes: Enable Istio on GKE using Terraform


I showed you how to create a GKE cluster with Terraform in a previous post. When I went to enable Istio, it wasn’t as simple as I thought. I ended up having to add an additional google-beta provider, along with having to add this google-beta provider within the google_container_cluster resource.

Update gkecluster/provider.tf

You can check for the latest provider version HERE.

cat provider.tf
provider "google" {
credentials = "${file("../credentials/account.json")}"
project = "YOUR_PROJECT_ID"
region = "us-west1"
}

provider "google-beta" {
version = "2.11.0"
credentials = "${file("../credentials/account.json")}"
project = "YOUR_PROJECT_ID"
region = "us-west1"
}

Initialize.

terraform init

Update gkecluster/gkecluster.tf

cat gkecluster.tf
resource "google_container_cluster" "gke-itsmetommy-cluster" {
provider = "google-beta"
name = "itsmetommy"
network = "itsmetommy"
subnetwork = "itsmetommy-default"
location = "us-west1-a"
# We can't create a cluster with no node pool defined, but we want to only use
# separately managed node pools. So we create the smallest possible default
# node pool and immediately delete it.
remove_default_node_pool = true
initial_node_count = 1

network_policy {
enabled = true
}

maintenance_policy {
daily_maintenance_window {
start_time = "03:00"
}
}

addons_config {
istio_config {
disabled = false
auth = "AUTH_NONE"
}
}

}

Plan and apply.

terraform plan -out terraform.tfplan
terraform apply "terraform.tfplan"