このトピックでは、Container Compute Service (ACS) クラスタ内の Pod の DNS ポリシーを dnsPolicy パラメータを使用して設定する方法について説明します。
背景情報
Kubernetes クラスタでの DNS 解決の仕組みの詳細については、DNS の概要 を参照してください。
ACK クラスタの CoreDNS はクラウド上にデプロイされます。クラスタは、kube-dns サービスを使用して CoreDNS を公開します。クラスタ内の DNS クエリは、CoreDNS Pod の設定で指定された DNS サーバーに送信されます。次のコマンドを実行して、kube-dns サービスに関する情報を照会できます。
kubectl get svc kube-dns -n kube-systemdnsPolicy パラメータを使用して Pod の DNS ポリシーを設定する
dnsPolicy パラメータを使用して、Pod の DNS ポリシーを設定できます。ACK クラスタは、次の DNS ポリシーをサポートしています。
ClusterFirst: このポリシーは、Pod が CoreDNS を使用してドメイン名を解決することを示します。これはデフォルトの DNS ポリシーです。/etc/resolv.confファイルには、CoreDNS によって提供される DNS サーバーのアドレス (kube-dns) が含まれています。None: このポリシーは、Pod がクラスタの DNS 設定を無視することを示します。dnsConfigパラメータを使用して DNS 設定をカスタマイズする必要があります。そうしないと、Pod はドメイン名を解決できません。Default: このポリシーは、Alibaba Cloud DNS を使用して DNS 解決を行います。ClusterFirstWithHostNet: ACK クラスタの Pod はホストネットワークをサポートしていません。したがって、ClusterFirstWithHostNetポリシーはClusterFirstポリシーと同等です。詳細については、Kubernetes アプリケーションの制限 を参照してください。
上記の DNS ポリシーを使用して、さまざまなシナリオのビジネス要件を満たすことができます。
シナリオ 1: ACK クラスタによって提供される CoreDNS を使用してドメイン名を解決する
このシナリオでは、DNS ポリシー設定に dnsPolicy: ClusterFirst を指定する必要があります。例:
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # サンプルイメージは参照用にのみ提供されています。使用する実際のイメージに置き換えてください。
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: ClusterFirstシナリオ 2: Pod の DNS 設定をカスタマイズする
カスタム DNS 設定を使用するには、DNS ポリシー設定に dnsPolicy: None を指定し、dnsConfig フィールドを追加します。例:
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # サンプルイメージは参照用にのみ提供されています。使用する実際のイメージに置き換えてください。
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: None
dnsConfig:
nameservers: ["169.254.xxx.xxx"]
searches:
- default.svc.cluster.local
- svc.cluster.local
- cluster.local
options:
- name: ndots
value: "2"次の表は、dnsConfig セクションのパラメータについて説明しています。
パラメータ | 説明 |
nameservers |
|
searches |
|
options |
|
詳細については、サービスと Pod の DNS を参照してください。
シナリオ 3: Alibaba Cloud DNS を使用して DNS 解決を行う
アプリケーション Pod が ACK クラスタにデプロイされた他のサービスにアクセスする必要がない場合は、DNS ポリシー設定に dnsPolicy: Default を指定できます。このシナリオでは、DNS 解決は Alibaba Cloud DNS によって実行され、CoreDNS は必要ありません。例:
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # サンプルイメージは参照用にのみ提供されています。使用する実際のイメージに置き換えてください。
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: Default参照
DNS 解決ポリシーとキャッシュポリシーの詳細については、DNS 解決ポリシーとキャッシュポリシー を参照してください。