Open4

ExternalDNS x AWS

mikutasmikutas

処理対象Ingressの区別

https://github.com/kubernetes-sigs/external-dns/issues/1910

区別するのに使える引数が複数ある

--annotation-filter
--label-filter
--ingress-class

--annotation-filter--ingress-class併用できない
他の2つの組み合わせが許されるのか許されないのかはわかってない。

--annotation-filterを使うことにして、基本的にすべてのIngressを処理対象として
例外にのみ external-dns.alpha.kubernetes.io/exclude: "true"アノテーションを付けることにする。

Helm valueは以下のようにする。

extraArgs:
  - --annotation-filter=external-dns.alpha.kubernetes.io/exclude notin (true)
mikutasmikutas

複数IngressGroup=複数ALBのrules.hostに同じ値が登場して、片方のRoute53レコードを作成済みのとき

共用していたALBから分離させる過程でこのような状況のときにちょうどExternalDNSを導入した。
処理対象外とさせるアノテーションはどのIngressにもまだ付けていなかった。
だが、ExternalDNSはAll records are already up to dateと言ってなにもしなかった。

https://github.com/kubernetes-sigs/external-dns/blob/758aa29f0cc1d592a88c3362834fe8a6fbd37c3d/controller/controller.go#L265

ログ出どころ

https://github.com/kubernetes-sigs/external-dns/blob/758aa29f0cc1d592a88c3362834fe8a6fbd37c3d/controller/controller.go#L212

作成済みのDNSレコードを収集する

https://github.com/kubernetes-sigs/external-dns/blob/758aa29f0cc1d592a88c3362834fe8a6fbd37c3d/source/ingress.go#L128-L130

// Endpointsは、処理する必要があるホストとターゲットの組み合わせごとにエンドポイント オブジェクトを返します。
// すべての名前空間のすべてのイングレス リソースを取得します

endpointsの収集を完了したとき、DNSNameは同じだがTargetsに別のALBが入ってるendpointがそれぞれ存在するはず

収集したrecordsとendpointsをplanに詰める

https://github.com/kubernetes-sigs/external-dns/blob/b2ff1619f5dfb50187fc75cb64733978d3a0d880/controller/controller.go#L244-L252

plan.Calculateする

https://github.com/kubernetes-sigs/external-dns/blob/b2ff1619f5dfb50187fc75cb64733978d3a0d880/controller/controller.go#L254

HasChangesがfalseだとAll records are already up to dateになる

https://github.com/kubernetes-sigs/external-dns/blob/758aa29f0cc1d592a88c3362834fe8a6fbd37c3d/controller/controller.go#L256