Score:0

Updating Azure kubernetes version via Terraform - no SSH public key

ls flag

I'm trying to use Terraform to update the kubernetes version for an Azure Kubernetes Service (AKS) cluster. The Terraform configuration for the cluster looks like this:

resource "azurerm_kubernetes_cluster" "dev-k8s" {
  name                = "my-cluster"
  ... etc

  kubernetes_version = "1.22.1"

  linux_profile {
    admin_username = var.admin_username

    ssh_key {
      key_data = file(var.k8s_public_key)
    }
  }

When I try running terraform plan from my local linux terminal (when logged into Azure via the Azure CLI) the variable var.k8s_public_key resolves to ~/.ssh/my-k8s.pub, and I get the following error message :

Error: Invalid function argument


  on k8s.tf line 22, in resource "azurerm_kubernetes_cluster" "dev-k8s":
  22:       key_data = file(var.k8s_public_key)
    |----------------
    | var.k8s_public_key is "~/.ssh/my-k8s.pub"

Invalid value for "path" parameter: no file exists at
/home/myuser/.ssh/my-k8s.pub; this function works only with files that
are distributed as part of the configuration source code, so if this file will
be created by a resource in this configuration you must instead obtain this
result from an attribute of that resource.

I have a private key, but no public key. If the public key is required, I need to create a new one. The error is confusing me though, as I thought that the public key needs to be on the server side, not on my client side. Also the guides I've looked at show how to generate a public/private key pair then create the cluster using those credentials. I'm unsure of how to update the cluster without the public key. If I generate a new public key, then how will that be linked to the cluster, and how does that work to allow me to access the cluster? Do I even need the public key if I'm only updating the cluster? I'm looking for any advice on what's going on or how to resolve this, as I don't clearly understand the issue.

If I remove the linux_profile section from the Terraform configuration, terraform plan succeeds, but it then wants to create an entirely new cluster with the same name. I'm not sure what's going on, or what I need to do to just update the kubernetes version.

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.