Azure Kubernetes Service (AKS) での DNS 解決

適用対象: ✔️ AKS 自動 ✔️ AKS Standard

ドメイン ネーム システム (DNS) 解決は Azure Kubernetes Service (AKS) の重要なコンポーネントであり、ポッドとサービスは IP アドレスではなく人間が判読できる名前を使用して通信できます。 AKS には、内部クラスター リソースと外部エンドポイントの両方にシームレスな名前解決を確保するための組み込みの DNS サービスが用意されています。 AKS での DNS のしくみを理解することは、クラスターオペレーターと開発者が信頼性の高い接続を確保し、パフォーマンスを最適化し、ネットワークの問題を効果的にトラブルシューティングするのに役立ちます。

AKS 自動は、ほとんどの AKS ワークロードに推奨される運用環境対応の既定値です。 AKS 自動クラスターは、DNS のパフォーマンスを向上させ、コントラックの負荷を軽減し、追加のセットアップを必要とせずに回復性を向上させるために、LocalDNS で事前構成されています。

AKS Standard では、LocalDNS は省略可能であり、個別に有効にして構成できます。

AKS Automatic の詳細については、「AKS Automatic とは」を参照してください。

Azure Kubernetes Service の CoreDNS

CoreDNS は、AKS の既定の DNS サービスです。 クラスターで実行されているワークロードの内部名前解決とサービス検出を提供します。 これは、 kube-system 名前空間内のポッドのセットとして動作し、Kubernetes ネットワークと緊密に統合されています。

AKS のポッドが別のサービスの名前の解決などの DNS クエリを発行すると、要求は CoreDNS ポッドに送信されます。 これらのポッドはクエリを処理し、適切な IP アドレスを返すか、外部ドメインのアップストリーム DNS サーバーに要求を転送します。

このアーキテクチャにより、マネージド環境での柔軟性と運用上の安全性のバランスが確保されます。 AKS で CoreDNS をカスタマイズする方法の詳細については、 CoreDNS カスタマイズ ガイドを参照してください。

CoreDNS プロジェクトについては、CoreDNS アップストリーム プロジェクト ページを参照してください。

Azure Kubernetes Service の LocalDNS

この記事では、LocalDNS の概要と AKS の利点について説明します。

AKS Automatic の場合、LocalDNS は事前構成されています。

AKS Standard については、LocalDNS の有効化と構成に関するガイダンスについては、 LocalDNS のハウツー ガイド を参照してください。

概要

LocalDNS は、Azure Kubernetes Service (AKS) の高度な機能であり、各ノードにドメイン ネーム システム (DNS) プロキシをデプロイして、回復性が高く待機時間の短い DNS 解決を提供します。 DNS クエリをローカルで処理することで、このプロキシは CoreDNS アドオン ポッドへのトラフィックを減らし、クラスターの全体的な DNS の信頼性とパフォーマンスを向上させます。 LocalDNS は、DNS クエリ ボリュームが多い大規模なクラスターや環境で特に役立ちます。一元化された DNS 解決がボトルネックになる可能性があります。

LocalDNS が有効になっている場合、AKS はローカル DNS キャッシュを各ノードに systemd サービスとしてデプロイします。 ノード上のポッドは DNS クエリをこのローカル キャッシュに送信し、ネットワーク ホップを減らすことで迅速な解決を可能にします。 この方法では、テーブル conntrack 使用も最小限に抑え、テーブル枯渇のリスクを低減します。 さらに、アップストリーム DNS が使用できなくなった場合、LocalDNS は構成可能な期間、キャッシュされた応答の提供を継続でき、ポッドの接続性とサービスの信頼性を維持するのに役立ちます。

LocalDNS アーキテクチャを示す図。

LocalDNS と AKS Automatic

AKS の自動構成では、運用対応の既定値の一部として LocalDNS が事前構成されます。 AKS 自動クラスターで別の enable コマンドを実行する必要はありません。

この記事では、LocalDNS のしくみと、それが AKS ワークロードの DNS 動作を向上させる理由を理解します。 AKS Standard の有効化と構成の手順が必要な場合は、 LocalDNS のハウツー ガイドを使用してください。

主要な機能

  • DNS 解決の待機時間の短縮: 各 AKS ノードは LocalDNS systemd サービスを実行します。 ノードで実行されているワークロードは、DNS クエリをこのサービスに送信します。これにより、ローカルで解決され、ネットワーク ホップが減り、DNS 参照が高速化されます。
  • カスタマイズ可能な DNS 動作: kubeDNSOverridesvnetDNSOverrides を使用して、クラスター内の DNS 動作を制御します。
  • conntrack の競合と conntrack テーブルの枯渇を避ける: ポッドは、新しい conntrack テーブル エントリを作成せずに、同じノード上の LocalDNS サービスに DNS クエリを送信します。 接続追跡をスキップすると、 conntrack の競合 が減り、ユーザー データグラム プロトコル (UDP) DNS エントリが conntrack テーブルでいっぱいにならないようにします。 この最適化により、 conntrack テーブルの枯渇と競合状態によって発生する接続の切断と拒否を防ぐことができます。
  • TCP にアップグレードされた接続: localdns キャッシュからクラスターの CoreDNS サービスへの接続では、伝送制御プロトコル (TCP) が使用されます。 TCP を使用すると、接続の再調整が可能になり、サーバーが接続を閉じるときに conntrack テーブル エントリが削除されます (既定の 30 秒のタイムアウトがある UDP 接続とは異なります)。 localdns サービスは引き続き UDP トラフィックをリッスンするため、アプリケーションは変更を必要としません。
  • キャッシュ: serveStale と Time to Live (TTL) 設定を使用して LocalDNS キャッシュ プラグインを構成できます。 アップストリームの DNS 停止中でも、DNS の回復性を実現するために、 serveStaleserveStaleDurationInSeconds、および cacheDurationInSeconds パラメーターを設定します。
  • プロトコル制御: ドメインごとに DNS クエリ プロトコル ( PreferUDPForceTCPなど) を設定します。 この柔軟性により、特定のドメインの DNS トラフィックを最適化したり、ネットワーク要件を満たしたりできます。

その他の利点と考慮事項

メリット 考慮事項
スケーラビリティの向上: 一元化された CoreDNS ポッドの負荷を軽減 最小限のリソース オーバーヘッド: 各ノードで少量の CPU とメモリを使用します
シームレスな統合: 既存のアプリケーション接続に変更を加える必要はありません 構成の変更: 更新にはノード イメージのアップグレードが必要です。これにより、一時的な中断が発生する可能性があります
無効な検索ドメインをブロックする: ノード レベルで無効な DNS クエリを防止します 可用性計画: AKS Standard を使用する Teams は、DNS のパフォーマンスと回復性が LocalDNS の有効化を正当化するかどうかを評価する必要があります

AKS の自動動作と AKS 標準動作

クラスター モード LocalDNS の動作
AKS Automatic 事前設定済み
AKS Standard Optional

LocalDNS を使用すると、ワークロードに対する DNS 解決の高速化と信頼性の向上、DNS 関連の停止のリスクの軽減、AKS 環境内の DNS トラフィックの制御の強化を実現できます。