ExternalDNS は、Kubernetes の Ingress と Service のために外部 DNS サーバーを設定します。これにより、パブリック DNS サーバーを使用して Kubernetes リソースを検出できます。ExternalDNS は、Kubernetes API から Service や Ingress などのリソースのリストを取得し、必要な DNS レコード情報を決定します。このトピックでは、ACK クラスターに ExternalDNS サービスをデプロイして使用する方法を説明し、その機能を示す例を提供します。
ステップ 1: RAM 権限の設定
ACK クラスターのワーカー RAM ロールに必要な Resource Access Management (RAM) 権限を付与します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、クラスター情報 をクリックします。
[クラスター情報] ページで、[基本情報] タブをクリックします。ワーカー RAM ロールの横にあるリンクをクリックして RAM コンソールに移動し、権限付与ポリシーを作成します。
左側のナビゲーションウィンドウで、[ポリシー] をクリックします。[ポリシー] ページで、[ポリシーの作成] をクリックします。

[ポリシーの作成] ページで、[スクリプトエディター] タブをクリックし、次のカスタム権限付与ポリシーをエディターにコピーします。
[OK] をクリックします。次に、[ポリシー名] を入力し、[OK] をクリックしてカスタムポリシーを作成します。
左側のナビゲーションウィンドウで、[ロール] をクリックします。対象のワーカー RAM ロールを見つけ、[操作] 列の [権限の追加] をクリックします。[すべてのポリシータイプ] ドロップダウンリストから、[カスタムポリシー] を選択します。作成したカスタムポリシーを選択し、OK をクリックします。
ステップ 2: ExternalDNS サービスのデプロイ
[クラスター] ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Helm] ページで、[作成] をクリックします。次の表の説明に従って、[基本情報] パラメーターを設定します。
パラメーター
例
アプリケーション名
external-dns
名前空間
kube-system
ソース
デフォルト: マーケットプレイス
チャート
シナリオ: [すべて] を選択します。
サポートされているアーキテクチャ: [amd64] を選択します。
検索ボックス: external-dns を検索します。
external-dns を選択し、[次へ] をクリックします。
[パラメーター] ページで、[チャートバージョン] を選択し、必要に応じて
alibabaCloudZoneTypeとpolicyの値を指定してから、[OK] をクリックします。alibabaCloudZoneType: ExternalDNS が使用する DNS サービス。デフォルト値はpublicです。public: Alibaba Cloud DNS。private: Alibaba Cloud DNS PrivateZone。
policy: クラスター内の Service の DNS レコードを PrivateZone に同期するためのポリシー。upsert-only: レコードを書き込むか更新します。レコードは削除しません。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 を設定する
Alibaba Cloud DNS コンソールにログインして、パブリックドメイン名情報を取得します。
説明ドメイン名が有効であり、ID 検証に合格していることを確認してください。
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 コンソールに表示されます。
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 を設定する
Alibaba Cloud DNS コンソールにログインして、パブリックドメイン名情報を取得します。
説明ドメイン名が有効であり、ID 検証に合格していることを確認してください。
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 コンソールに表示されます。
次のコマンドを実行して、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 に関連付けられていることを確認する必要があります。
Alibaba Cloud DNS コンソールにログインします。
左側のナビゲーションウィンドウで、[PrivateZone] をクリックします。[PrivateZone (プライベート DNS およびオンプレミス DNS)] ページで、[ゾーンの追加] をクリックします。[権威ゾーンの追加] サイドバーで、[権威ゾーン] を入力し、[OK] をクリックします。
対象のゾーンを見つけ、[操作] 列の [DNS レコード] をクリックします。ゾーンを VPC に関連付ける前に、手動で DNS レコードを追加する必要があります。

詳細については、「PrivateZone でサポートされるレコードタイプ」をご参照ください。
DNS レコードを追加した後、[操作] 列の [スコープ設定] をクリックします。[Alibaba Cloud VPC で有効] ドロップダウンリストで、対象のクラスターを含む VPC を選択し、[OK] をクリックして VPC を関連付けます。
ドメイン名の名前解決を検証します。
対象のクラスターでテストアプリケーションを作成します。
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 コンソールに表示されます。

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 を設定する
Alibaba Cloud DNS コンソールにログインします。
左側のナビゲーションウィンドウで、[PrivateZone] をクリックします。[PrivateZone (プライベート DNS およびオンプレミス DNS)] ページで、[ゾーンの追加] をクリックします。[権威ゾーンの追加] サイドバーで、[権威ゾーン] を入力し、[OK] をクリックします。
対象のゾーンを見つけ、[操作] 列の [DNS レコード] をクリックします。ゾーンを VPC に関連付ける前に、手動で DNS レコードを追加する必要があります。

詳細については、「PrivateZone でサポートされるレコードタイプ」をご参照ください。
DNS レコードを追加した後、[操作] 列の [スコープ設定] をクリックします。[Alibaba Cloud VPC で有効] ドロップダウンリストで、対象のクラスターを含む VPC を選択し、[OK] をクリックして VPC を関連付けます。
ドメイン名の名前解決を検証します。
対象のクラスターでテストアプリケーションを作成します。
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 コンソールに表示されます。

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.