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

Container Service for Kubernetes:ACS クラスタ内のポッドのカスタム DNS サーバーを構成する

最終更新日:Mar 20, 2025

セルフマネージド DNS サービスを使用してイメージリポジトリや他のアプリケーションのドメイン名を解決するには、ACS ポッドの DNS 構成でカスタム DNS サーバーを指定できます。このトピックでは、ACS クラスタ内のポッドのカスタム DNS サーバーを構成する方法について説明します。

シナリオ

次のシナリオでは、アノテーションを追加してカスタム DNS サーバーを構成できます。

  • シナリオ 1:Default DNS ポリシー eci-profile を使用して、ACS クラスタ全体の DNS サービスをカスタマイズする場合。

  • シナリオ 2:ClusterFirst DNS ポリシーを使用し、セルフマネージド DNS サーバーを使用してイメージリポジトリのドメイン名を解決する場合。

  • シナリオ 3:Default DNS ポリシーを使用し、eci-profile を使用して ACS クラスタ全体の DNS サービスをカスタマイズする場合。さらに、セルフマネージド DNS サーバーを使用してイメージリポジトリのドメイン名を解決する場合。

この方法は、次のシナリオには適用できません。

  • Alibaba Cloud DNS が提供する DNS サーバーを使用して、アプリケーションとイメージリポジトリのドメイン名を解決する場合。この場合は、Default DNS ポリシーを使用することをお勧めします。カスタム DNS サーバーは使用しないでください。

  • セルフマネージド DNS サービスを使用してアプリケーションのドメイン名を解決し、Alibaba Cloud DNS が提供する DNS サーバーを使用してイメージリポジトリのドメイン名を解決する場合。この場合は、None DNS ポリシーを使用し、ポッドスペックの dnsConfig フィールドを設定してセルフマネージド DNS サーバーを指定することをお勧めします。 詳細については、「シナリオ 2:ポッドの DNS 設定をカスタマイズする」をご参照ください。

構成の概要

重要

次の例は、アノテーションを追加してカスタム DNS サーバーを指定する方法を示しています。ほとんどの場合、ポッドアノテーションの代わりに eci-profile を使用して、クラスタ全体の DNS サービスをカスタマイズします。

network.alibabacloud.com/custom-dnsconfig アノテーションをポッドの構成ファイルのメタデータに追加して、カスタム DNS サーバーを使用できます。このアノテーションの値は、{"servers":["20.1.xx.xx","30.1.xx.xx"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]} 形式で、これは標準の Kubernetes spec.dnsConfig 構造です。

次のセクションに構成を示します。

{
    "servers": [
        "20.1.xx.xx",
        "30.1.xx.xx"
    ],
    "searches": [
        "xx.com",
        "yy.com"
    ],
    "options": [
        "ndots:2",
        "edns0"
    ]
}

次の表に、フィールドの説明を示します。

キー

フィールド

タイプ

説明

network.alibabacloud.com/custom-dnsconfig

{"servers":["20.1.xx.xx","30.1.xx.xx"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}

servers

[]String

["20.1.xx.xx","30.1.xx.xx"]

DNS サーバーの IP アドレス。最大 2 つの IP アドレスを指定できます。上限を超える IP アドレスは自動的に無視されます。

また、システムは Alibaba Cloud DNS サーバーの IP アドレスをフィールド値に自動的に追加して、システムが想定どおりに動作するようにします。

searches

[]String

["xx.com","yy.com"]

検索ドメイン。最大 32 の検索ドメインを指定できます。

不完全なドメイン名を入力した場合、システムは searches フィールドの値にあるドメイン名サフィックスを使用してドメイン名を補完してから、ドメイン名を解決しようとします。

options

[]String

["ndots:2","edns0"]

DNS 解決オプション。オプションは複数のキーと値のペアにすることができます。一般的に使用されるオプションは次のとおりです。

  • ndots:DNS サーバー名が絶対ドメイン名と見なされるために DNS サーバー名に含まれる必要があるピリオド(.)の最小数を指定します。それ以外の場合、DNS は検索ドメインでドメイン名を解決しようとします。

  • edns0:EDNS0 拡張機能を有効にして、より大きな UDP パケットをサポートし、セキュリティを強化します。

  • timeout:DNS クエリのタイムアウト期間を指定します。

  • attempts:DNS クエリ試行回数を指定します。

重要

ビジネス要件に基づいて、ポッドの dnsPolicy フィールドを構成できます。たとえば、シナリオ 2 の要件を満たすには、dnsPolicyClusterFirst に設定する必要があります。

構成を変更した後にポッドが pending になり、内部エラーがスローされた場合は、構成を確認してください。

手順

次の例では、ステートレスアプリケーションを使用します。

  1. deploy.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx-acs-custom-dns
      name: acs-custom-dns
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-acs-custom-dns
      template:
        metadata:
          annotations:
            network.alibabacloud.com/custom-dnsconfig: '{"servers":["114.114.114.114","8.8.8.8"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}'
          labels:
            alibabacloud.com/acs: 'true'
            alibabacloud.com/compute-class: general-purpose
            alibabacloud.com/compute-qos: default      
            app: nginx-acs-custom-dns
        spec:
          containers:
            - image: 'mirrors-ssl.aliyuncs.com/nginx:stable-alpine'
              imagePullPolicy: Always
              name: nginx
              ports:
                - containerPort: 80
                  protocol: TCP
          dnsPolicy: Default
  2. 次のコマンドを実行して、アプリケーションを作成します。

    kubectl apply -f deploy.yaml
  3. 次のコマンドを実行して、アプリケーションの DNS 構成をクエリします。

    kubectl  exec  <pod name>  cat /etc/resolv.conf

    予期される出力:

    search xx.com yy.com
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    nameserver 100.100.2.136
    options ndots:6 edns