セルフマネージド DNS サービスを使用してイメージリポジトリや他のアプリケーションのドメイン名を解決するには、ACS ポッドの DNS 構成でカスタム DNS サーバーを指定できます。このトピックでは、ACS クラスタ内のポッドのカスタム DNS サーバーを構成する方法について説明します。
シナリオ
次のシナリオでは、アノテーションを追加してカスタム DNS サーバーを構成できます。
シナリオ 1:
DefaultDNS ポリシー eci-profile を使用して、ACS クラスタ全体の DNS サービスをカスタマイズする場合。シナリオ 2:
ClusterFirstDNS ポリシーを使用し、セルフマネージド DNS サーバーを使用してイメージリポジトリのドメイン名を解決する場合。シナリオ 3:
DefaultDNS ポリシーを使用し、eci-profile を使用して ACS クラスタ全体の DNS サービスをカスタマイズする場合。さらに、セルフマネージド DNS サーバーを使用してイメージリポジトリのドメイン名を解決する場合。
この方法は、次のシナリオには適用できません。
Alibaba Cloud DNS が提供する DNS サーバーを使用して、アプリケーションとイメージリポジトリのドメイン名を解決する場合。この場合は、
DefaultDNS ポリシーを使用することをお勧めします。カスタム DNS サーバーは使用しないでください。セルフマネージド DNS サービスを使用してアプリケーションのドメイン名を解決し、Alibaba Cloud DNS が提供する DNS サーバーを使用してイメージリポジトリのドメイン名を解決する場合。この場合は、
NoneDNS ポリシーを使用し、ポッドスペックのdnsConfigフィールドを設定してセルフマネージド DNS サーバーを指定することをお勧めします。 詳細については、「シナリオ 2:ポッドの DNS 設定をカスタマイズする」をご参照ください。
構成の概要
次の例は、アノテーションを追加してカスタム DNS サーバーを指定する方法を示しています。ほとんどの場合、ポッドアノテーションの代わりに eci-profile を使用して、クラスタ全体の DNS サービスをカスタマイズします。
network.alibabacloud.com/custom-dnsconfig アノテーションをポッドの構成ファイルのメタデータに追加して、カスタム DNS サーバーを使用できます。このアノテーションの値は、{"servers":["20.1.xx.xx","30.1.xx.xx"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]} 形式で、これは標準の Kubernetes spec.dnsConfig 構造です。
次のセクションに構成を示します。
{
"servers": [
"20.1.xx.xx",
"30.1.xx.xx"
],
"searches": [
"xx.com",
"yy.com"
],
"options": [
"ndots:2",
"edns0"
]
}次の表に、フィールドの説明を示します。
キー | 値 | フィールド | タイプ | 例 | 説明 |
network.alibabacloud.com/custom-dnsconfig |
| servers | []String |
| DNS サーバーの IP アドレス。最大 2 つの IP アドレスを指定できます。上限を超える IP アドレスは自動的に無視されます。 また、システムは Alibaba Cloud DNS サーバーの IP アドレスをフィールド値に自動的に追加して、システムが想定どおりに動作するようにします。 |
searches | []String |
| 検索ドメイン。最大 32 の検索ドメインを指定できます。 不完全なドメイン名を入力した場合、システムは searches フィールドの値にあるドメイン名サフィックスを使用してドメイン名を補完してから、ドメイン名を解決しようとします。 | ||
options | []String |
| DNS 解決オプション。オプションは複数のキーと値のペアにすることができます。一般的に使用されるオプションは次のとおりです。
|
ビジネス要件に基づいて、ポッドの dnsPolicy フィールドを構成できます。たとえば、シナリオ 2 の要件を満たすには、dnsPolicy を ClusterFirst に設定する必要があります。
構成を変更した後にポッドが pending になり、内部エラーがスローされた場合は、構成を確認してください。
手順
次の例では、ステートレスアプリケーションを使用します。
deploy.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-acs-custom-dns name: acs-custom-dns namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-acs-custom-dns template: metadata: annotations: network.alibabacloud.com/custom-dnsconfig: '{"servers":["114.114.114.114","8.8.8.8"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}' labels: alibabacloud.com/acs: 'true' alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: default app: nginx-acs-custom-dns spec: containers: - image: 'mirrors-ssl.aliyuncs.com/nginx:stable-alpine' imagePullPolicy: Always name: nginx ports: - containerPort: 80 protocol: TCP dnsPolicy: Default次のコマンドを実行して、アプリケーションを作成します。
kubectl apply -f deploy.yaml次のコマンドを実行して、アプリケーションの DNS 構成をクエリします。
kubectl exec <pod name> cat /etc/resolv.conf予期される出力:
search xx.com yy.com nameserver 114.114.114.114 nameserver 8.8.8.8 nameserver 100.100.2.136 options ndots:6 edns