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

Container Service for Kubernetes:DNS を使用したサービスディスカバリ

最終更新日:Nov 09, 2025

DNS (Domain Name System) 名前解決は、Serverless Kubernetes クラスターでサービスディスカバリを実装する方法の 1 つです。このトピックでは、Serverless Kubernetes クラスターで利用可能な DNS 名前解決の原則と DNS サービスディスカバリソリューションについて説明します。

インデックス

注意事項

  • Serverless Kubernetes クラスターの作成時に DNS サービスディスカバリコンポーネントを有効にしない場合、Pod はデフォルトで Virtual Private Cloud (VPC) が提供する DNS サーバーを使用して名前解決を行います。このモードでは、Kubernetes サービスのドメイン名を解決できません。

  • 既存の Serverless Kubernetes クラスターの場合、DNS サービスディスカバリソリューションを有効にしても、新しい Pod にのみ有効です。ソリューションを有効にする前に作成された Pod は、DNS 設定ファイルを切り替えません。これらの Pod を再作成して、新しい DNS サービスディスカバリソリューションを使用する必要があります。

  • マネージド CoreDNS コンポーネントは、セルフマネージド CoreDNS コンポーネントが廃止されるまで、徐々にセルフマネージド CoreDNS コンポーネントを置き換えます。セルフマネージド CoreDNS コンポーネントは、将来コンソールで利用できなくなる可能性があります。セルフマネージド CoreDNS コンポーネントを使用するには、チケットを送信してサポートを依頼してください。

Serverless Kubernetes クラスターでの DNS 名前解決の仕組み

Serverless Kubernetes クラスターで Pod が作成されると、/etc/resolv.conf ファイルにはデフォルトで次の内容が含まれます。このファイルは、DNS サーバー、検索ドメイン、およびその他のパラメーターを指定します。

# nameserver は、この Pod が使用する DNS サーバーの IP アドレスを示します。
nameserver 172.xx.x.xx
# search は、サービスがリクエストされたときに追加するドメイン名のサフィックスを示します。 次の例は、Pod が kube-system 名前空間にある場合のサフィックスを示しています。
search kube-system.svc.cluster.local svc.cluster.local cluster.local
# その他のパラメーター
options ndots:5

DNS 名前解決設定ファイルと Pod の DNSPolicy のフィールドの詳細については、「DNS の原則と設定」をご参照ください。

Serverless Kubernetes クラスター向けの DNS サービスディスカバリソリューション

DNS サービスディスカバリソリューション

説明

マネージド CoreDNS

推奨。Pod は、マネージド CoreDNS コンポーネントを使用して名前解決を行います。ACK Serverless は CoreDNS を作成および管理して、正常に実行されるようにします。CoreDNS のステータスを手動で O&M タスクを実行したり、監視したりする必要はありません。このソリューションは、クラスター内の Elastic Container Instance (ECI) リソースを消費しません。

セルフマネージド CoreDNS

Pod は、セルフマネージド CoreDNS コンポーネントを使用して名前解決を行います。CoreDNS を正しく設定し、そのレプリカのステータスを監視する必要があります。

PrivateZone

Pod は、PrivateZone コンポーネントを使用して名前解決を行います。ACK Serverless は、PrivateZone の DNS レコードを自動的に作成および更新します。

マネージド CoreDNS

マネージド CoreDNS コンポーネントは、kube-system 名前空間の kube-dns サービスのクラスター IP を介して DNS サービスを公開します。次のフローは、アプリケーション Pod がマネージド CoreDNS を使用する方法を示しています。

image.png

リンク

説明

1

クライアント Pod がアップストリームサービス (TargetService) にアクセスすると、まずローカルの DNS 名前解決設定ファイル (/etc/resolv.conf) から DNS サーバーアドレスを取得します。次に、そのアドレスに DNS クエリを送信して、TargetService の宛先 IP アドレスを検索します。

このソリューションでは、DNS サーバーアドレスは Serverless Kubernetes クラスターkube-system 名前空間にある kube-dns サービスの IP アドレスです。kube-dns クラスター IP のバックエンドは、Serverless Kubernetes クラスターによって動的に維持および更新されます。管理する必要はありません。

image.png

2

クライアント Pod がクラスター外のドメイン名をリクエストすると、マネージド CoreDNS はリクエストを VPC が提供する DNS サーバー (100.100.2.136 および 100.100.2.138) に転送して解決します。

3

クライアント Pod が DNS サーバーからアップストリームサービス (TargetService) の IP アドレスを取得した後、その IP アドレスにリクエストを送信します。

マネージド CoreDNS コンポーネントを有効にする

重要
  • マネージド CoreDNS コンポーネントを有効にすると、Serverless Kubernetes クラスターkube-system 名前空間に kube-dns という名前のサービスを自動的に作成します。このサービスは変更しないでください。

  • マネージド CoreDNS コンポーネントは展開中です。コンソールでマネージド CoreDNS コンポーネントが見つからない場合、そのコンポーネントは現在のリージョンではまだ利用できません。マネージド CoreDNS コンポーネントのカスタム設定機能も展開中です。この機能を使用するには、チケットを送信してサポートを依頼してください。

  • 方法 1: 新しい Serverless Kubernetes クラスターの場合、クラスターの作成時に DNS サービスディスカバリメソッドとしてマネージド CoreDNS を指定して、マネージド CoreDNS コンポーネントを有効にできます。

    image.png

  • 方法 2: 既存の Serverless Kubernetes クラスターの場合、クラスター管理ページに移動します。[運用管理] > [コンポーネント] を選択します。[ネットワーク] タブをクリックし、[マネージド CoreDNS] コンポーネントの [インストール] をクリックします。詳細については、「コンポーネントの管理」をご参照ください。

セルフマネージド CoreDNS

セルフマネージド CoreDNS は、DNS 名前解決を処理する Kubernetes クラスターのコンポーネントです。クラスター内のカスタムサービスドメイン名と外部ドメイン名を解決できます。セルフマネージド CoreDNS には豊富なプラグインセットがあり、クラスターレベルでカスタム DNS、カスタムホスト、CNAME ドメイン名 (CNAME)、および書き換えをサポートします。Kubernetes と同様に、CoreDNS プロジェクトは Cloud Native Computing Foundation (CNCF) によってホストされています。CNCF の詳細については、「CNCF」をご参照ください。CoreDNS の詳細については、「CoreDNS: DNS とサービスディスカバリ」をご参照ください。

セルフマネージド CoreDNS コンポーネントは、kube-system 名前空間の kube-dns サービスのクラスター IP を介して DNS サービスを公開します。次のフローは、アプリケーション Pod がセルフマネージド CoreDNS を使用する方法を示しています。

image.png

リンク

説明

1

クライアント Pod がアップストリームサービス (TargetService) にアクセスすると、まずローカルの DNS 名前解決設定ファイル (/etc/resolv.conf) から DNS サーバーアドレスを取得します。次に、そのアドレスに DNS クエリを送信して、TargetService の宛先 IP アドレスを検索します。

このソリューションでは、DNS サーバーアドレスは Serverless Kubernetes クラスターkube-system 名前空間にある kube-dns サービスの IP アドレスです。

image.png

2

クライアント Pod がクラスター外のドメイン名をリクエストすると、CoreDNS はリクエストを VPC が提供する DNS サーバー (100.100.2.136 および 100.100.2.138) に転送して解決します。

3

クライアント Pod が DNS サーバーからアップストリームサービス (TargetService) の IP アドレスを取得した後、その IP アドレスにリクエストを送信します。

セルフマネージド CoreDNS コンポーネントを有効にする

  • 方法 1: 新しい Serverless Kubernetes クラスターの場合、クラスターの作成時に DNS サービスディスカバリメソッドとして CoreDNS を指定して、セルフマネージド CoreDNS コンポーネントを有効にできます。

    image.png

  • 方法 2: 既存の Serverless Kubernetes クラスターの場合、クラスター管理ページに移動します。[運用管理] > [コンポーネント] を選択します。[ネットワーク] タブをクリックし、[CoreDNS] コンポーネントの [インストール] をクリックします。詳細については、「コンポーネントの管理」をご参照ください。

PrivateZone

PrivateZone は、Alibaba Cloud VPC 環境に基づくプライベートドメイン名前解決サービスです。PrivateZone コントローラーを使用して、ACK Serverless クラスターの各名前空間のサービスとエンドポイントをリアルタイムで監視できます。コントローラーは API サーバーと対話して、リソースのドメイン名を PrivateZone に自動的に同期します。ACK Serverless クラスターの Pod は、PrivateZone DNS サービスを使用して Kubernetes サービスディスカバリを実装できます。PrivateZone ソリューションの使用方法の詳細については、Serverless Kubernetes クラスターの「Alibaba Cloud DNS PrivateZone に基づくサービスディスカバリ」をご参照ください。

PrivateZone は、VPC が提供する DNS サーバー (100.100.2.136 および 100.100.2.138) を介して DNS サービスを公開します。次のフローは、アプリケーション Pod が PrivateZone を使用する方法を示しています。

image.png

リンク

説明

1

PrivateZone コントローラーは API サーバーに接続し、クラスター内のサービスの作成および更新イベントをリッスンします。

2

PrivateZone コントローラーがサービスの作成または更新イベントを検出すると、その情報を PrivateZone の権威ゾーンレコードに同期します。

3

クライアント Pod がアップストリームサービス (TargetService) にアクセスすると、まずローカルの DNS 名前解決設定ファイル (/etc/resolv.conf) から DNS サーバーアドレスを取得します。次に、そのアドレスに DNS クエリを送信して、TargetService の宛先 IP アドレスを検索します。

このソリューションでは、DNS サーバーアドレスは、DNS 名前解決設定ファイルで設定されている VPC が提供する DNS サーバーの IP アドレス (100.100.2.136 および 100.100.2.138) です。DNS サーバーは PrivateZone から正しい DNS レコードを取得し、クライアントに返します。

4

クライアント Pod が DNS サーバーからアップストリームサービス (TargetService) の IP アドレスを取得した後、その IP アドレスにリクエストを送信します。

PrivateZone コンポーネントを有効にする

  • 方法 1: 新しい Serverless Kubernetes クラスターの場合、クラスターの作成時に DNS サービスディスカバリメソッドとして PrivateZone を指定して、PrivateZone コンポーネントを有効にできます。

    image.png

  • 方法 2: 既存の Serverless Kubernetes クラスターの場合、eci-profile 設定項目で enablePrivateZone パラメーターを true に設定して、PrivateZone コンポーネントを有効にできます。

よくある質問

マネージド CoreDNS、セルフマネージド CoreDNS、または PrivateZone コンポーネントがクラスターで有効になっているかどうかを確認するにはどうすればよいですか?

  • マネージド CoreDNS およびセルフマネージド CoreDNS コンポーネント

    Container Service for Kubernetes コンソールにログインします。クラスター管理ページで、[運用管理] > [コンポーネント管理] を選択し、[ネットワーク] タブをクリックします。コンポーネントの右上隅に [インストール済み] ラベルが表示されている場合、マネージド CoreDNS またはセルフマネージド CoreDNS コンポーネントがクラスターで有効になっていることを示します。

    次の図は、マネージド CoreDNS コンポーネントの例を示しています。

    image.png

  • PrivateZone コンポーネント

    PrivateZone コンソールにログインします。[VPC にある権威ゾーン] タブで、クラスター ID で [ドメインゾーン] を検索します。名前がクラスター ID で終わるゾーンが見つかった場合、PrivateZone コンポーネントが有効になっていることを示します。

アプリケーション Pod がマネージド CoreDNS、セルフマネージド CoreDNS、または PrivateZone コンポーネントを使用しているかどうかを確認するにはどうすればよいですか?

  • マネージド CoreDNS およびセルフマネージド CoreDNS コンポーネント

    kubectl exec コマンドを実行して Pod に入ります。cat /etc/resolv.conf コマンドを実行します。nameserver フィールドが kube-system 名前空間の kube-dns サービスのクラスター IP アドレスに設定されている場合、Pod はマネージド CoreDNS またはセルフマネージド CoreDNS コンポーネントを使用しています。

  • PrivateZone コンポーネント

    kubectl exec コマンドを実行して Pod に入ります。cat /etc/resolv.conf コマンドを実行します。nameserver フィールドが 100.100.2.136100.100.2.138 に設定されている場合、Pod は PrivateZone コンポーネントを使用しています。この例の IP アドレスは参考用です。実際の IP アドレスを使用してください。

リファレンス