You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

私有Azure AKS集群无法访问:Terraform执行Helm命令报错求助

解决私有K8s集群(AKS)Terraform Helm访问问题

你的错误源于本地环境无法解析AKS私有集群的私有链接域名——私有集群的API端点仅在所属VNet内可解析和访问。无需修改集群私有属性,可通过以下方案解决:

方案1:在集群所属VNet内的虚拟机执行Terraform

这是最直接的方式,VNet内的机器可正常解析私有DNS并访问集群API:

  • 在AKS所在VNet中创建一台虚拟机(确保子网有权限访问集群API)
  • 在虚拟机上安装Terraform、Helm和Azure CLI
  • 登录Azure CLI并获取AKS的kubeconfig:az aks get-credentials --name <集群名> --resource-group <资源组名>
  • 将你的Terraform配置和values文件上传到虚拟机
  • 执行terraform init和terraform apply

方案2:通过VPN/专线打通本地与集群VNet

建立本地网络和AKS所属VNet的私有连接,让本地环境能访问VNet内资源:

  • 配置Azure VPN Gateway(或ExpressRoute专线),将本地网络与AKS VNet连接
  • 确保本地DNS设置将AKS私有域名的解析请求转发到VNet的DNS服务器(Azure私有DNS区域的DNS地址)
  • 本地获取AKS的kubeconfig:az aks get-credentials --name <集群名> --resource-group <资源组名>
  • 直接在本地执行Terraform命令即可

方案3:使用Azure Bastion端口转发访问集群

通过Bastion建立到AKS控制平面的隧道,实现本地间接访问:

  1. 获取AKS控制平面的资源ID:
az aks show --name <集群名> --resource-group <资源组名> --query id -o tsv
  1. 启动Bastion隧道,将本地端口8443转发到集群API的443端口:
az network bastion tunnel --name <Bastion名称> --resource-group <Bastion资源组名> --target-resource-id <AKS控制平面ID> --port 443 --local-port 8443
  1. 修改本地kubeconfig中的server字段为https://localhost:8443
  2. 执行Terraform命令,此时Helm Provider会通过隧道访问集群

方案4:配置Terraform远程执行环境

借助远程执行功能,让部署操作在VNet内的节点上完成:

  • 在VNet内创建一台虚拟机作为执行节点
  • 配置Terraform使用远程执行模式,或借助Azure DevOps等流水线,将执行环境部署在VNet内的代理节点上
  • 由代理节点直接访问集群并执行Terraform部署

补充:Helm Provider的正确配置

无论采用哪种方案,都需确保Terraform的Helm Provider能正确获取集群凭证。可直接引用Azure Provider的集群数据配置:

data "azurerm_kubernetes_cluster" "aks_cluster" {
  name                = "your-aks-cluster-name"
  resource_group_name = "your-resource-group-name"
}

provider "helm" {
  kubernetes {
    host                   = data.azurerm_kubernetes_cluster.aks_cluster.kube_config.0.host
    client_certificate     = base64decode(data.azurerm_kubernetes_cluster.aks_cluster.kube_config.0.client_certificate)
    client_key             = base64decode(data.azurerm_kubernetes_cluster.aks_cluster.kube_config.0.client_key)
    cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.aks_cluster.kube_config.0.cluster_ca_certificate)
  }
}

resource "helm_release" "ingress-nginx" {
  name             = "ingress-nginx"
  namespace        = "ingress-nginx"
  create_namespace = true
  repository       = "https://kubernetes.github.io/ingress-nginx"
  chart            = "ingress-nginx"

  values = [
    file("ingress-nginx-values.yaml")
  ]
}

内容的提问来源于stack exchange,提问作者The Engineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:15:32