ExternalDNS為Kubernetes的入口和服務配置外部DNS伺服器,幫您使用公用DNS伺服器來發現Kubernetes資源。ExternalDNS是從Kubernetes API中檢索資源清單(如Service、Ingress等資源),以確定所需的DNS記錄資訊。本文介紹如何在ACK叢集中部署和使用ExternalDNS服務,並通過樣本驗證其功能特性。
步驟一:配置RAM許可權
對ACK叢集的Worker RAM角色授予對應的RAM許可權,操作步驟如下:
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊。
在叢集資訊頁面的基本資料頁簽下,單擊Worker RAM角色右側的連結,前往RAM控制台建立權限原則。
在左側導覽列,單擊權限原則。然後在權限原則頁面單擊建立權限原則。

在建立權限原則頁面,單擊指令碼編輯頁簽,將如下自訂授權策略的內容拷貝到編輯框中。
單擊確定,輸入策略名稱稱後單擊確定即可建立自訂策略。
在左側導覽列單擊角色,然後單擊目標Worker RAM角色操作列下的新增授權,然後單擊所有策略類型下拉框中的自訂策略,選中已建立好的自訂策略,然後單擊確認新增授權。
步驟二:部署ExternalDNS服務
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在Helm頁面,單擊建立。參考如下資訊完成基本資料配置。
參數
樣本值
應用程式名稱
external-dns
命名空間
kube-system
來源
預設為應用市場
Chart
應用情境:選擇全部。
支援架構:選擇amd64。
搜尋方塊:搜尋external-dns。
選中external-dns,單擊下一步。
在參數配置頁面,選擇Chart 版本,並根據實際需求選擇合適的
alibabaCloudZoneType以及policy。然後單擊確定。alibabaCloudZoneType:external-dns使用的DNS服務。預設為public。public:使用阿里雲公用DNS服務。private:使用阿里雲PrivateZone服務。
policy:叢集內Service同步到PrivateZone的DNS記錄的策略。upsert-only:同步寫入或更新,不同步刪除。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服務
登入Alibaba Cloud DNS控制台,擷取公用網域名稱資訊。
說明確保網域名稱符合規範且完成實名認證。
根據已有經過實名認證的網域名稱,建立測試應用。
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記錄。
測試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服務
登入Alibaba Cloud DNS控制台,擷取公用網域名稱資訊。
說明確保網域名稱符合規範且完成實名認證。
根據已有經過實名認證的網域名稱,建立測試應用。
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記錄。
使用以下命令,測試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功能,需確保4中alibabaCloudZoneType值為private,且PrivateZone對應的私人網域名稱已關聯VPC,操作步驟如下:
在左側導覽列單擊內網網域名稱解析,然後在內網網域名稱解析 (PrivateZone和自建DNS),單擊添加網域名稱(Zone),然後在添加內建權威網域名稱 (Zone)側邊欄中,輸入內建權威網域名稱 (Zone),並單擊確定。
找到目標Zone,單擊其操作列下的解析記錄,手動添加一條記錄,有解析記錄後才能關聯VPC。

關於PrivateZone解析記錄支援的記錄類型及使用說明,請參見PrivateZone解析記錄支援的記錄類型。
在添加完解析記錄後,單擊其操作列下的生效範圍設定,在生效於阿里雲VPC內網下拉框選擇目的地組群對應的VPC資訊後,再單擊確定進行關聯。
驗證網域名稱解析。
在目的地組群建立測試應用。
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記錄。

測試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服務
在左側導覽列單擊內網網域名稱解析,然後在內網網域名稱解析 (PrivateZone和自建DNS),單擊添加網域名稱(Zone),然後在添加內建權威網域名稱 (Zone)側邊欄中,輸入內建權威網域名稱 (Zone),並單擊確定。
找到目標Zone,單擊其操作列下的解析記錄,手動添加一條記錄,有解析記錄後才能關聯VPC。

關於PrivateZone解析記錄支援的記錄類型及使用說明,請參見PrivateZone解析記錄支援的記錄類型。
在添加完解析記錄後,單擊其操作列下的生效範圍設定,在生效於阿里雲VPC內網下拉框選擇目的地組群對應的VPC資訊後,再單擊確定進行關聯。
驗證網域名稱解析。
在目的地組群建立測試應用。
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記錄。

測試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>