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