如何通过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
相关产品推荐
相关产品推荐

