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

Container Service for Kubernetes:ExternalDNS の使用

最終更新日:Nov 09, 2025

ExternalDNS は、Kubernetes の Ingress と Service のために外部 DNS サーバーを設定します。これにより、パブリック DNS サーバーを使用して Kubernetes リソースを検出できます。ExternalDNS は、Kubernetes API から Service や Ingress などのリソースのリストを取得し、必要な DNS レコード情報を決定します。このトピックでは、ACK クラスターに ExternalDNS サービスをデプロイして使用する方法を説明し、その機能を示す例を提供します。

ステップ 1: RAM 権限の設定

ACK クラスターのワーカー RAM ロールに必要な Resource Access Management (RAM) 権限を付与します。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、クラスター情報 をクリックします。

  3. [クラスター情報] ページで、[基本情報] タブをクリックします。ワーカー RAM ロールの横にあるリンクをクリックして RAM コンソールに移動し、権限付与ポリシーを作成します。

    1. 左側のナビゲーションウィンドウで、[ポリシー] をクリックします。[ポリシー] ページで、[ポリシーの作成] をクリックします。

      image

    2. [ポリシーの作成] ページで、[スクリプトエディター] タブをクリックし、次のカスタム権限付与ポリシーをエディターにコピーします。

      ポリシーの内容を展開して表示

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": "alidns:AddDomainRecord",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "alidns:DeleteDomainRecord",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "alidns:UpdateDomainRecord",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "alidns:DescribeDomainRecords",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "alidns:DescribeDomains",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "pvtz:AddZoneRecord",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "pvtz:DeleteZoneRecord",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "pvtz:UpdateZoneRecord",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "pvtz:DescribeZoneRecords",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "pvtz:DescribeZones",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "pvtz:DescribeZoneInfo",
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }
    3. [OK] をクリックします。次に、[ポリシー名] を入力し、[OK] をクリックしてカスタムポリシーを作成します。

  4. 左側のナビゲーションウィンドウで、[ロール] をクリックします。対象のワーカー RAM ロールを見つけ、[操作] 列の [権限の追加] をクリックします。[すべてのポリシータイプ] ドロップダウンリストから、[カスタムポリシー] を選択します。作成したカスタムポリシーを選択し、OK をクリックします。

ステップ 2: ExternalDNS サービスのデプロイ

  1. [クラスター] ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Helm] を選択します。

  2. [Helm] ページで、[作成] をクリックします。次の表の説明に従って、[基本情報] パラメーターを設定します。

    パラメーター

    アプリケーション名

    external-dns

    名前空間

    kube-system

    ソース

    デフォルト: マーケットプレイス

    チャート

    • シナリオ: [すべて] を選択します。

    • サポートされているアーキテクチャ: [amd64] を選択します。

    • 検索ボックス: external-dns を検索します。

    external-dns を選択し、[次へ] をクリックします。

  3. [パラメーター] ページで、[チャートバージョン] を選択し、必要に応じて alibabaCloudZoneTypepolicy の値を指定してから、[OK] をクリックします。

    1. alibabaCloudZoneType: ExternalDNS が使用する DNS サービス。デフォルト値は public です。

      1. public: Alibaba Cloud DNS。

      2. private: Alibaba Cloud DNS PrivateZone。

    2. policy: クラスター内の Service の DNS レコードを PrivateZone に同期するためのポリシー。

      1. upsert-only: レコードを書き込むか更新します。レコードは削除しません。

      2. sync: レコードの書き込み、更新、削除を行います。

    # public または private
    alibabaCloudZoneType: public
    
    # upsert-only または sync
    # upsert-only は ExternalDNS がレコードを削除するのを防ぎます。完全な同期を有効にするには省略します
    # sync は、ターゲットの service または ingress がリリースされるとレコードを削除します
    policy: upsert-only

ステップ 3: ExternalDNS サービスの使用

説明

ExternalDNS は、LoadBalancer タイプの Service と Ingress のみをサポートします。

Service 用に Alibaba Cloud DNS を設定する

  1. Alibaba Cloud DNS コンソールにログインして、パブリックドメイン名情報を取得します。

    説明

    ドメイン名が有効であり、ID 検証に合格していることを確認してください。

  2. ID 検証に合格したドメイン名を使用してテストアプリケーションを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      annotations:
        external-dns.alpha.kubernetes.io/hostname: nginx.<public_domain_name>  # <public_domain_name> を、ID 検証に合格したドメイン名に置き換えます。
    spec:
      type: LoadBalancer
      ports:
      - port: 80
        name: http
        targetPort: 80
      selector:
        app: nginx
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx
            name: nginx
    説明

    external-dns.alpha.kubernetes.io/hostname アノテーションは、割り当てる DNS 名を指定します。ExternalDNS は、対応する IP アドレスの DNS レコードを自動的に作成します。

    テストアプリケーションが作成されると、自動的に作成された DNS レコードがまもなく Alibaba Cloud DNS コンソールに表示されます。

  3. DNS 名前解決をテストします。

    curl nginx.****.com

    期待される出力:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    html { color-scheme: light dark; }
    body { width: 35em; margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif; }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p>Thank you for using nginx.

Ingress 用に Alibaba Cloud DNS を設定する

  1. Alibaba Cloud DNS コンソールにログインして、パブリックドメイン名情報を取得します。

    説明

    ドメイン名が有効であり、ID 検証に合格していることを確認してください。

  2. ID 検証に合格したドメイン名を使用してテストアプリケーションを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
    spec:
      type: LoadBalancer
      ports:
      - port: 80
        name: http
        targetPort: 80
      selector:
        app: nginx
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx
            name: nginx
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: nginx
    spec:
      ingressClassName: nginx
      rules:
      - host: nginx-ing.<public_domain_name>  # <public_domain_name> を、ID 検証に合格したドメイン名に置き換えます。
        http:
          paths:
          - backend:
              service:
                name: nginx
                port:
                  number: 80
            path: /
            pathType: ImplementationSpecific
    説明

    host フィールドは、割り当てる DNS 名を指定します。ExternalDNS は、対応する IP アドレスの DNS レコードを自動的に作成します。

    テストアプリケーションが作成されると、自動的に作成された DNS レコードがまもなく Alibaba Cloud DNS コンソールに表示されます。

  3. 次のコマンドを実行して、DNS 名前解決をテストします。

    curl nginx-ing.****.com

    期待される出力:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    html { color-scheme: light dark; }
    body { width: 35em; margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif; }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p>Thank you for using nginx.

Service 用に Alibaba Cloud DNS PrivateZone を設定する

Alibaba Cloud DNS の PrivateZone 機能を使用するには、デプロイメントパラメーターalibabaCloudZoneType の値を private に設定し、PrivateZone のプライベートドメイン名が VPC に関連付けられていることを確認する必要があります。

  1. Alibaba Cloud DNS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[PrivateZone] をクリックします。[PrivateZone (プライベート DNS およびオンプレミス DNS)] ページで、[ゾーンの追加] をクリックします。[権威ゾーンの追加] サイドバーで、[権威ゾーン] を入力し、[OK] をクリックします。

  3. 対象のゾーンを見つけ、[操作] 列の [DNS レコード] をクリックします。ゾーンを VPC に関連付ける前に、手動で DNS レコードを追加する必要があります。

    image

    詳細については、「PrivateZone でサポートされるレコードタイプ」をご参照ください。

  4. DNS レコードを追加した後、[操作] 列の [スコープ設定] をクリックします。[Alibaba Cloud VPC で有効] ドロップダウンリストで、対象のクラスターを含む VPC を選択し、[OK] をクリックして VPC を関連付けます。

  5. ドメイン名の名前解決を検証します。

    1. 対象のクラスターでテストアプリケーションを作成します。

      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
        annotations:
          external-dns.alpha.kubernetes.io/hostname: nginx.<Zone_Name>  # <Zone_Name> を、PrivateZone ページで追加したゾーンの名前に置き換えます。
          service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"  # 内部向け Server Load Balancer インスタンス。
      spec:
        type: LoadBalancer
        ports:
        - port: 80
          name: http
          targetPort: 80
        selector:
          app: nginx
      
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        labels:
          app: nginx
        name: nginx
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
              name: nginx
      説明

      external-dns.alpha.kubernetes.io/hostname アノテーションは、PrivateZone のドメイン名を指定します。ExternalDNS は、対応する IP アドレスの DNS レコードを自動的に作成します。

      テストアプリケーションが作成されると、自動的に作成された DNS レコードがまもなく Alibaba Cloud DNS コンソールに表示されます。

      image

    2. DNS 名前解決をテストします。

      curl nginx.****

      期待される出力:

      <!DOCTYPE html>
      <html>
      <head>
      <title>Welcome to nginx!</title>
      <style>
      html { color-scheme: light dark; }
      body { width: 35em; margin: 0 auto;
      font-family: Tahoma, Verdana, Arial, sans-serif; }
      </style>
      </head>
      <body>
      <h1>Welcome to nginx!</h1>
      <p>If you see this page, the nginx web server is successfully installed and
      working. Further configuration is required.</p>
      
      <p>For online documentation and support please refer to
      <a href="http://nginx.org/">nginx.org</a>.<br/>
      Commercial support is available at
      <a href="http://nginx.com/">nginx.com</a>.</p>
      
      <p>Thank you for using nginx.

Ingress 用に Alibaba Cloud DNS PrivateZone を設定する

  1. Alibaba Cloud DNS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[PrivateZone] をクリックします。[PrivateZone (プライベート DNS およびオンプレミス DNS)] ページで、[ゾーンの追加] をクリックします。[権威ゾーンの追加] サイドバーで、[権威ゾーン] を入力し、[OK] をクリックします。

  3. 対象のゾーンを見つけ、[操作] 列の [DNS レコード] をクリックします。ゾーンを VPC に関連付ける前に、手動で DNS レコードを追加する必要があります。

    image

    詳細については、「PrivateZone でサポートされるレコードタイプ」をご参照ください。

  4. DNS レコードを追加した後、[操作] 列の [スコープ設定] をクリックします。[Alibaba Cloud VPC で有効] ドロップダウンリストで、対象のクラスターを含む VPC を選択し、[OK] をクリックして VPC を関連付けます。

  5. ドメイン名の名前解決を検証します。

    1. 対象のクラスターでテストアプリケーションを作成します。

      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
        annotations:
          service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"  # 内部向け Server Load Balancer インスタンス。
      spec:
        type: LoadBalancer
        ports:
        - port: 80
          name: http
          targetPort: 80
        selector:
          app: nginx
      
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        labels:
          app: nginx
        name: nginx
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
              name: nginx
      ---
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: nginx
      spec:
        ingressClassName: nginx
        rules:
        - host: nginx-ing.<Zone_Name>  # <Zone_Name> を、PrivateZone ページで追加したゾーンの名前に置き換えます。
          http:
            paths:
            - backend:
                service:
                  name: nginx
                  port:
                    number: 80
              path: /
              pathType: ImplementationSpecific

      テストアプリケーションが作成されると、自動的に作成された DNS レコードがまもなく Alibaba Cloud DNS コンソールに表示されます。

      image

    2. DNS 名前解決をテストします。

      curl nginx-ing.****

      期待される出力:

      <!DOCTYPE html>
      <html>
      <head>
      <title>Welcome to nginx!</title>
      <style>
      html { color-scheme: light dark; }
      body { width: 35em; margin: 0 auto;
      font-family: Tahoma, Verdana, Arial, sans-serif; }
      </style>
      </head>
      <body>
      <h1>Welcome to nginx!</h1>
      <p>If you see this page, the nginx web server is successfully installed and
      working. Further configuration is required.</p>
      
      <p>For online documentation and support please refer to
      <a href="http://nginx.org/">nginx.org</a>.<br/>
      Commercial support is available at
      <a href="http://nginx.com/">nginx.com</a>.</p>
      
      <p>Thank you for using nginx.