【问题标题】:Terraform Azure AKS Cluster not exporting kubeconfig fileTerraform Azure AKS 集群未导出 kubeconfig 文件
【发布时间】:2021-12-08 08:20:09
【问题描述】:

我正在尝试使用 Terraform 在 Azure (AKS) 上配置一个 kubernetes 集群。配置工作得很好,但我无法将 kubeconfig 从kube_config_raw 导出到文件中。

下面是我的main.tfoutputs.tf。我压制了resource_groupuser_assigned_identity 资源。

这是我用于创建配置的资源:@​​987654321@

  • main.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">=2.79.1"
    }
  }
}

provider "azurerm" {
  features {}
  subscription_id = "..."
}

resource "azurerm_kubernetes_cluster" "aks" {
  name                = "myCluster"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  dns_prefix          = "my-cluster-dns"

  default_node_pool {
    name            = "agentpool"
    node_count      = 1
    os_disk_size_gb = 64
    vm_size         = "Standard_B2ms"
  }

  identity {
    type                      = "UserAssigned"
    user_assigned_identity_id = azurerm_user_assigned_identity.user_assigned_identity.id
  }

  depends_on = [
    azurerm_user_assigned_identity.user_assigned_identity
  ]
}
  • outputs.tf - 我已经在文件名中尝试了“./kubeconfig”和“kubeconfig”,但没有任何内容导出到任何地方
resource "local_file" "kubeconfig" {
  depends_on   = [azurerm_kubernetes_cluster.aks]
  filename     = "./kubeconfig"
  content      = azurerm_kubernetes_cluster.aks.kube_config_raw
}

奖励:是否可以将其直接导出到现有的~/.kube/config 文件中?就像az aks get-credentials 命令一样?

【问题讨论】:

  • 你好@everspader,我运行了与你相同的代码,并且保存了kubeconfig文件。所以如果我从PS C:\Users\user\terraform\aksconfig> 运行,给出文件名./kubeconfig。它保存在同一文件夹中,即C:\Users\user\terraform\aksconfig\kubeconfig。你能再检查一次并告诉我吗?
  • 您好@everspader,如果回答对您有帮助,请Accept it as an Answer,以便遇到相同问题的其他人可以找到此解决方案并解决他们的问题。

标签: azure terraform azure-aks terraform-provider-azure


【解决方案1】:

outputs.tf - 我在 文件名,但没有任何内容导出到任何地方

我测试了与您相同的代码并执行了 terraform-apply ,它将本地文件保存到执行应用的位置。

例如:

如果我从C:\Users\user\terraform\aksconfig> 运行main.tf 文件作为它的存在,那么kubeconfig 文件将保存在同一路径中。

输出:


奖励:是否可以将其直接导出到现有的 ~/.kube/config 文件中?就像 az aks get-credentials 命令一样?

az aks get-credentials --resource-group myresourcegroup --name myCluster 存储配置文件的路径:

将脚本保存在与 az 命令相同的路径中的代码:

resource "local_file" "kubeconfig" {
  depends_on   = [azurerm_kubernetes_cluster.aks]
  filename     = "C:/Users/user/.kube/config" this is where the config file gets stored
  content      = azurerm_kubernetes_cluster.aks.kube_config_raw
}

输出:

/.kube/config中的现有配置文件

新文件覆盖现有文件:

注意:在这里使用local_file 块将完全覆盖文件,而不是将上下文附加到前一个文件。如果您正在寻找像 az 命令那样将内容合并到一个文件中,那么它不可能从 terraform 中实现。

【讨论】:

  • 嗨@AnsumanBal-MT,感谢您的回答和尝试。我已经重新创建集群超过 5 次,并且 kubeconfig 文件永远不会被保存。我会尝试将路径更改为它保存的位置,如果它有任何帮助,我会告诉你。
  • 嘿@AnsumanBal-MT。我现在正在尝试两种不同的路径:filename = "~/<path>/aks/kubeconfig"filename = "~/.kube/config",但还没有成功。该文件只是没有保存。集群已创建,我可以在.tfstate 中看到kube_config_raw
  • @everspader,我可以知道您使用的是什么操作系统以及 terraform 版本吗?
  • 确定:Ubuntu 20.04 和 Terraform v1.0.9 on linux_amd64
  • 你好@everspader,我在 ubuntu 20.04 机器上使用 terraform 版本 1.0.9 对其进行了测试。并且也成功保存了文件,你可以参考这个image
猜你喜欢
  • 1970-01-01
  • 2020-12-24
  • 2021-01-27
  • 2021-03-20
  • 2021-08-29
  • 2019-01-10
  • 2019-08-29
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多