セルフマネージド DNS サービスを使用してイメージ リポジトリや他のアプリケーションのドメイン名を解決するには、ACS ポッドの DNS 構成でカスタム DNS サーバーを指定できます。このトピックでは、ACS クラスタ内のポッドのカスタム DNS サーバーを構成する方法について説明します。
シナリオ
次のシナリオでは、注釈を追加してカスタム DNS サーバーを構成できます。
シナリオ 1:
DefaultDNS ポリシーを使用して、acs-profile を使用して ACS クラスタ全体の DNS サービスをカスタマイズする場合。シナリオ 2:
ClusterFirstDNS ポリシーを使用し、セルフマネージド DNS サーバーを使用してイメージ リポジトリのドメイン名を解決する場合。シナリオ 3:
DefaultDNS ポリシーを使用し、acs-profile を使用して ACS クラスタ全体の DNS サービスをカスタマイズする場合。さらに、セルフマネージド DNS サーバーを使用してイメージ リポジトリのドメイン名を解決する場合。
この方法は、次のシナリオには適用できません。
Alibaba Cloud DNS が提供する DNS サーバーを使用して、アプリケーションとイメージ リポジトリのドメイン名を解決する場合。この場合は、
DefaultDNS ポリシーを使用することをお勧めします。カスタム DNS サーバーは使用しないでください。セルフマネージド DNS サービスを使用してアプリケーションのドメイン名を解決し、Alibaba Cloud DNS が提供する DNS サーバーを使用してイメージ リポジトリのドメイン名を解決する場合。この場合は、
NoneDNS ポリシーを使用し、ポッドの仕様でdnsConfigフィールドを設定してセルフマネージド DNS サーバーを指定することをお勧めします。 詳細については、「シナリオ 2:ポッドの DNS 設定をカスタマイズする」をご参照ください。
構成の概要
次の例は、注釈を追加してカスタム DNS サーバーを指定する方法を示しています。ほとんどの場合、ポッドの注釈ではなく acs-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: test name: test-default spec: replicas: 1 selector: matchLabels: app: test template: metadata: annotations: network.alibabacloud.com/custom-dnsconfig: '{"servers":["20.1.XXX.XXX","30.1.X.X"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}' labels: app: test spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2 command: ["sh","-c","i=1; while true; do echo $i; i=$((i=i+1)); sleep 1; done;"] name: busybox resources: requests: cpu: "2" memory: "8Gi" limits: cpu: "2" memory: "8Gi" dnsPolicy: Defaultアプリケーションをデプロイします。
kubectl apply -f deploy.yaml結果を確認します。
kubectl exec <pod name> cat /etc/resolv.conf予期される結果:
search xx.com yy.com nameserver 20.1.XXX.XXX nameserver 30.1.XXX.XXX nameserver 100.100.2.136 options ndots:6 edns
クラスタ構成
acs-profile でポッドの自動注入を構成して、クラスタ全体の DNS 解決をカスタマイズできます。 次のコードブロックは、デフォルトの名前空間のすべてのポッドにカスタム DNS 構成を自動的に注入する acs-profile の内容を示しています。 acs-profile を適用した後、ポッドの注釈を追加する必要はありません。 dnsPolicy を Default に設定するだけで済みます。 acs-profile の詳細については、「acs-profile を構成してポッド構成を自動的に挿入する」をご参照ください。
apiVersion: v1
kind: ConfigMap
metadata:
name: acs-profile
namespace: kube-system
data:
selectors: |
[
{
"name": "selector-demo1",
"namespaceSelector": {
"matchLabels": {
"kubernetes.io/metadata.name": "default"
}
},
"effect": {
"annotations": {
"network.alibabacloud.com/custom-dnsconfig": "{\"servers\":[\"20.1.XXX.XXX\",\"30.1.X.X\"],\"searches\":[\"xx.com\",\"yy.com\"],\"options\":[\"ndots:2\",\"edns0\"]}"
}
}
}
]