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

如何通过Terraform创建私有AKS集群及内部命名空间并实现集群自动连接

配置步骤

你只需要新增Kubernetes Provider配置关联已有的AKS资源,再新增命名空间资源即可实现集群重建后自动创建命名空间,具体配置如下:

1. 先声明Kubernetes Provider依赖

在你的terraform块的required_providers中新增kubernetes provider声明:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.0.0"
    }
    # 新增以下配置
    kubernetes = {
      source  = "hashicorp/kubernetes"
      version = ">= 2.20.0"
    }
  }
}

2. 配置Kubernetes Provider连接AKS集群

直接从你已有的azurerm_kubernetes_cluster资源中提取连接凭证,Terraform会自动保证集群创建完成后再初始化该Provider:

单集群场景

provider "kubernetes" {
  host                   = azurerm_kubernetes_cluster.aks_cluster["你的集群key"].kube_config[0].host
  client_certificate     = base64decode(azurerm_kubernetes_cluster.aks_cluster["你的集群key"].kube_config[0].client_certificate)
  client_key             = base64decode(azurerm_kubernetes_cluster.aks_cluster["你的集群key"].kube_config[0].client_key)
  cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.aks_cluster["你的集群key"].kube_config[0].cluster_ca_certificate)
}

多集群批量场景

如果需要同时管理多个AKS集群,为每个集群配置带别名的Provider:

# 集群1的Provider
provider "kubernetes" {
  alias = "cluster1"
  host                   = azurerm_kubernetes_cluster.aks_cluster["cluster1"].kube_config[0].host
  client_certificate     = base64decode(azurerm_kubernetes_cluster.aks_cluster["cluster1"].kube_config[0].client_certificate)
  client_key             = base64decode(azurerm_kubernetes_cluster.aks_cluster["cluster1"].kube_config[0].client_key)
  cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.aks_cluster["cluster1"].kube_config[0].cluster_ca_certificate)
}

# 集群2的Provider
provider "kubernetes" {
  alias = "cluster2"
  host                   = azurerm_kubernetes_cluster.aks_cluster["cluster2"].kube_config[0].host
  client_certificate     = base64decode(azurerm_kubernetes_cluster.aks_cluster["cluster2"].kube_config[0].client_certificate)
  client_key             = base64decode(azurerm_kubernetes_cluster.aks_cluster["cluster2"].kube_config[0].client_key)
  cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.aks_cluster["cluster2"].kube_config[0].cluster_ca_certificate)
}

3. 新增命名空间资源

单集群场景

resource "kubernetes_namespace" "custom_ns" {
  metadata {
    name = "你要创建的命名空间名称"
    labels = {
      environment = var.env
    }
  }
}

多集群批量场景

为每个集群创建对应命名空间,指定对应别名的Provider即可:

# 集群1的命名空间
resource "kubernetes_namespace" "cluster1_ns" {
  provider = kubernetes.cluster1
  metadata {
    name = "app-namespace"
    labels = {
      environment = var.env
      cluster = "cluster1"
    }
  }
}

# 集群2的命名空间
resource "kubernetes_namespace" "cluster2_ns" {
  provider = kubernetes.cluster2
  metadata {
    name = "app-namespace"
    labels = {
      environment = var.env
      cluster = "cluster2"
    }
  }
}

注意事项

  • 运行Terraform的执行环境必须和私有AKS集群的VNet网络连通:私有AKS的API服务器IP为私有地址,即使开启了公有FQDN,解析出来的也是私有IP,网络不通会导致连接集群失败。
  • 如果你为AKS开启了Azure AD认证,需要调整Kubernetes Provider的配置,改用Azure AD相关的认证参数,无需使用证书认证。
  • Terraform会自动处理资源依赖,保证AKS集群完全创建完成后再执行命名空间的创建操作,无需手动添加依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:06:03