Kubernetesクラスターのワークロードでは、ドメインネームシステム (DNS) サービスを使用してドメイン名を解決します。 このトピックでは、KubernetesクラスターでのDNS解決の仕組みについて説明します。 このトピックでは、Container Service for Kubernetes (ACK) クラスターにプリインストールされているデフォルトのDNSリゾルバーであるCoreDNSについても説明します。 Kubernetesクラスターでは、CoreDNSがサービス検出機能を実装します。これにより、ACKクラスター内のサービスは、特定のIPアドレスを使用せずにサービス名で相互にアクセスできます。 CoreDNSはプラグインベースのアーキテクチャを使用しており、ビジネス要件に基づいてさまざまなプラグインを構成し、さまざまなDNS関連の機能を実装できます。
KubernetesクラスターでのDNS解決の仕組み
DNS解決図
番号 | 説明 |
① | クライアントポッドがService Nginxにアクセスしようとすると、ポッドはDNS構成ファイル /etc/resolv.confで指定されているDNSサーバーに要求を送信します。 この例では、DNSサーバーのIPアドレスは、Service kube-dnsのIPアドレスである172.21.0.10です。 解像度の結果は172.21.0.30です。 |
② | クライアントポッドは、Service NginxのIPアドレスである172.21.0.30に別のリクエストを送信します。 その後、リクエストはバックエンドポッドNginx-1に転送され、Nginx-2されます。 |
DNS解決の仕組みの詳細については、「DNSポリシーとドメイン名解決」をご参照ください。
ドメイン名解決の設定
ACKクラスターのkubeletの起動パラメーターには、-- cluster-dns=<dns-service-ip>
と -- cluster-domain=<default-local-domain>
があります。 前者はクラスター内のDNSサーバーのIPアドレスを指定し、後者はプライマリドメイン名のサフィックスを指定します。
デフォルトでは、ACKは一連のワークロードをクラスターにデプロイしてCoreDNSを実行します。 kube-dnsという名前のサービスがデプロイされ、クラスター内のDNSクエリにこれらのワークロードが公開されます。 corednsという名前の2つのポッドがCoreDNSのバックエンドとしてデプロイされます。 クラスター内のDNSクエリは、corednsポッド設定で指定されたDNSサーバーに送信されます。 ポッド内のDNS設定ファイルは /etc/resolv.confです。 ファイルには次の内容が含まれています。
nameserver xx.xx.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
パラメーター | 説明 |
ネームサーバー | DNSサーバーのIPアドレス。 |
検索 | DNSクエリに使用されるサフィックス。 より多くのサフィックスはより多くのDNSクエリを示します。 ACKクラスターは、 |
オプション | DNS設定ファイルのオプション。 複数のキーと値のペアを指定できます。 たとえば、このパラメーターを |
上記の設定に基づいて、内部ドメイン名と外部ドメイン名のDNSクエリが、DNS解決のためにACKクラスターのDNSサーバーに送信されます。
CoreDNSの概要
CoreDNSは、ACKクラスター用のDNSリゾルバーです。 CoreDNSは、カスタムの内部ドメイン名と外部ドメイン名を解決できます。 CoreDNSには、カスタムDNS設定の構成、ホストレコード、Canonical Name (CNAME) レコード、Kubernetesクラスターの書き換えルールのカスタマイズに使用できるさまざまなプラグインが用意されています。 CoreDNSは、KubernetesもホストするCloud Native Computing Foundation (CNCF) によってホストされています。 CoreDNSの詳細については、「CoreDNS: DNSとサービスの検出」をご参照ください。
ACKクラスターはサービス検出にCoreDNSを使用します。 CoreDNSを設定および使用して、さまざまなシナリオでクラスターのDNSクエリ /秒 (QPS) パフォーマンスを向上させることができます。
ACKクラスターでCoreDNSを設定する方法の詳細については、「DNSポリシーとドメイン名解決」をご参照ください。
CoreDNSを使用してACKクラスターのDNSクエリ全体のパフォーマンスを向上させる方法の詳細については、「DNSサービスのベストプラクティス」をご参照ください。
ACKクラスターにNodeLocal DNSCacheを設定して、サービス検出の安定性とパフォーマンスを向上させることもできます。 NodeLocal DNSCacheは、DNSキャッシュプロキシをクラスターノードでDaemonSetとして実行することにより、クラスターのDNSパフォーマンスを向上させます。 クラスターでNodeLocal DNSCacheを設定する方法の詳細については、「NodeLocal DNSCacheの設定」をご参照ください。