Kubernetes クラスタ内のワークロードは、ドメインネームシステム (DNS) サービスを使用してドメイン名を解決します。このトピックでは、Kubernetes クラスタにおける DNS 解決の仕組みと、Alibaba Cloud Container Service for Kubernetes (ACK) クラスタにプリインストールされているデフォルトの DNS リゾルバである CoreDNS について説明します。
Kubernetes クラスタにおける DNS 解決の仕組み
ACK クラスタの kubelet の起動パラメータには、--cluster-dns=<dns-service-ip>
と --cluster-domain=<default-local-domain>
が含まれています。これらのパラメータは、クラスタの DNS サーバーの IP アドレスと、DNS サーバーのベースドメイン名のサフィックスを指定します。
デフォルトでは、ACK は CoreDNS を実行するために、クラスタ内に一連のワークロードをデプロイします。kube-dns という名前の Service がデプロイされ、これらのワークロードをクラスタ内の DNS クエリに公開します。coredns という名前の 2 つの Pod が CoreDNS のバックエンドとしてデプロイされます。クラスタ内の DNS クエリは、coredns Pod の設定で指定された DNS サーバーに送信されます。Pod 内の DNS 設定ファイルは /etc/resolv.conf です。このファイルには、次の内容が含まれています。
nameserver 172.xx.x.xx
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
図 1. DNS 解決の仕組み
番号 | 説明 |
① | クライアント Pod が Nginx Service にアクセスしようとすると、Pod は DNS 設定ファイル /etc/resolv.conf で指定された DNS サーバーにリクエストを送信します。この例では、DNS サーバーの IP アドレスは 172.21.0.10 で、これは kube-dns Service の IP アドレスです。解決の結果は 172.21.0.30 です。 |
② | クライアント Pod は、Nginx Service の IP アドレスである 172.21.0.30 に別のリクエストを送信します。その後、リクエストは Nginx-1 および Nginx-2 バックエンド Pod に転送されます。 |
Kubernetes クラスタにおける DNS 解決の仕組みの詳細については、DNS 解決の設定 を参照してください。
CoreDNS の概要
CoreDNS は、ACK クラスタ用の DNS リゾルバです。CoreDNS は、カスタム内部ドメイン名と外部ドメイン名を解決できます。CoreDNS は、カスタム DNS 設定を構成し、Kubernetes クラスタのホストレコード、CNAME レコード、および書き換えルールをカスタマイズするために使用できるさまざまなプラグインを提供します。CoreDNS は、Kubernetes もホストしている Cloud Native Computing Foundation (CNCF) によってホストされています。
ACK は、CoreDNS を使用してクラスタ内のサービスディスカバリを実装します。ビジネス要件に基づいて CoreDNS を構成し、さまざまなシナリオでより多くの DNS クエリをサポートできます。
ACK クラスタで CoreDNS を構成する方法の詳細については、非マネージド CoreDNS の設定 を参照してください。