External DNSを複数のクラスタから使う

投稿者: | 5月 22, 2022

諸事情で、病院からのお電話待機で雁字搦めでかれこれ2ヶ月。あんまし外出する気がないので、コンテナインフラをいじる日々。

そこで作ったのが、PVC用のストレージ、レジストリサーバ、Bind DNSを外だしにして、共有することにした。(自作OpenShiftとは言わないでほしい(爆))

で、1台のDNSで、複数のExternal-DNSで接続をするとDNSがちょいちょい切れてしまうことが判明。Bindのログを見ると、誰かが作って、誰かが消し込んでいるというモグラ叩きが始まり、シリアル値がガンガン上がっている。

やはりDNSとExternal DNSは1対1で使うしかないのか??調べてみた。

ヒントはここにあった。

https://github.com/kubernetes-sigs/external-dns/blob/master/docs/faq.md#im-afraid-you-will-mess-up-my-dns-records

Since v0.3, ExternalDNS can be configured to use an ownership registry. When this option is enabled, ExternalDNS will keep track of which records it has control over, and will never modify any records over which it doesn’t have control. This is a fundamental requirement to operate ExternalDNS safely when there might be other actors creating DNS records in the same target space.

For now ExternalDNS uses TXT records to label owned records, and there might be other alternatives coming in the future releases.

と何だownership registryって。

https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/rfc2136.md#rfc2136-provider-configuration

– –registry=txt
– –txt-prefix=external-dns-
– –txt-owner-id=k8s
– –provider=rfc2136
– –rfc2136-host=192.168.0.1
– –rfc2136-port=53
– –rfc2136-zone=k8s.example

確かにowner-idがあるぞ。。。- –txt-owner-id=k8s

これをクラスタ毎にユニークにしてあげることで解決。解決できたかどうかは、bindのジャーナルをsyncしてみるとわかる。

rndc sync -clean DNSDOMAINNAME
cat /var/cache/bind/DNSDOMAINNAME.lan

external-dns-<ホスト名> TXT “heritage=external-dns,external-dns/owner=<owner-id>,external-dns/resource=service/<Namespace>/<Service名>”

のエントリができていた。これでモグラ叩きもなくなった。

あるものを単純にコピペしちゃいかんという例。ちゃんとパラメーターはみておいた方がいいかもね。。。と思った。

ちなみに、TTLの値は0なんですね。TTLの値は以下で変えられる。

https://github.com/kubernetes-sigs/external-dns/blob/master/docs/ttl.md

 

全く仕事に関係ない話でした。

コメントを残す