はじめに
研究室のDNSをKubernetes上に作成しました.
仮想マシンを3台作成し,master3台のKunbernetesクラスターを構成しました.
githubにあったhelmのpowerdnsを使いました.
githubにあったhelmのpowerdnsのrecorsorも使いました.
大変だったこと
構成のこと
キャッシュサーバーなんかなくても権威サーバーだけあればなんとかなるだろと思ってたこと.
本番環境に権威サーバーだけ実装したら,再帰的名前解決ができなくて困った.
テスト環境には,DNSとDHCPしかなかったけど,本番環境には踏み台サーバーもありました.
テスト環境と本番環境の違いを全く意識してませんでした.
resolv.confのこと
権威サーバーを実装をインストールしたら名前解決ができなくなってキャッシュサーバーのインストールができなくなりました.
resolv.confのnameserverが127.0.0.1になっていたので,8.8.8.8に変えたかった.resolv.confは書き換えても,すぐに元に戻ってしまうのでだめでした.
systemd-resolved.serviceを止めることで,書き換えることができました.
権威サーバーの作成
git cloneでもってきてvalues.yamlを編集しました.
レプリカ数を変えたり,LoadBalancerにしたりしました.
権威サーバーだけだと特に何の問題もなくできました.
キャッシュサーバーの作成
こっちもgit cloneでもってきてvalues.yamlを編集しました.
レプリカ数を変えたり,LoadBalancerにしたりしました.
ここでいろいろ問題が起きました.権威サーバーとポートが被っていることに気づかずLoadBalancerにしていて,EXTERNAL-IPが振られませんでした.ポートは,確認しましょう.
forward-zonesの指定でKubernetesのサービス名を使おうとしました.だめでした.IPアドレス以外受け付けてくれないみたいです.
config: |-
daemon=no
local-address=0.0.0.0
local-port=53
allow-from=0.0.0.0/0
setgid=recursor
setuid=recursor
forward-zones=a910.tak-cslab.org=192.168.100.35:5300 #折角Kubernetesだし,ここにservice名入れたかった
forward-zones-recurse=.=10.200.70.35,.=1.1.1.1
webserver=yes
webserver-port=8082
webserver-address=0.0.0.0
api-config-dir=/data
include-dir=/zones
auth-zones=
おわりに
$ kubectl get pod
NAME READY STATUS RESTARTS
pdns-mariadb-master-0 2/2 Running 2 (6d ago)
pdns-mariadb-slave-0 2/2 Running 2 (6d ago)
pdns-powerdns-helm-7564649788-grlqh 1/1 Running 3 (6d ago)
pdns-powerdns-helm-7564649788-jw625 1/1 Running 4 (6d ago)
pdns-powerdns-helm-7564649788-mtktv 1/1 Running 4 (6d ago)
recu-pdns-recursor-helm-79bd5bc76d-4krp7 1/1 Running 2 (6d ago)
recu-pdns-recursor-helm-79bd5bc76d-sm5nv 1/1 Running 2 (6d ago)
recu-pdns-recursor-helm-79bd5bc76d-tbp25 1/1 Running 2 (6d ago)
権威サーバーとキャッシュサーバーをそれぞれレプリカ数3で作成し,kubectl get podで確認しました.無事動きました.
知識がなかったり,テスト環境と本番環境の違いに気づかなかったり,大変でした.
特にテスト環境と本番環境の違いには気を付けたほうがいいことを学びました.