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

删除AWS EKS Ingress资源时如何保留ALB仅删除监听器与目标组

EKS ALB 保留配置方案

AWS Load Balancer Controller(ALB Ingress控制器)默认会将自己自动创建的ALB生命周期与Ingress组绑定,当Ingress组下所有Ingress资源被删除时,会同步删除ALB实例。可以通过以下配置实现删除Ingress时仅清理监听器、目标组、转发规则,保留ALB实例,无需重复修改Hosted Zone路由配置。

核心实现逻辑

控制器仅会删除自身标记为持有的资源,只要让控制器判定目标ALB不属于自己全生命周期管理的资源,就不会在Ingress删除时回收ALB。

操作步骤

  • 如果你还没有固定要使用的ALB,先手动在AWS控制台/通过AWS CLI创建符合需求的ALB(配置对应VPC、子网、安全组、内外网属性),命名为EKS-ALB即可;如果已经有现存的正在使用的ALB,跳过这一步。
  • 给目标ALB添加以下标签,确保控制器能识别该ALB对应你的Ingress组:
    • 标签键:ingress.k8s.aws/resource,标签值:LoadBalancer
    • 标签键:ingress.k8s.aws/stack,标签值:与Ingress注解中alb.ingress.kubernetes.io/group.name的值完全一致,你当前配置为test-alb,保持一致即可
    • 标签键:elbv2.k8s.aws/cluster,标签值:你的EKS集群实际名称,当前配置为EKS如果匹配实际集群名无需修改
  • 移除ALB上的ingress.k8s.aws/owned: "true"标签:这个标签是控制器标记自己创建、需要全生命周期管理的资源的标识,删掉之后控制器就不会再尝试删除该ALB。如果是你手动新建的ALB本来就没有这个标签,跳过这步。
  • 原有Ingress资源的注解不需要做额外修改,保持现有group.name: test-alb的配置即可,控制器部署时会自动识别到现存的匹配标签的ALB,在其上创建监听器、转发规则,绑定目标组。

配置效果

后续删除Ingress资源时,控制器只会清理自己生成的监听器、目标组、转发规则,不会删除保留的ALB实例。下次重新部署同组的Ingress资源时,控制器会自动复用这个留存的ALB重新创建关联资源,Hosted Zone上已经配置的指向该ALB的路由规则完全不需要调整。

注意事项

  • 不要通过给ALB开启原生删除保护的方式规避删除:这种方式会导致控制器删除资源时持续调用ALB删除接口报错,在控制器日志中持续刷错误事件,属于非正规方案。
  • 保留的ALB所在VPC、子网、安全组配置需要和EKS集群的Ingress流量规划一致,避免出现流量不通的问题。
  • 如果后续需要让控制器重新接管ALB的生命周期,给ALB加回ingress.k8s.aws/owned: "true"标签即可。

修正后可直接使用的资源清单

(移除了原Deployment配置中无效的顶层restartPolicy字段,其余配置保持原有逻辑不变)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-nginx-rule
  namespace: test
  annotations:
    alb.ingress.kubernetes.io/group.name: test-alb
    alb.ingress.kubernetes.io/scheme: internal
    alb.ingress.kubernetes.io/target-type: instance
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
    alb.ingress.kubernetes.io/ssl-redirect: '443'
    alb.ingress.kubernetes.io/healthcheck-port: traffic-port
    alb.ingress.kubernetes.io/healthcheck-path: /index.html
    alb.ingress.kubernetes.io/success-codes: 200-399
    alb.ingress.kubernetes.io/security-groups: eks-test-alb-sg
spec:
  ingressClassName: alb
  rules:
  - host: test.eks.abc.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: test-svc
            port:
              number: 5005
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-dep
  namespace: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        image: Imagepath
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5005
        resources:
          requests:
            memory: "256Mi"
            cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
  name: test-svc
  namespace: test
  labels:
    app: test
spec:
  type: NodePort
  ports:
  - port: 5005
    targetPort: 80
    protocol: TCP
  selector:
    app: test
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: test-scaler
  namespace: test
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: test-dep
  minReplicas: 1
  maxReplicas: 5
  targetCPUUtilizationPercentage: 60

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:51:32