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

Container Compute Service:カスタム DNS サーバーを構成するための注釈を追加する

最終更新日:Mar 06, 2025

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

シナリオ

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

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

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

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

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

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

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

構成の概要

重要

次の例は、注釈を追加してカスタム DNS サーバーを指定する方法を示しています。ほとんどの場合、ポッドの注釈ではなく acs-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: test
      name: test-default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: test
      template:
        metadata:
          annotations:
            network.alibabacloud.com/custom-dnsconfig: '{"servers":["20.1.XXX.XXX","30.1.X.X"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}'
          labels:
            app: test
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2
            command: ["sh","-c","i=1; while true; do echo $i; i=$((i=i+1)); sleep 1; done;"]
            name: busybox
            resources:
              requests:
                cpu: "2"
                memory: "8Gi"
              limits:
                cpu: "2"
                memory: "8Gi"
          dnsPolicy: Default
  2. アプリケーションをデプロイします。

    kubectl apply -f deploy.yaml
  3. 結果を確認します。

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

    予期される結果:

    search xx.com yy.com
    nameserver 20.1.XXX.XXX
    nameserver 30.1.XXX.XXX
    nameserver 100.100.2.136
    options ndots:6 edns

クラスタ構成

acs-profile でポッドの自動注入を構成して、クラスタ全体の DNS 解決をカスタマイズできます。 次のコードブロックは、デフォルトの名前空間のすべてのポッドにカスタム DNS 構成を自動的に注入する acs-profile の内容を示しています。 acs-profile を適用した後、ポッドの注釈を追加する必要はありません。 dnsPolicyDefault に設定するだけで済みます。 acs-profile の詳細については、「acs-profile を構成してポッド構成を自動的に挿入する」をご参照ください。

apiVersion: v1
kind: ConfigMap
metadata:
  name: acs-profile
  namespace: kube-system
data:
  selectors: |
    [
      {
        "name": "selector-demo1",
        "namespaceSelector": {
          "matchLabels": {
            "kubernetes.io/metadata.name": "default"
          }
        },
        "effect": {
          "annotations": {
            "network.alibabacloud.com/custom-dnsconfig": "{\"servers\":[\"20.1.XXX.XXX\",\"30.1.X.X\"],\"searches\":[\"xx.com\",\"yy.com\"],\"options\":[\"ndots:2\",\"edns0\"]}"
          }
        }
      }
    ]