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

使用Terraform销毁EKS集群时无法删除ALB Ingress的问题

解决Terraform销毁EKS集群时无法删除ALB Ingress的问题

问题背景

使用AWS Provider 5.17.0 + terraform-aws-modules/eks/aws 19.16.0部署EKS集群、Ingress及相关资源,执行terraform destroy时,ALB Ingress资源长时间卡在销毁状态,最终报错Ingress (test/test-alb-ingress) still exists,需手动删除Ingress才能继续销毁流程。

临时应急方案

  • 移除Ingress Finalizer:执行kubectl命令移除Ingress的Finalizer,让K8s允许删除资源:
    kubectl patch ingress -n test test-alb-ingress -p '{"metadata":{"finalizers":[]}}' --type=merge
    
    之后重新运行terraform destroy。
  • 直接删除Ingress:手动删除Ingress资源后继续销毁:
    kubectl delete ingress -n test test-alb-ingress
    

长期修复方案

1. 调整资源销毁顺序

确保Ingress资源在Ingress Controller之前完成销毁。在Ingress Controller的Terraform资源块中添加依赖:

# 示例:假设Ingress Controller是模块内的资源
module "ingress_controller" {
  # 其他配置...
  depends_on = [module.eks.module.ingress.kubernetes_ingress_v1.test_ingress]
}

这样Terraform会先销毁Ingress,再处理Ingress Controller,避免因Controller提前销毁导致Ingress无法清理。

2. 配置Ingress生命周期规则

在Ingress的Terraform定义中,添加超时设置或忽略Finalizer变更,避免销毁时卡住:

resource "kubernetes_ingress_v1" "test_ingress" {
  metadata {
    name      = "test-alb-ingress"
    namespace = "test"
    # 其他元数据配置...
  }
  # 其他Ingress配置...

  lifecycle {
    ignore_changes = [metadata.finalizers]
  }

  timeouts {
    delete = "5m" # 缩短删除超时时间,避免长时间等待
  }
}

3. 升级模块与Provider

旧版本的eks模块(v19.16.0)和AWS Provider(5.17.0)可能存在销毁逻辑的兼容性bug。建议:

  • 将terraform-aws-modules/eks/aws升级到v20.x及以上版本
  • 同步升级AWS Provider到与eks模块兼容的最新版本(可参考模块文档的版本兼容说明)

4. 用null_resource强制清理Ingress

添加null_resource,在销毁阶段自动执行kubectl命令删除Ingress,提前清理资源:

resource "null_resource" "ingress_cleanup" {
  triggers = {
    ingress_name = kubernetes_ingress_v1.test_ingress.metadata[0].name
    namespace    = kubernetes_ingress_v1.test_ingress.metadata[0].namespace
  }

  provisioner "local-exec" {
    when        = destroy
    command     = "kubectl delete ingress -n ${self.triggers.namespace} ${self.triggers.ingress_name} --wait=false || true"
    interpreter = ["bash", "-c"]
  }

  depends_on = [kubernetes_ingress_v1.test_ingress]
}

可能的根因

  • Ingress的Finalizer(如alb.ingress.kubernetes.io/resource-cleanup)未被Ingress Controller正常处理,导致Ingress长期处于Terminating状态
  • Terraform的Kubernetes Provider与AWS Provider销毁顺序不匹配:AWS Provider提前删除了ALB资源,导致Ingress Controller无法完成Ingress的清理流程
  • 旧版本eks模块或AWS Provider存在资源销毁依赖的逻辑bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:10:04