すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:DNS ポリシーとドメイン名解決

最終更新日:Dec 27, 2024

このトピックでは、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-system

dnsPolicy パラメータを使用して 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

  • Pod の DNS サーバーの IP アドレスのリスト。最大 3 つの IP アドレスを指定できます。

  • Pod の dnsPolicy を None に設定した場合、少なくとも 1 つの IP アドレスを指定する必要があります。Pod の dnsPolicy を None に設定しない場合、このパラメータはオプションです。

  • リストされた DNS サーバーの IP アドレスは、dnsPolicy の値に基づいて生成される DNS 設定ファイルの nameserver パラメータに追加されます。重複する IP アドレスは削除されます。

searches

  • Pod 内のホスト名ルックアップ用の DNS 検索ドメインのリスト。このパラメータはオプションです。

  • リストされた DNS 検索ドメインは、指定された DNS ポリシーに基づいて生成されるベース検索ドメインのリストに追加されます。重複するドメイン名は削除されます。

  • 最大 6 つの検索ドメインを指定できます。

options

  • オプション項目のリスト。各項目には、name (必須) と value (オプション) を含めることができます。

  • 指定された項目は、指定された DNS ポリシーに基づいて生成されるオプション項目のリストに追加されます。重複する項目は削除されます。

詳細については、サービスと 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 解決ポリシーとキャッシュポリシー を参照してください。