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

Container Service for Kubernetes:DNS for Serviceディスカバリ

最終更新日:Dec 14, 2024

ドメインネームシステム (DNS) 解決は、ACKサーバーレスクラスタでのサービス検出に使用される方法の1つです。 このトピックでは、ACKサーバーレスクラスターでのDNS解決と、ACKサーバーレスクラスターでサポートされるDNSベースのサービス検出コンポーネントについて説明します。

目次

使用上の注意

  • ACKサーバーレスクラスターの作成時にDNSベースのサービス検出コンポーネントを有効にしない場合、クラスター内のポッドはVirtual Private Cloud (VPC) が提供するDNSサーバーを使用してドメイン名を解決します。 この場合、クラスター内のサービスのドメイン名は解決できません。

  • 既存のACKサーバーレスクラスターに対してDNSベースのサービス検出コンポーネントを有効にした場合、クラスター内の既存のポッドはそのコンポーネントを使用できません。 DNSベースのサービス検出コンポーネントを使用できるように、既存のポッドを再作成する必要があります。

  • マネージCoreDNSコンポーネントは、非マネージCoreDNSコンポーネントを置き換えます。これは、ACKコンソールから削除されます。 非マネージドCoreDNSコンポーネントを使用する場合は、

    チケットを起票してサポートセンターにお問い合わせくださいしてサポートセンターにお問い合わせください。

ACKサーバーレスクラスターでのDNS解決の仕組み

次のコードブロックは、ACKサーバーレスクラスターにポッドを作成するときの /etc/resolv.confファイルのデフォルトの内容を示しています。 このファイルは、DNSサーバー、検索ドメイン、およびその他のパラメーターを指定します。

# nameserverパラメーターには、ポッドで使用されるDNSサーバーのIPアドレスを指定します。 
ネームサーバー172.xx. x.xx
# searchパラメーターには、アクセスするサービスに追加される検索ドメインのサフィックスを指定します。 ポッドがkube-system名前空間に属している場合、次の検索ドメインサフィックスが使用されます。svc.cluster.local cluster.local kube-system.svc.cluster.local検索
# その他のパラメータ
オプションndots:5 

DNS設定ファイルとポッドのDNSポリシーの詳細については、「DNSポリシーとドメイン名解決」をご参照ください。

DNSベースのサービス検出コンポーネントACK Serverless cluster s

コンポーネント

説明

マネージドCoreDNS

このコンポーネントを使用することを推奨します。 ポッドはマネージドCoreDNSを使用してドメイン名を解決します。 CoreDNSポッドは、ACKサーバーレスによって作成および管理されます。 したがって、マネージドCoreDNSは完全にO&Mフリーです。 このコンポーネントは、エラスティックコンテナインスタンスでは実行されません。

非マネージドCoreDNS

ポッドは、管理対象外のCoreDNSを使用してドメイン名を解決します。 コンポーネントを適切に構成し、CoreDNSポッドが期待どおりに実行されるようにする必要があります。

PrivateZone

ポッドはAlibaba Cloud DNS PrivateZoneを使用してドメイン名を解決します。 ACK Serverlessは、Alibaba Cloud DNS PrivateZoneでDNSレコードを自動的に作成および更新します。

マネージドCoreDNS

マネージドCoreDNSは、kube-system名前空間のkube-dns ServiceのクラスターIPアドレスを使用して公開されます。 次の図は、クライアントポッドがマネージCoreDNSを使用する方法を示しています。

image.png

リンク

説明

クライアントポッドがアップストリームサービスにアクセスすると、クライアントポッドはローカルDNS構成ファイル /etc/resolv.confからDNSサーバーのIPアドレスを取得します。 次に、クライアントポッドはDNSクエリをDNSサーバーに送信して、アップストリームサービスのIPアドレスを照会します。

この例では、DNSサーバーのIPアドレスは、ACKサーバーレスクラスターkube-system名前空間のkube-dns ServiceのクラスターIPアドレスです。 kube-dnsサービスのクラスターIPアドレスに関連付けられたバックエンドポッドは、ACKサーバーレスクラスターによって維持および更新されます。

image.png

クライアントポッドが外部ドメイン名にアクセスすると、マネージドCoreDNSはDNSクエリをDNSサーバー100.100.2.136および100.100.2.138に転送します。 DNSサーバーは、クラスターのVPCによって提供されます。

クライアントポッドがDNSサーバーからアップストリームサービスのIPアドレスを取得すると、クライアントポッドはそのIPアドレスにリクエストを送信します。

マネージCoreDNSの有効化

重要
  • マネージドCoreDNSを有効にすると、ACKサーバーレスクラスターは、kube-system名前空間にkube-dnsという名前のClusterIPタイプのサービスを自動的に作成します。 手動でサービスを変更しないでください。

  • Managed CoreDNSは特定のリージョンで使用できます。 ACKコンソールでコンポーネントが見つからない場合、選択したリージョンでコンポーネントを使用できません。 マネージドCoreDNSの設定をカスタマイズできます。 この機能を使用するには、

    チケットを起票してサポートセンターにお問い合わせくださいしてサポートセンターにお問い合わせください。

  • 方法1: 新しいACKサーバーレスクラスターのマネージドCoreDNSを有効にするには、クラスターを作成するときにサービスディスカバリーパラメーターにCoreDNS (managed) を選択します。

    image.png

  • 方法2: 既存のACKサーバーレスクラスターのマネージドCoreDNSを有効にするには、[操作]> [アドオン] を選択します。 [アドオン] ページで、[ネットワーク] タブをクリックします。 次に、CoreDNS (Managed) セクションの [インストール] をクリックします。 詳細については、「コンポーネントの管理」をご参照ください。

非マネージドCoreDNS

Non-managed CoreDNSは、Kubernetesクラスター用のDNSリゾルバーです。 非マネージドCoreDNSは、カスタムの内部ドメイン名と外部ドメイン名を解決できます。 管理対象外のCoreDNSには、KubernetesクラスターのDNS設定、ホストレコード、Canonical Name (CNAME) レコード、書き換えルールをカスタマイズするために使用できるさまざまなプラグインが用意されています。 CoreDNSプロジェクトは、KubernetesもホストするCloud Native Computing Foundation (CNCF) によってホストされています。 詳細については、「CNCF」をご参照ください。 CoreDNSの詳細については、「CoreDNS: DNSとサービスの検出」をご参照ください。

管理対象外のCoreDNSは、kube-system名前空間のkube-dns ServiceのクラスターIPアドレスを使用して公開されます。 次の図は、クライアントポッドが管理対象外のCoreDNSを使用する方法を示しています。

image.png

リンク

説明

クライアントポッドがアップストリームサービスにアクセスすると、クライアントポッドはローカルDNS構成ファイル /etc/resolv.confからDNSサーバーのIPアドレスを取得します。 次に、クライアントポッドはDNSクエリをDNSサーバーに送信して、アップストリームサービスのIPアドレスを照会します。

この例では、DNSサーバーのIPアドレスは、ACKサーバーレスクラスターkube-system名前空間のkube-dns ServiceのクラスターIPアドレスです。

image.png

クライアントポッドが外部ドメイン名にアクセスすると、CoreDNSはDNSクエリをDNSサーバー100.100.2.136および100.100.2.138に転送します。 DNSサーバーは、クラスターのVPCによって提供されます。

クライアントポッドがDNSサーバーからアップストリームサービスのIPアドレスを取得すると、クライアントポッドはそのIPアドレスにリクエストを送信します。

非マネージドCoreDNSの有効化

  • 方法1: 新しいACKサーバーレスクラスターに対して管理対象外のCoreDNSを有効にするには、クラスターを作成するときにサービスディスカバリーパラメーターにCoreDNSを選択します。

    image.png

  • 方法2: 既存のACKサーバーレスクラスターに対して管理対象外のCoreDNSを有効にするには、[操作]> [アドオン] を選択します。 [アドオン] ページで、[ネットワーク] タブをクリックします。 次に、CoreDNSセクションの [インストール] をクリックします。 詳細については、「コンポーネントの管理」をご参照ください。

プライベートゾーン

Alibaba Cloud DNS PrivateZoneは、VPCベースのAlibaba Cloudプライベートドメイン名解決および管理サービスです。 Alibaba Cloud DNS PrivateZoneは、ACKサーバーレスクラスターの各名前空間のサービスとエンドポイントを動的に監視できます。 Alibaba Cloud DNS PrivateZoneは、APIサーバーと対話することにより、リソースのドメイン名を自動的に同期します。 ACKサーバーレスクラスターのポッドは、Alibaba Cloud DNS PrivateZoneを使用して、Kubernetesでのサービス検出のドメイン名を解決します。 Alibaba Cloud DNS PrivateZoneの使用方法の詳細については、「ACKサーバーレスクラスターAlibaba Cloud DNS PrivateZoneに基づくサービス検出の有効化」をご参照ください。

Alibaba Cloud DNS PrivateZoneは、クラスターのVPCが提供するDNSサーバー (100.100.2.136および100.100.2.138) を使用して解決サービスを提供します。 次の図は、クライアントポッドがAlibaba Cloud DNS PrivateZoneを使用する方法を示しています。

image.png

リンク

説明

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

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

クライアントポッドがアップストリームサービスにアクセスすると、クライアントポッドはローカルDNS構成ファイル /etc/resolv.confからDNSサーバーのIPアドレスを取得します。 次に、クライアントポッドはDNSクエリをDNSサーバーに送信して、アップストリームサービスのIPアドレスを照会します。

この例では、DNSサーバーはクラスターのVPCによって提供されます。 DNSサーバーのIPアドレスは100.100.2.136と100.100.2.138です。 DNSサーバーは、Alibaba Cloud DNS PrivateZoneからアップストリームサービスのIPアドレスを取得し、そのIPアドレスをクライアントポッドに返します。

クライアントポッドがDNSサーバーからアップストリームサービスのIPアドレスを取得すると、クライアントはそのIPアドレスにリクエストを送信します。

Alibaba Cloud DNS PrivateZoneコンポーネントの有効化

  • 方法1: 新しいACKサーバーレスクラスターのコンポーネントを有効にするには、クラスターを作成するときに [サービス検出] パラメーターとして [PrivateZone] を選択します。

    image.png

  • 方法2: 既存のACKサーバーレスクラスターのコンポーネントを有効にするには、eci-profile ConfigMapのenablePrivateZoneパラメーターをtrueに設定します。

よくある質問

クラスターに対してマネージドCoreDNS、非マネージドCoreDNS、またはAlibaba Cloud DNS PrivateZoneが有効になっているかどうかを確認するにはどうすればよいですか

  • マネージドCoreDNSおよび非マネージドCoreDNS

    ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[操作]> [アドオン] を選択します。 [アドオン] ページで、[ネットワーク] タブをクリックします。 CoreDNS (管理) カードまたはCoreDNSカードの右上隅にインストール済みが表示されている場合、コンポーネントはクラスターに対して有効になります。

    次の図は、マネージドCoreDNSが有効になっていることを示しています。

    image.png

  • Alibaba Cloud DNS PrivateZone

    Alibaba Cloud DNS PrivateZoneコンソールにログインし、ACKサーバーレスクラスターのVPCのIDを使用して権限ゾーンを検索します。 名前がクラスターIDで終わるゾーンが存在する場合、Alibaba Cloud DNS PrivateZoneは有効になります。

クライアントポッドがマネージドCoreDNS、非マネージドCoreDNS、またはAlibaba Cloud DNS PrivateZoneを使用するかどうかを確認するにはどうすればよいですか

  • マネージドCoreDNSと非マネージドCoreDNS

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

  • Alibaba Cloud DNS PrivateZone

    kubectl execコマンドを実行してポッドにアクセスします。 次に、cat /etc/resolv.confコマンドを実行します。 名前サーバーフィールドに100.100.2.136100.100.2.138が表示される場合、ポッドはAlibaba Cloud DNS PrivateZoneを使用します。 このトピックで提供されているIPアドレスは参照用です。

関連ドキュメント