IngressClassParamsでALBの削除保護をすれば、Ingressの削除に手間取らない
IngressClassParamsで削除保護
spec.loadBalancerAttributes
に以下のように書ける
spec:
loadBalancerAttributes:
- key: deletion_protection.enabled
value: 'true'
IngressClassからIngressClassParamsを参照
IngressからIngressClassを参照
して、IngressとIngressClassParamsを結びつける
Ingressのmetadata.annotations
に書く場合
alb.ingress.kubernetes.io/load-balancer-attributes: deletion_protection.enabled=true
Ingress削除の流れ
Ingressをdeleteすると、metadata.deletionTimestamp
がつく
finalizerを持っているため、すぐには削除されず
いったんIngressの更新があったということで、Reconcileが開始する
group_controllerのreconcile
内でLoad
されるとき
IngressGroupの各Ingressに対してcheckGroupMembershipType
される
metadata.deletionTimestamp
が存在するため、GroupIDはnil
と判定される
するとinactiveなメンバーだとされる
inactiveなメンバーは、グループ名の入ったfinalizerを外される
→finalizerがなく、deletion timestampが存在するため、Ingressオブジェクトは削除される
IngressClassParamsとannotationsの違い
IngressClassParamsでALBの削除保護をした場合、「Ingress削除の流れ」を阻止する要素はないため、Ingressは削除できる
annotationsに書いた場合
RemoveGroupFinalizer
に入る前のbuildAndDeployModel
の段階で
エラーが返る
するとreconcile
関数をそのまま抜けるため、finalizerは削除されず、Ingressも削除されないままになる
(自分でfinalizerを削除すると消える)
Discussion