I have been trying to install Helm charts using Terraform in a cluster which operates in GKE.
My question is in two parts:
- Is it a good practice to use Terraform for installing Helm charts?
- I have been getting this error when Terraform tries to install a Helm chart:
helm_release.release_name: Get https://XX.XXX.XX.X/apis/extensions/v1beta1/namespaces/kube-system/deployments/tiller-deploy: dial tcp XX.XXX.XX.X:443: connect: connection refused
Here is how I am configuring the Helm chart:
provider "kubernetes" {
host = "${var.cluster-host}"
username = "${var.cluster-username}"
password = "${var.cluster-password}"
client_certificate = "${base64decode(var.cluster-client-cert)}"
client_key = "${base64decode(var.cluster-client-key)}"
cluster_ca_certificate = "${base64decode(var.cluster-ca-certificate)}"
}
resource "kubernetes_service_account" "tiller" {
metadata {
name = "tiller"
namespace = "kube-system"
}
}
resource "kubernetes_cluster_role_binding" "tiller" {
metadata {
name = "tiller"
}
role_ref {
api_group = "rbac.authorization.k8s.io"
kind = "ClusterRole"
name = "cluster-admin"
}
# api_group has to be empty because of a bug:
# https://github.com/terraform-providers/terraform-provider-kubernetes/issues/204
subject {
api_group = ""
kind = "ServiceAccount"
name = "tiller"
namespace = "kube-system"
}
}
provider "helm" {
install_tiller = true
service_account = "tiller"
namespace = "kube-system"
kubernetes {
host = "${var.cluster-host}"
username = "${var.cluster-username}"
password = "${var.cluster-password}"
client_certificate = "${base64decode(var.cluster-client-cert)}"
client_key = "${base64decode(var.cluster-client-key)}"
cluster_ca_certificate = "${base64decode(var.cluster-ca-certificate)}"
}
}