在 Azure 上将卷添加到 Terraform AKS 群集时出现错误“没有这样的主机”

Posted

技术标签:

【中文标题】在 Azure 上将卷添加到 Terraform AKS 群集时出现错误“没有这样的主机”【英文标题】:Error 'no such host' when adding a volume to Terraform AKS cluster on Azure 【发布时间】:2021-03-09 21:19:53 【问题描述】:

我正在使用以下 Terraform 文件来创建 AKS 集群:

resource "random_pet" "prefix" 

resource "kubernetes_persistent_volume" "example" 
  metadata 
    name = "example"
  
  spec 
    capacity = 
      storage = "1Gi"
    
    access_modes = ["ReadWriteOnce"]
    persistent_volume_source 
      azure_disk 
        caching_mode  = "None"
        data_disk_uri = azurerm_managed_disk.example.id
        disk_name     = "example"
        kind          = "Managed"
      
    
  


resource "azurerm_kubernetes_cluster" "example" 
  name                = "$random_pet.prefix.id-aks"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  dns_prefix          = "$random_pet.prefix.id-k8s"

  default_node_pool 
    name            = "example"
    node_count      = 2
    vm_size         = "Standard_D2_v2"
    os_disk_size_gb = 30
  

  identity 
    type = "SystemAssigned"
  

  role_based_access_control 
    enabled = true
  

  addon_profile 
    kube_dashboard 
      enabled = true
    
  

  tags = 
    environment = "Demo"
  


provider "azurerm" 
  version = ">=2.20.0"
  features 


resource "azurerm_resource_group" "example" 
  name     = "$random_pet.prefix.id-rg"
  location = "westus2"



resource "azurerm_managed_disk" "example" 
  name                 = "example"
  location             = azurerm_resource_group.example.location
  resource_group_name  = azurerm_resource_group.example.name
  storage_account_type = "Standard_LRS"
  create_option        = "Empty"
  disk_size_gb         = "1"
  tags = 
    environment = azurerm_resource_group.example.name
  

我从 Terraform 的关于设置 AKS 集群的教程中导出了上述文件:https://learn.hashicorp.com/tutorials/terraform/aks

我在这里使用了 Terraform 设置 Azure 托管磁盘和 k8s 卷的示例:https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume

当我尝试使用 Terraform 运行上述配置时,出现以下错误:

Error: Post "https://pumped-llama-k8s-419df981.hcp.westus2.azmk8s.io:443/api/v1/persistentvolumes": dial tcp: lookup pumped-llama-k8s-419df981.hcp.westus2.azmk8s.io on 192.168.1.1:53: no such host

  on main.tf line 3, in resource "kubernetes_persistent_volume" "example":
   3: resource "kubernetes_persistent_volume" "example" 

每当我尝试使用任何非azurerm Terraform 资源时,都会遇到同样的错误。例如。尝试配置角色和角色绑定时:resource "kubernetes_role"

我假设错误消息的 url - 尝试连接到 HashiCorp 云平台,我认为这是默认设置 - 我需要明确告诉这些非azurerm 资源我正在连接到 Azure 托管的 Kubernetes ;但是我不知道该怎么做。

【问题讨论】:

似乎无法从您的本地机器连接到AKS,命令kubectl config viewkubectl get nodes的输出如何? 听起来更像是 DNS 名称解析问题。nslookup 工作正常吗? 我不认为与 AKS 的连接有问题,因为剩余的 Terraform 资源已创建;我可以访问 Azure 上的 AKS 集群,它就在那里并且正常工作。只是任何特定于 kubernetes 的 Terraform 资源(例如“kubernetes_persistent_volume”或“kubernetes_role”)似乎都失败了。但看起来它失败了,因为 Terraform 正在尝试连接到不存在的 HashiCorp Cloud 服务器而不是我的 AKS 实例。跨度> 【参考方案1】:

原来我需要在 Terraform 文件中定义 kubernetes 提供程序 - 很惊讶我不会因为不包含它而收到某种警告,因为我正在与它的资源进行交互。

这是我修复它的方法:

输出.tf:

output "host" 
  value = azurerm_kubernetes_cluster.default.kube_config.0.host


output "client_key" 
  value = azurerm_kubernetes_cluster.default.kube_config.0.client_key


output "client_certificate" 
  value = azurerm_kubernetes_cluster.default.kube_config.0.client_certificate


output "kube_config" 
  value = azurerm_kubernetes_cluster.default.kube_config_raw


output "cluster_ca_certificate" 
  value = azurerm_kubernetes_cluster.default.kube_config.0.cluster_ca_certificate


main.tf:

...
provider "kubernetes" 
  version = "=1.13.2"
  load_config_file = "false"

  host = azurerm_kubernetes_cluster.default.kube_config.0.host
  
  client_certificate     = "$base64decode(azurerm_kubernetes_cluster.default.kube_config.0.client_certificate)"
  client_key             = "$base64decode(azurerm_kubernetes_cluster.default.kube_config.0.client_key)"
  cluster_ca_certificate = "$base64decode(azurerm_kubernetes_cluster.default.kube_config.0.cluster_ca_certificate)"

...

【讨论】:

以上是关于在 Azure 上将卷添加到 Terraform AKS 群集时出现错误“没有这样的主机”的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure API 管理服务上将多个产品添加到订阅

如何使用 Terraform 将 log-to-eventhub 策略添加到 Azure API 管理策略

使用 Terraform 将自定义 DNS 服务器 IP 添加到 Azure VM NIC

azure terraform 将 azure 文件共享附加到 Windows 机器

使用 Terraform 创建 Azure IaaS 域控制器

如何在 Azure Pipeline 上使用 Terraform 将文件上传到 Azure 存储?