ハイブリッドクラウドのノードプール内のノードが、クラスター内の CoreDNS サービスを使用してドメイン名を解決すると、頻繁なクエリによって専用線接続の負荷が増加する可能性があります。不安定な専用線は、DNS 名前解決の失敗を引き起こす可能性もあります。これらの問題を軽減するには、NodeLocal DNSCache を構成します。
仕組み
NodeLocal DNSCache は、各ノードで DaemonSet として DNS キャッシュエージェントを実行します。ノード上の Pod からの DNS リクエストは、まずローカルキャッシュによって処理されます。キャッシュミスの場合にのみ、リクエストは専用線接続を介してクラウドで実行されているアップストリームの CoreDNS サービスに転送されます。このアーキテクチャには、主に 2 つの利点があります。
トラフィックの削減: ほとんどの DNS クエリはローカルで完了します。これにより、専用線のトラフィック負荷が軽減されます。
回復性の向上: 専用線接続で障害が発生した場合でも、すでにキャッシュされているドメイン名の DNS 名前解決は影響を受けません。
ドメインが初めて解決されるとき、NodeLocal DNSCache はアップストリームの CoreDNS サーバーにクエリを送信する必要があります。この最初のクエリ中に専用線が不安定な場合、DNS 名前解決は失敗します。
専用線接続の停止中、キャッシュされたデータはリアルタイムで更新できません。
前提条件
Kubernetes 1.33 以降を実行している ACK マネージドプロクラスター があること。
クラスターが存在する VPC (仮想プライベートクラウド) が クラウド間ネットワーク接続 を確立していること。
ハイブリッドクラウドノードプール用の ACK 管理アドオンをデプロイするために、クラスター内に Elastic Compute Service (ECS) ノードがあること。高可用性 (HA) を確保するには、少なくとも 3 つの ECS ノードを使用してください。
Terway Hybrid ネットワークプラグイン がクラスターにインストールされていること。
手順
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[ネットワーク] タブで、[ACK NodeLocal DNSCache] カードを見つけて [インストール] をクリックします。表示されるダイアログボックスで、[OK] をクリックします。
インストールが完了したら、左側のナビゲーションウィンドウで を選択し、ドロップダウンリストから [kube-system] 名前空間を選択します。
node-local-dnsConfigMap を見つけて編集します。cacheセクションにprefetchオプションとserve_staleオプションを追加して、キャッシュのプリフェッチと古いエントリの提供を有効にします。将来 NodeLocal DNSCache アドオンを更新すると、この構成は上書きされるため、再適用する必要があります。
apiVersion: v1 data: Corefile: | .:53 { errors cache { ... prefetch 1 30s 10% # プリフェッチ serve_stale 1h immediate # 古いデータを提供 } ... } kind: ConfigMap metadata: ...prefetch 1 30 s 10%: この構成により、キャッシュのプリフェッチが有効になります。キャッシュされたエントリが 30 秒以内に複数回リクエストされた場合、その Time to Live (TTL) の最後の 10% に入ると、キャッシュはバックグラウンドで自動的にリフレッシュを開始します。serve_stale 1 h immediate: これは、古い (期限切れの) キャッシュエントリを提供するための動作を構成します。キャッシュの有効期限が切れてから最大 1 時間、期限切れのキャッシュエントリをドメイン名解決に引き続き使用できます。期限切れキャッシュのリフレッシュポリシーはimmediateです。これは、リクエストが期限切れのキャッシュエントリにヒットした場合、期限切れのエントリがすぐにクライアントに返されると同時に、更新されたレコードのリクエストがアップストリームの DNS サーバーに送信されることを意味します。