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

Container Compute Service:DNS の仕組みと構成方法

最終更新日:Mar 26, 2026

Alibaba Cloud Container Compute Service (ACS) クラスターでは、DNS 解決に CoreDNS を使用します。本トピックでは、クラスター内における DNS の動作原理およびワークロード要件に応じた dnsPolicy の設定方法について説明します。

クラスター内での DNS 解決の有効化

ACS クラスターでは、DNS 解決はデフォルトで無効になっています。有効化するには、クラスター作成時に CoreDNS を選択してください。CoreDNS は、kube-dns という名前の Service として、kube-system 名前空間内でクラスター内部に公開されます。

kube-dns Service の状態を確認するには、以下のコマンドを実行します:

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

CoreDNS を有効化した ACS クラスターの作成方法については、「ACS クラスターの作成」をご参照ください。

ACS クラスター内における DNS 解決の仕組み

Pod が起動すると、kubelet は以下の 2 つのパラメーターを使用してその DNS 設定を構成します:

  • --cluster-dns=<dns-service-ip>:クラスター内の DNS サーバの IP アドレス

  • --cluster-domain=<default-local-domain>:ベースとなるドメイン名のサフィックス

これらのパラメーターにより、各 Pod 内の /etc/resolv.conf の内容が決定されます:

nameserver xx.xx.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
パラメーター説明
nameserverDNS サーバの IP アドレスです。
searchDNS 検索時に短いホスト名に付加されるドメインサフィックスです。ACS クラスターでは、3 つのサフィックス(kube-system.svc.cluster.localsvc.cluster.localcluster.local)が設定されており、単一の検索で最大 4 回の DNS クエリが生成される可能性があります。
optionsキーと値のペア形式で指定される追加のリゾルバーオプションです。デフォルトの ndots:5 は、以下を意味します:ドメイン名に含まれるドットの数が ndots の値より多い場合、完全修飾ドメイン名(FQDN)と見なされ、直接解決されます。ドットの数が少ない場合は、まず search サフィックスが付加されてから解決が試行されます。

DNS ポリシーの選択

Pod の仕様(spec)内で dnsPolicy を設定することで、Pod によるドメイン名解決の方法を制御できます。ACS クラスターでは、以下のポリシーがサポートされています:

ポリシー使用される DNS サーバ使用タイミング
ClusterFirstCoreDNS(kube-dnsクラスター内の他のサービスにアクセスする必要がある Pod に使用します。これがデフォルトのポリシーです。
NonednsConfig完全にカスタマイズされた DNS 設定が必要な Pod に使用します。
Defaultノードの /etc/resolv.conf(Alibaba Cloud DNS)クラスター内部のサービスにアクセスしない Pod
Default はデフォルトの DNS ポリシーではありません。dnsPolicy が明示的に指定されていない場合、ClusterFirst が使用されます。

CoreDNS を使用したクラスター内ドメイン名の解決

クラスター内の他のサービスと通信する Pod には、dnsPolicy: ClusterFirst を設定します。これは、ACS ワークロードにおけるデフォルトの動作です。

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

Pod の DNS 設定のカスタマイズ

Pod の DNS 設定を完全に制御するには、dnsPolicy: None を設定し、dnsConfig ブロックを提供します。dnsPolicyNone の場合、dnsConfig 内に少なくとも 1 つの nameserver を指定する必要があります。

dnsConfig は任意の項目であり、dnsPolicy と組み合わせて使用できます(None に限定されません)。他のポリシーと併用することで、既存の設定に追加の nameserver や search ドメインを付与できます。

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"

Pod が起動すると、上記の設定により以下の /etc/resolv.conf が生成されます:

nameserver 169.254.xx.xx
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:2

以下の表に、dnsConfig の各フィールドについて説明します:

フィールド説明
nameserversPod が使用する DNS サーバの IP アドレスの一覧です。最大 3 つの IP アドレスを指定できます。dnsPolicyNone の場合、少なくとも 1 つを指定する必要があります。重複するアドレスは自動的に削除されます。
searchesホスト名検索に使用される DNS search ドメインの一覧です。最大 6 個のドメインを指定できます。これらは、DNS ポリシーから導出された基本リストに追加されます。重複するドメインは自動的に削除されます。
optionsリゾルバーのオプションの一覧です。各オプションは name(必須)および value(任意)で構成されます。これらのオプションは、DNS ポリシーによって生成されたオプションにマージされます。重複する項目は自動的に削除されます。

CoreDNS を経由せずにノードレベルの DNS を使用

Pod が ACS クラスター内のサービスに一切アクセスしない場合、dnsPolicy: Default を設定します。DNS 解決は、ノードの /etc/resolv.conf を使用した 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

静的ホスト名と IP アドレスのマッピング

特定の Pod に対して静的なホスト名と IP アドレスのマッピングを追加するには、Pod の仕様(spec)に hostAliases フィールドを追加します。kubelet は、Pod の /etc/hosts ファイルを管理し、起動時にこれらのエントリを書き込みます。

警告

実行中のコンテナ内で /etc/hosts を手動で編集しないでください。コンテナが再起動すると、kubelet がこのファイルを上書きするため、手動で行った変更は失われます。

単一の Pod ではなく、クラスター内のすべての Pod に静的マッピングを適用するには、CoreDNS の hosts プラグインを有効化します。「CoreDNS 拡張機能の構成」をご参照ください。

以下の例では、foo.localbar.localfoo.remote を静的 IP アドレスにマップしています:

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 が起動後、/etc/hosts には以下の内容が含まれます:

# Kubernetes-managed hosts file.
127.0.**.**	localhost
10.200.**.**	hostaliases-pod

# Entries added by HostAliases.
127.0.**.**	foo.local	bar.local
10.1.**.**	foo.remote	bar.remote

次のステップ