すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:DNSの概要

最終更新日:Nov 12, 2024

Kubernetesクラスターのワークロードでは、ドメインネームシステム (DNS) サービスを使用してドメイン名を解決します。 このトピックでは、KubernetesクラスターでのDNS解決の仕組みについて説明します。 このトピックでは、Container Service for Kubernetes (ACK) クラスターにプリインストールされているデフォルトのDNSリゾルバーであるCoreDNSについても説明します。 Kubernetesクラスターでは、CoreDNSがサービス検出機能を実装します。これにより、ACKクラスター内のサービスは、特定のIPアドレスを使用せずにサービス名で相互にアクセスできます。 CoreDNSはプラグインベースのアーキテクチャを使用しており、ビジネス要件に基づいてさまざまなプラグインを構成し、さまざまなDNS関連の機能を実装できます。

KubernetesクラスターでのDNS解決の仕組み

DNS解決図

image

番号

説明

クライアントポッドが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クラスターは、kube-system.svc.cluster.localsvc.cluster.localcluster.localの3つのサフィックスに一致します。 ドメイン名は、クラスタ内でそれぞれ4回IPv4アドレスとIPv6アドレスに解決されます。 したがって、ドメイン名を最大8回解決して、必要な解決結果を取得できます。

オプション

DNS設定ファイルのオプション。 複数のキーと値のペアを指定できます。 たとえば、このパラメーターをndots:5に設定します。 ドメイン名文字列のドット数がndotsパラメーターの値より大きい場合、ドメイン名は完全なドメイン名であり、直接解決されます。 ドメイン名文字列のドット数がndotsパラメーターの値よりも小さい場合、ドメイン名が解決される前に、searchパラメーターで指定されたサフィックスがドメイン名に追加されます。

上記の設定に基づいて、内部ドメイン名と外部ドメイン名の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クラスターにNodeLocal DNSCacheを設定して、サービス検出の安定性とパフォーマンスを向上させることもできます。 NodeLocal DNSCacheは、DNSキャッシュプロキシをクラスターノードでDaemonSetとして実行することにより、クラスターのDNSパフォーマンスを向上させます。 クラスターでNodeLocal DNSCacheを設定する方法の詳細については、「NodeLocal DNSCacheの設定」をご参照ください。