在 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 view
或kubectl 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 群集时出现错误“没有这样的主机”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Terraform 将 log-to-eventhub 策略添加到 Azure API 管理策略
使用 Terraform 将自定义 DNS 服务器 IP 添加到 Azure VM NIC
azure terraform 将 azure 文件共享附加到 Windows 机器