0

I am trying to create a kubernetes service account in a created namespace, which will have a secret and a cluster role binding, however, even though the terraform plan and apply stage shows that is is being created, it isn't, please see below module code and screenshots:

resource "kubernetes_service_account" "serviceaccount" {
  metadata {
    name      = var.name
    namespace = "kube-system"
  }
}

resource "kubernetes_cluster_role_binding" "serviceaccount" {
  metadata {
    name = var.name
  }

  subject {
    kind = "User"
    name = "system:serviceaccount:kube-system:${var.name}"
  }

  role_ref {
    kind      = "ClusterRole"
    name      = "cluster-admin"
    api_group = "rbac.authorization.k8s.io"
  }
}

data "kubernetes_service_account" "serviceaccount" {
  metadata {
    name = var.name
    namespace = "kube-system"
  }
  depends_on = [
    resource.kubernetes_service_account.serviceaccount
  ]
}

data "kubernetes_secret" "serviceaccount" {
  metadata {
    name = data.kubernetes_service_account.serviceaccount.default_secret_name
    namespace = "kube-system"
  }
  binary_data = {
    "token": ""
  }
  depends_on = [
    resource.kubernetes_service_account.serviceaccount
  ]
}

And the output from terraform run in devops:

# module.dd_service_account.data.kubernetes_secret.serviceaccount will be read during apply
  # (config refers to values not yet known)
 <= data "kubernetes_secret" "serviceaccount" {
      + binary_data = (sensitive value)
      + data        = (sensitive value)
      + id          = (known after apply)
      + immutable   = (known after apply)
      + type        = (known after apply)

      + metadata {
          + generation       = (known after apply)
          + name             = (known after apply)
          + namespace        = "kube-system"
          + resource_version = (known after apply)
          + uid              = (known after apply)
        }
    }

  # module.dd_service_account.data.kubernetes_service_account.serviceaccount will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "kubernetes_service_account" "serviceaccount" {
      + automount_service_account_token = (known after apply)
      + default_secret_name             = (known after apply)
      + id                              = (known after apply)
      + image_pull_secret               = (known after apply)
      + secret                          = (known after apply)

      + metadata {
          + generation       = (known after apply)
          + name             = "deployer-new"
          + namespace        = "kube-system"
          + resource_version = (known after apply)
          + uid              = (known after apply)
        }
    }

  # module.dd_service_account.kubernetes_cluster_role_binding.serviceaccount will be created
  + resource "kubernetes_cluster_role_binding" "serviceaccount" {
      + id = (known after apply)

      + metadata {
          + generation       = (known after apply)
          + name             = "deployer-new"
          + resource_version = (known after apply)
          + uid              = (known after apply)
        }

      + role_ref {
          + api_group = "rbac.authorization.k8s.io"
          + kind      = "ClusterRole"
          + name      = "cluster-admin"
        }
      + subject {
          + api_group = (known after apply)
          + kind      = "User"
          + name      = "system:serviceaccount:kube-system:deployer-new"
          + namespace = "default"
        }
    }
   # module.dd_service_account.kubernetes_service_account.serviceaccount will be created
  + resource "kubernetes_service_account" "serviceaccount" {
      + automount_service_account_token = true
      + default_secret_name             = (known after apply)
      + id                              = (known after apply)

      + metadata {
          + generation       = (known after apply)
          + name             = "deployer-new"
          + namespace        = "kube-system"
          + resource_version = (known after apply)
          + uid              = (known after apply)
        }
    }

When kubectl on the cluster, the namespace I created is there but no service accounts are there.

Any ideas?

Thanks.

terraform-ftw
  • 81
  • 1
  • 12

0 Answers0