クラスタ起動時に立ち上がるkube-dnsは何をしているか?
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
順番めちゃくちゃなんですが勉強する必要がでてきた
Kubernetesのクラスタ内のDNSについてまとめていきます。
- TL;DR(要約)
- kube-dnsとは?
- クラスタ起動時のDNSまわりの動き
- dnsPolicy: ClusterFirst
- dnsPolicy: Default Pod Configuration
- Serviceが作られた際のDNS周りのの挙動
- 外部のネームサーバへアクセス(名前解決)をしにいく場合
TL;DR(要約)
kube-dnsとは?
- kube-dnsはクラスタ内に内蔵されているDNSサーバ
- kube-dnsはデフォルトで立ち上がるネームスペース(Default、Kube-system、Kube-public※1)のKube-systemにPodとして立ち上がる
- kube-dnsのPodは以下の3つのコンテナを含む
- kube-dns
- Dnsmasq-nanny
- sidecar container: podへのhealth checkで使われる
- 名前解決される側の各PodのDNS設定はkubeletによって行われる
- そのDNSサーバのIPアドレスはkube-dnsが持つCluster IPが割り当てられる
※注1:
Kube-system: Namespace for objects/resources created by Kubernetes systems
The Why and How of Kubernetes Namespaces - DZone Cloud
dnsPolicy: ClusterFirst
- defaultの設定
- Masterノードで動いているDNSのServiceを使う
Podが立ち上がる名前空間が"default"だった場合、resolve.confには以下がkubeletにより書き込まれる
例
$ kubectl exec test-pod-- cat /etc/resolv.conf nameserver 10.96.0.10 search default.svc.cluster.local svc.cluster.local cluster.local ap-northeast-1.compute.internal options ndots:5 $
dnsPolicy: Default Pod Configuration
- 設定名は"Default"がついているが、デフォルトの設定は上述した"ClusterFirst"である
- 稼働しているNode自体のDNS設定を継承する
- 各Nodeに設定されているPrimaryのネームサーバに名前解決しにいく
Serviceが作られた際のDNS周りのの挙動
Service: hogeが作られるケースを例に考える
- kubectlコマンドでService "Name: hoge"を作成
- kube-apiserver経由で"Service: hoge"が作成され、情報がetcdに書き込まれる(ここで"Service: hoge"にクラスタ内で使われるVIPが割り当てられる)
- kube-dnsは"Service: hoge"が作成されたことを検知し、"hoge"への問い合わせにIPアドレスを返せるよう準備する
- kube-proxyは"Service:hoge"に割り当てたIP: Port番号への通信をPodに転送するよ う、iptablesに設定を加える
最終的にクラスタ内のPodは"Name: hoge"に以下のように問い合わせることができる
外部のネームサーバへアクセス(名前解決)をしにいく場合
- クラスタ内に加え、外部のサーバにも追加で名前解決の設定をする場合、ConfigMapを使って設定情報を追加する
例
apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system data: upstreamNameservers: | ["8.8.8.8", "8.8.4.4"]
挙動としてはまずlocalの名前解決をしにいき、それがマッチしなかったら upstreamNameserversに設定したDNS Serverへ名前解決をしにいく
("8.8.8.8", "8.8.4.4"はGoogleのPublic DNSである)
参考(Kubernetesの最強参考書)
Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。