全部產品
Search
文件中心

Container Service for Kubernetes:使用ExternalDNS服務

更新時間:Sep 19, 2025

ExternalDNS為Kubernetes的入口和服務配置外部DNS伺服器,幫您使用公用DNS伺服器來發現Kubernetes資源。ExternalDNS是從Kubernetes API中檢索資源清單(如Service、Ingress等資源),以確定所需的DNS記錄資訊。本文介紹如何在ACK叢集中部署和使用ExternalDNS服務,並通過樣本驗證其功能特性。

步驟一:配置RAM許可權

對ACK叢集的Worker RAM角色授予對應的RAM許可權,操作步驟如下:

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊

  3. 叢集資訊頁面的基本資料頁簽下,單擊Worker 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. 單擊確定,輸入策略名稱稱後單擊確定即可建立自訂策略。

  4. 在左側導覽列單擊角色,然後單擊目標Worker RAM角色操作列下的新增授權,然後單擊所有策略類型下拉框中的自訂策略,選中已建立好的自訂策略,然後單擊認新增授權

步驟二:部署ExternalDNS服務

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

  2. Helm頁面,單擊建立。參考如下資訊完成基本資料配置。

    參數

    樣本值

    應用程式名稱

    external-dns

    命名空間

    kube-system

    來源

    預設為應用市場

    Chart

    • 應用情境:選擇全部

    • 支援架構:選擇amd64

    • 搜尋方塊:搜尋external-dns。

    選中external-dns,單擊下一步

  3. 參數配置頁面,選擇Chart 版本,並根據實際需求選擇合適的alibabaCloudZoneType以及policy。然後單擊確定

    1. alibabaCloudZoneType:external-dns使用的DNS服務。預設為public

      1. public:使用阿里雲公用DNS服務。

      2. private:使用阿里雲PrivateZone服務。

    2. policy:叢集內Service同步到PrivateZone的DNS記錄的策略。

      1. upsert-only:同步寫入或更新,不同步刪除。

      2. sync:同步寫入、更新、刪除。

    # public or private
    alibabaCloudZoneType: public
    
    # upsert-only or sync
    # upsert-only would prevent ExternalDNS from deleting any records, omit to enable full synchronization
    # sync would delete records once target service or ingress are released
    policy: upsert-only

步驟三:使用ExternalDNS服務

說明

ExternalDNS只支援LoadBalancer類型的Service和Ingress配置使用。

為Service配置阿里雲公用DNS服務

  1. 登入Alibaba Cloud DNS控制台,擷取公用網域名稱資訊。

    說明

    確保網域名稱符合規範且完成實名認證。

  2. 根據已有經過實名認證的網域名稱,建立測試應用。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      annotations:
        external-dns.alpha.kubernetes.io/hostname: 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
    說明

    其中external-dns.alpha.kubernetes.io/hostname用來配置需掛載的DNS名稱,ExternalDNS會自動建立IP對應的DNS記錄。

    測試應用建立完成後,稍等片刻即可在Alibaba Cloud DNS控制台看到自動添加的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><em>Thank you for using nginx.</em></p>
    </body>
    </html>

為Ingress配置阿里雲公用DNS服務

  1. 登入Alibaba Cloud DNS控制台,擷取公用網域名稱資訊。

    說明

    確保網域名稱符合規範且完成實名認證。

  2. 根據已有經過實名認證的網域名稱,建立測試應用。

    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.<公用網域名稱>  # <公用網域名稱>是您經過實名認證的網域名稱。
        http:
          paths:
          - backend:
              service:
                name: nginx
                port:
                  number: 80
            path: /
            pathType: ImplementationSpecific
    說明

    其中host用來配置需掛載的DNS名稱,ExternalDNS會自動建立IP對應的DNS記錄。

    測試應用建立完成後,稍等片刻即可在Alibaba Cloud DNS控制台看到自動添加的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><em>Thank you for using nginx.</em></p>
    </body>
    </html>

為Service配置阿里雲PrivateZone服務

如果使用阿里雲DNS提供PrivateZone功能,需確保4alibabaCloudZoneType值為private,且PrivateZone對應的私人網域名稱已關聯VPC,操作步驟如下:

  1. 登入Alibaba Cloud DNS控制台

  2. 在左側導覽列單擊內網網域名稱解析,然後在內網網域名稱解析 (PrivateZone和自建DNS),單擊添加網域名稱(Zone),然後在添加內建權威網域名稱 (Zone)側邊欄中,輸入內建權威網域名稱 (Zone),並單擊確定

  3. 找到目標Zone,單擊其操作列下的解析記錄,手動添加一條記錄,有解析記錄後才能關聯VPC。

    image

    關於PrivateZone解析記錄支援的記錄類型及使用說明,請參見PrivateZone解析記錄支援的記錄類型

  4. 在添加完解析記錄後,單擊其操作列下的生效範圍設定,在生效於阿里雲VPC內網下拉框選擇目的地組群對應的VPC資訊後,再單擊確定進行關聯。

  5. 驗證網域名稱解析。

    1. 在目的地組群建立測試應用。

      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
        annotations:
          external-dns.alpha.kubernetes.io/hostname: nginx.<Zone名稱>  #<Zone名稱>是您在PrivateZone頁面添加的Zone名稱。
          service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"  # 私網類型的負載平衡。
      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記錄。

      測試應用建立完成後,稍等片刻即可在Alibaba Cloud DNS控制台看到自動添加的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><em>Thank you for using nginx.</em></p>
      </body>
      </html>

為Ingress配置阿里雲PrivateZone服務

  1. 登入Alibaba Cloud DNS控制台

  2. 在左側導覽列單擊內網網域名稱解析,然後在內網網域名稱解析 (PrivateZone和自建DNS),單擊添加網域名稱(Zone),然後在添加內建權威網域名稱 (Zone)側邊欄中,輸入內建權威網域名稱 (Zone),並單擊確定

  3. 找到目標Zone,單擊其操作列下的解析記錄,手動添加一條記錄,有解析記錄後才能關聯VPC。

    image

    關於PrivateZone解析記錄支援的記錄類型及使用說明,請參見PrivateZone解析記錄支援的記錄類型

  4. 在添加完解析記錄後,單擊其操作列下的生效範圍設定,在生效於阿里雲VPC內網下拉框選擇目的地組群對應的VPC資訊後,再單擊確定進行關聯。

  5. 驗證網域名稱解析。

    1. 在目的地組群建立測試應用。

      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
        annotations:
          service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"  #私網類型的負載平衡。
      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名稱>  # <Zone名稱>是您在PrivateZone頁面添加的Zone名稱。
          http:
            paths:
            - backend:
                service:
                  name: nginx
                  port:
                    number: 80
              path: /
              pathType: ImplementationSpecific

      測試應用建立完成後,稍等片刻即可在Alibaba Cloud DNS控制台看到自動添加的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><em>Thank you for using nginx.</em></p>
      </body>
      </html>