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

如何通过Terraform正确禁用AKS的kube_audit与kube_audit_admin日志设置

解决Terraform中AKS诊断设置kube_audit和kube_audit_admin日志重复配置问题

问题根源

你遇到的重复配置问题,是因为同一个日志类别被定义了两次:
原代码中local.diag_agw_logs列表包含了kube-audit和kube-audit-admin,通过dynamic "log"块生成了这两个日志的启用配置(Terraform默认未指定enabled时会设为true);之后你手动添加的单独log块又给这两个日志设置了enabled = false,最终导致Azure资源中同时存在两种状态的配置。

正确解决方案

以下两种方法均可彻底解决问题,按需选择:

方法1:从动态列表中排除目标日志

直接修改local.diag_agw_logs变量,移除kube-audit和kube-audit-admin,让动态块不再生成它们的启用配置:

# 调整local变量,移除需要禁用的日志类别
locals {
  diag_agw_logs = [
    "cluster-autoscaler",
    "kube-controller-manager",
    "kube-scheduler",
    # 保留其他需要启用的日志,删除kube-audit和kube-audit-admin
  ]
}

resource "azurerm_monitor_diagnostic_setting" "aks" {
  name                       = var.diag_name
  target_resource_id         = azurerm_kubernetes_cluster.aks.id
  log_analytics_workspace_id = azurerm_log_analytics_workspace.log_workspace.id

  dynamic "log" {
    for_each = local.diag_agw_logs
    content {
      category = log.value

      retention_policy {
        days    = var.cluster_log_metrics_retention_in_days
        enabled = var.cluster_monitor_event_retention
      }
    }
  }

  dynamic "metric" {
    for_each = local.diag_agw_metrics
    content {
      category = metric.value

      retention_policy {
        days    = var.cluster_log_metrics_retention_in_days
        enabled = var.cluster_monitor_event_retention
      }
    }
  }
}

方法2:在动态块中控制启用状态

如果不想修改原有的local.diag_agw_logs列表,可以在动态块内通过判断逻辑,为目标日志设置enabled = false:

resource "azurerm_monitor_diagnostic_setting" "aks" {
  name                       = var.diag_name
  target_resource_id         = azurerm_kubernetes_cluster.aks.id
  log_analytics_workspace_id = azurerm_log_analytics_workspace.log_workspace.id

  dynamic "log" {
    for_each = local.diag_agw_logs
    content {
      category = log.value
      # 对指定日志类别禁用,其余保持启用
      enabled = !contains(["kube-audit", "kube-audit-admin"], log.value)

      retention_policy {
        days    = var.cluster_log_metrics_retention_in_days
        enabled = var.cluster_monitor_event_retention
      }
    }
  }

  dynamic "metric" {
    for_each = local.diag_agw_metrics
    content {
      category = metric.value

      retention_policy {
        days    = var.cluster_log_metrics_retention_in_days
        enabled = var.cluster_monitor_event_retention
      }
    }
  }
}

关键注意事项

  • 禁止同时用dynamic块和单独log块定义同一个日志类别,这会触发Terraform生成重复配置,导致Azure资源状态异常。
  • Terraform中log块的enabled参数默认值为true,如果要禁用日志,必须显式设置enabled = false,或者直接不生成该日志的配置块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:15:33