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

如何通过Terraform将Basic SKU负载均衡器与AKS集群集成?

问题背景

使用默认配置通过azurerm_kubernetes_cluster创建最小化AKS集群时,会自动生成load_balancer_sku = standard的负载均衡器及load_balancer_profile块,对应的负载均衡器和公网IP可在Azure门户资源列表中查看。

但当设置load_balancer_sku = basic时,Terraform状态中无相关资源记录(仅标签),也未生成load_balancer_profile块,Azure门户中也未创建任何对应资源。未找到关于如何正确创建与Basic SKU azurerm_lb、Basic SKU azurerm_public_ip配合的AKS集群的完整资料,若有相关权威资源也请提供。

尝试的配置

拼凑现有资料编写了以下Terraform代码:

# azurerm_kubernetes_cluster
resource "azurerm_kubernetes_cluster" "k8s" {
  location            = azurerm_resource_group.rg.location
  name                = var.name
  resource_group_name = azurerm_resource_group.rg.name
  node_resource_group = "${local.node_resource_group_name}"
  dns_prefix          = "${local.dns_prefix}"

  identity {
    type = "SystemAssigned"
  }

  default_node_pool {
    name       = "agentpool"
    vm_size    = "Standard_B2s"
    node_count = 1
  }

  network_profile {
    network_plugin = "kubenet"
    load_balancer_sku = "basic"
  }
}

# azurerm_public_ip
resource "azurerm_public_ip" "k8s_lb_ip" {
  name                = "PublicIPForLB"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_kubernetes_cluster.k8s.node_resource_group # 疑问:这真的必须吗?我不希望IP在节点资源组中,因为节点池更新时它会被销毁!
  allocation_method   = "Static"
}

# azurerm_lb
resource "azurerm_lb" "k8s_lb" {
  name                = "BasicLoadBalancer"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name

  frontend_ip_configuration {
    name                 = "PublicIPAddress"
    public_ip_address_id = azurerm_public_ip.k8s_lb_ip.id
  }
}

# azurerm_role_assignment
resource "azurerm_role_assignment" "lb_ip_aks_integration" {
  description = "允许Basic SKU负载均衡器和公网IP与`load_balancer_sku = basic`的AKS集群集成"
  principal_id                     = azurerm_kubernetes_cluster.k8s.kubelet_identity[0].object_id
  role_definition_name             = "Network Contributor"
  scope                            = azurerm_public_ip.k8s_lb_ip.id
  skip_service_principal_aad_check = true
}

其中角色分配部分参考了官方文档,但文档暗示azurerm_public_ip.resource_group_name需设置为集群的节点资源组,这并不理想,我希望公网IP位于自定义资源组中,避免随自动管理的节点资源组被销毁。

问题现象

即使配置了上述资源,部署如下Nginx Ingress Controller时:

resource "helm_release" "nginx_ingress" {
  name = "nginx-ingress-controller"

  repository = "https://charts.bitnami.com/bitnami"
  chart      = "nginx-ingress-controller"

  set {
    name  = "controller.service.externalTrafficPolicy"
    value = "Local"
  }
  set {
      name        = "controller.service.loadBalancerIP"
      value = var.public_ip # azurerm_public_ip.ip_address
   }
}

系统仍自动创建了与手动配置无关的独立公网IP和负载均衡器,未使用预先部署的资源。

求助问题

请问我遗漏了哪些关键配置?如何让手动部署的Basic SKU负载均衡器、公网IP与AKS集群正确协同工作?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:17:42