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

Container Compute Service:マネージド CoreDNS のカスタムパラメータの設定

最終更新日:Dec 27, 2024

コンテナ化アプリケーションをクラスタにデプロイする場合、クラスタの内部サービスに加えて、外部サービスまたはインターフェースにアクセスする必要があります。この場合、外部ドメイン名解決が重要になります。DNS 解決速度を向上させるために、外部ドメイン名に DNS サーバーを指定できます。静的 IP アドレスにマップされているドメイン名については、ローカルホストファイルにマッピングを追加することもできます。このトピックでは、前述の要件を満たすために CustomDNSConfig CustomResource (CR) を定義することで、マネージド CoreDNS の DNS 設定を構成する方法について説明します。

カスタム CoreDNS パラメータの概要

次の例では、カスタム CoreDNS パラメータを構成する方法について説明します。

apiVersion: networking.alibabacloud.com/v1beta1
kind: CustomDNSConfig
metadata:
  name: default
  namespace: default
spec:
  zones:
  - name: example.com
    forward:
      protocolStrategy: ""
      transportConfig: {}
      upstreams:
      - xxx.xxx.xxx.xxx     # IPアドレス
      - xxx.xxx.xxx.xxx:53  # IP:ポート
    hosts:
    - hostName: "a.example.com" 
      ipAddress: xxx.xxx.xxx.xxx  
  • カスタムゾーン。ゾーンは完全修飾ドメイン名 (FQDN) である必要があります。デフォルト値: "."

  • .forward.protocolStrategy パラメータのデフォルト値は "" で、UDP が使用されることを指定します。このパラメータを tcp に設定することもできます。

  • .forward.transportConfig パラメータのデフォルト値は {} です。このパラメータの値を変更することはできません。

  • 単一ゾーンで .forward.upstreams パラメータを使用して、カスタムアップストリーム DNS サーバーアドレスを構成できます。このパラメータは IP または IP:PORT の形式で、IPv4 のみをサポートします。

    • .forward.upstreams パラメータを指定しない場合、Alibaba Cloud DNS PrivateZone が使用されます。

    • .forward.upstreams パラメータには、最大 15 個のアップストリーム DNS サーバーアドレスを指定できます。

  • 単一ゾーンでカスタムホストプラグインを構成し、静的 IP アドレスをドメイン名にマップできます。

    • hostName パラメータは、特定のドメイン名を定義するために使用されます。ドメイン名の形式は、DNS 仕様に準拠している必要があります。

    • ipAddress パラメータは、ドメイン名にマップされた IP アドレスを定義するために使用されます。これは有効な IPv4 アドレスである必要があります。

    • hostName パラメータを使用して、複数の IP アドレス (ipAddress) を定義できます。例:

      ...
       hosts:
          - hostName: "a.example.com" 
            ipAddress: 10.0.0.123  
          - hostName: "a.example.com" 
            ipAddress: 10.0.0.124
       ...
  • CustomDNSConfig は、名前空間全体の CustomResourceDefinition (CRD) ではありません。default という名前の CustomDNSConfig CR のみ作成できます。

前提条件

  • マネージド CoreDNS プラグインがインストールされています。プラグインのバージョンは 1.9.3.20 以後です。詳細については、コンポーネントの管理 を参照してください。

シナリオ 1: カスタムゾーンを構成する

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

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: default
    spec:
      zones:
      - name: example.com
        forward:
          upstreams:
          - 100.100.2.136  # example.com のアップストリーム DNS サーバーアドレスを 100.100.2.136 と 100.100.2.138 に設定します。
          - 100.100.2.138
      - name: foo.com
        hosts:
        -hostName: "a.foo.com"# foo.com ゾーンの a.foo.com と b.foo.com にカスタム静的 IP アドレスを構成します。
          ipAddress: 192.168.0.251
        - hostName: "b.foo.com"
          ipAddress: 192.168.0.252

    YAML ファイルには、2 つのカスタムゾーンが構成されています。

    • example.com

      アップストリーム DNS サーバーアドレスを 100.100.2.136100.100.2.138 に設定します。

      説明

      100.100.2.136100.100.2.138 は、システムによって割り当てられたデフォルトの内部 DNS 解決サービスアドレスです。詳細については、エンドポイント を参照してください。

    • foo.com

      a.foo.comb.foo.com にカスタム静的 IP アドレスを構成します。

  2. 次のコマンドを実行して、CustomDNSConfig CR を作成します。

    kubectl apply -f default.yaml
  3. 次のコマンドを実行して、生成された corefile を表示します。

    kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1

    予期される出力:

     status:
      corefile: |
        example.com:53 {
            prometheus :9153
            forward .  100.100.2.136 100.100.2.138 {
              policy random
              prefer_udp
            }
    ...
        }
        foo.com:53 {
            prometheus :9153
            hosts {
              192.168.0.251    a.foo.com
              192.168.0.252    b.foo.com
              fallthrough
            }
            forward .  /etc/resolv.conf {
              policy random
              prefer_udp
            }
    ...
        }
    ...
    --
      corefileHash: 41f7be21cf3022c305091665ed33b1e5
      lastTransitionTime: "2024-09-13T09:07:37Z"
      phase: GenerateSuccess

    出力は、default という名前の CustomDNSConfig CR が作成され、対応する corefilestatus パラメータにあることを示しています。

シナリオ 2: デフォルトゾーン構成を変更する

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

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: default
    spec:
      zones:
      - name: .
        forward:
          upstreams:
          -100.100.2.136 # "." という名前のカスタムデフォルトゾーンのアップストリーム DNS サーバーアドレスは 100.100.2.136 と 100.100.2.138 です。
          - 100.100.2.138

    YAML ファイルでは、カスタムアップストリーム DNS サーバーアドレスは 100.100.2.136100.100.2.138 です。

  2. 次のコマンドを実行して、CustomDNSConfig CR を作成します。

    kubectl apply -f default.yaml
  3. 次のコマンドを実行して、生成された corefile を表示します。

    kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1

    予期される出力:

     status: 
      corefile: |
        .:53 {
            errors
            health {
              lameduck 20s
            }
            ready
            kubeapi {
              kubeconfig /etc/kubernetes/config/managed-coredns.conf
            }
            k8s_event {
              level error warning
            }
    ...
            prometheus :9153
            forward .  100.100.2.136 100.100.2.138 {
              policy random
              prefer_udp
            }
    ...
        }
      corefileHash: 847bf69cc4c97cee965945f45d17c661
      lastTransitionTime: "2024-09-13T09:54:22Z"
      phase: GenerateSuccess

    default という名前の CustomDNSConfig CR が作成され、corefile が生成されます。

    説明

    CustomDNSConfig CR を作成または変更した後、CoreDNS は構成の再読み込みを実行する必要があります。これには約 20 秒かかります。corefile パラメータの lamduck の値を変更することで、CoreDNS の再読み込み時間を調整できます。デフォルト値は 20 秒です。

トラブルシューティング

default という名前の CustomDNSConfig CR のみ作成できます。このセクションでは、default 以外の名前で CustomDNSConfig CR を作成すると、CustomDNSConfig のステータスが NotSupported になる理由について説明します。

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

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: test  ## default という名前の CustomDNSConfig CR のみ作成できます。
    spec:
      zones:
      - name: example.com
        forward:
          upstreams:
          - 100.100.2.138
      - name: foo.com
        hosts:
        - hostName: "ah.foo.com"
          ipAddress: 1.1.xx.251
        - hostName: "aha.foo.com"
          ipAddress: 1.1.xx.252
  2. 次のコマンドを実行して、CustomDNSConfig CR を作成します。

    kubectl apply -f test.yaml
  3. 次のコマンドを実行して、生成された corefile を表示します。

    kubectl get customdnsconfig 

    予期される出力:

    NAME      PHASE             VERSION                            AGE
    default   GenerateSuccess   847bf69cc4c97cee96xxxxxxxxxxx      89m
    test      NotSupported                                         9s

    出力は、test という名前の CustomDNSConfig CR を作成できず、NotSupported が表示されることを示しています。

イベント情報

カスタム CoreDNS コントローラは、イベント情報をデフォルトの名前空間に同期します。

次のコマンドを実行して、イベントを表示します。

kubectl get events

予期される出力:

LAST SEEN   TYPE     REASON                  OBJECT                           MESSAGE
45m         Normal   CustomDNSConfigSyncOk   customdnsconfig/default          custom dns config sync to coredns configmap success