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

Container Compute Service:DNS 解決の設定

最終更新日:Dec 27, 2024

このトピックでは、Alibaba Cloud Container Service for Kubernetes (ACK) クラスタにおけるドメインネームシステム (DNS) 解決の仕組みと、さまざまなシナリオで異なるビジネス要件を満たすために DNS ポリシーを設定する方法について説明します。

背景情報

デフォルトでは、ACK クラスタは DNS 解決サービスを提供しません。ACK クラスタの DNS 解決を有効にするには、クラスタの作成時に CoreDNS を選択する必要があります。kube-dns という名前の Service が ACK クラスタにデプロイされ、DNS 解決サービスを提供します。次のコマンドを実行して、kube-dns Service に関する情報をクエリできます。ACK クラスタの作成方法の詳細については、ACK クラスタの作成 を参照してください。

kubectl get svc kube-dns -n kube-system

期待される出力:

NAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   172.24.0.10   <none>        53/UDP,53/TCP,9153/TCP   27d

ACK クラスタにおける DNS 解決の仕組み

ACK クラスタの kubelet の起動パラメータには、--cluster-dns=<dns-service-ip>--cluster-domain=<default-local-domain> が含まれています。これらのパラメータは、クラスタの DNS サーバーの IP アドレスと、DNS サーバーのベースドメイン名のサフィックスを指定します。

Pod の DNS 設定ファイルは /etc/resolv.conf です。ファイルには次の内容が含まれています。

nameserver xx.xx.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

パラメータ

説明

nameserver

DNSサーバーのIPアドレス。

検索

DNS クエリに使用されるサフィックスです。サフィックスが多いほど、DNS クエリが多くなります。ACS クラスターの場合、サフィックスは kube-system.svc.cluster.localsvc.cluster.local、および cluster.local です。そのため、ACS クラスターに送信される要求に対して最大 4 つのクエリが生成されます。

オプション

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

上記の設定に基づいて、内部ドメイン名と外部ドメイン名の DNS クエリは、DNS 解決のために ACS クラスタの DNS サーバーに送信されます。

さまざまなシナリオでACSクラスターのDNSポリシーを設定するためにdnsPolicyを使用する

dnsPolicy パラメーターを使用して、PodのさまざまなDNSポリシーを指定できます。ACSクラスターは、以下のポリシーをサポートしています。

  • ClusterFirst: このポリシーは、PodがCoreDNSを使用してドメイン名を解決することを示します。 /etc/resolv.conf ファイルには、CoreDNSによって提供されるDNSサーバーのアドレス(kube-dns)が含まれています。これは、ACSクラスターのワークロードのデフォルトのDNSポリシーです。

  • None: このポリシーは、PodがACSクラスターのDNS設定を無視することを示します。 dnsConfig フィールドを使用して、DNS設定をカスタマイズする必要があります。

  • Default: このポリシーは、PodがデプロイされているノードからDNS解決設定を継承することを示します。ACSクラスターでは、ノードはElastic Compute Service(ECS)インスタンスに基づいて作成されます。したがって、Podは、PodがデプロイされているECSインスタンスベースのノードの/etc/resolv.conf ファイルを直接使用します。このファイルには、Alibaba Cloud DNSによって提供されるDNSサーバーのアドレスが含まれています。

上記のDNSポリシーを使用して、さまざまなシナリオでさまざまなビジネス要件を満たすことができます。

シナリオ1: ACSクラスターによって提供されるCoreDNSを使用してドメイン名を解決する

このシナリオでは、DNSポリシー設定にdnsPolicy: ClusterFirst を指定する必要があります。例:

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: ClusterFirst

シナリオ2: PodのDNS設定をカスタマイズする

DeploymentのDNS設定をカスタマイズするには、DNSポリシー設定にdnsPolicy: None を指定する必要があります。例:

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: None
  dnsConfig:
    nameservers: ["169.254.xx.xx"]
    searches:
    - default.svc.cluster.local
    - svc.cluster.local
    - cluster.local
    options:
    - name: ndots
      value: "2"

次の表は、dnsConfig セクションのパラメーターについて説明しています。

パラメーター

説明

nameservers

PodのDNSサーバーのIPアドレスのリスト。最大3つのIPアドレスを指定できます。PodのdnsPolicyNone に設定する場合は、少なくとも1つのIPアドレスを指定する必要があります。PodのdnsPolicyをNoneに設定しない場合、このパラメーターはオプションです。リストされたDNSサーバーのIPアドレスは、dnsPolicy の値に基づいて生成されるDNS構成ファイルのnameserver パラメーターに追加されます。重複するIPアドレスは削除されます。

searches

Podでのホスト名ルックアップ用のDNS検索ドメインのリスト。このパラメーターはオプションです。リストされたDNS検索ドメインは、指定されたDNSポリシーに基づいて生成されるベース検索ドメインのリストに追加されます。重複するドメイン名は削除されます。最大6つの検索ドメインを指定できます。

options

オプション項目のリスト。各項目には、name(必須)とvalue(オプション)を含めることができます。指定された項目は、指定されたDNSポリシーに基づいて生成されるオプション項目のリストに追加されます。重複する項目は削除されます。

シナリオ3: Alibaba Cloudによって提供されるECSインスタンスのDNS設定を使用する

アプリケーションPodがACSクラスターにデプロイされた他のサービスにアクセスする必要がない場合は、DNSポリシー設定にdnsPolicy: Default を指定できます。このシナリオでは、DNS解決はAlibaba Cloud DNSによって実行され、CoreDNSは必要ありません。例:

apiVersion: v1
kind: Pod
metadata:
 name: alpine
 namespace: default
spec:
 containers:
 - image: alpine
 command:
 - sleep
 - "10000"
 imagePullPolicy: Always
 name: alpine
 dnsPolicy: Default

Pod 内の /etc/hosts ファイルを構成するための hostAliases パラメーターの使用

すべての Pod 内で DNS 解決のために指定されたドメイン名を静的 IP アドレスにマッピングする場合、CoreDNS の hosts プラグインを有効にすることができます。詳細については、CoreDNS 拡張機能の構成を参照してください。

指定された Pod 内で DNS 解決のために指定されたドメイン名を静的 IP アドレスにマッピングする場合、Pod の /etc/hosts ファイルに hostAliases パラメーターを追加できます。例:

apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  hostAliases:
  - ip: "127.0.**.**"
    hostnames:
    - "foo.local"
    - "bar.local"
  - ip: "10.1.**.**"
    hostnames:
    - "foo.remote"
  containers:
  - name: cat-hosts
    image: busybox:1.28
    command:
    - cat
    args:
    - "/etc/hosts"

次のコードブロックは、Pod 構成の spec セクションに hostAliases パラメーターを追加した後に初期化された /etc/hosts ファイルの内容を示しています。

# Kubernetes-managed hosts file.  // Kubernetes によって管理される hosts ファイルです。
127.0.**.**	localhost
10.200.**.**	hostaliases-pod

# Entries added by HostAliases. // HostAliases によって追加されたエントリです。
127.0.**.**	foo.local	bar.local
10.1.**.**	foo.remote	bar.remote

上記のコンテンツは、foo.local、bar.local、および foo.remote ドメイン名が静的 IP アドレスにマッピングされていることを示しています。