特定のポッドからの DNS ルックアップがそれほど遅くなるのはなぜですか?
クラスター内の接続遅延の原因となる、DNS 検索の遅延のトラブルシューティングを行います。
NGINX など、 Alpine Linux をベースとする一部のコンテナでは、DNS クエリの処理に問題があり、有効な DNS 応答を処理できないことがある。 これらのポッドからのDNSルックアップのごく一部は、通常の80ミリ秒未満ではなく、5秒以上かかることがあります。アプリケーションに設定されているタイムアウトが5秒未満の場合、DNSルックアップがタイムアウトする可能性があります。
ポッドにこの問題があるかどうかをテストするには、ポッドにログインして、curl がインストールされていることを確認します。 apk add curl コマンドを使用して curl をインストールできます。 次に、ポッド内で次のコマンドを実行してください。
for i in $(seq 1 50); do curl -k -w "time_namelookup: %{time_namelookup}\n" -so /dev/null "https://www.ibm.com/"; done
この問題は、これらのポッドで DNS 応答が処理される方法が原因である可能性があります。 例えば、 IPv6 (AAAAレコード)と IPv4 (Aレコード)の応答がほぼ同時に返された場合、2つの応答のうち1つが処理されず、DNSクライアントが応答を登録しない可能性がある。 5 秒の遅延の後、DNS クライアントは新しい要求を送信します。
この問題は、以下のいずれかの方法で解決できます。
- (推奨) この問題が発生していないコンテナーの基本イメージ ( Alpine 3.18など) を使用します。 Alpine を ubi-minimalに置き換えることもできます。
options single-request-reopenまたはoptions single-requestをクライアント・ポッドの/etc/resolv.confファイルに追加する。 例えば、以下のpostStartコマンドを使用して、これらのオプションをポッドに追加します。 これらのオプションは、DNSクライアントに一度に1つのリクエスト(AまたはAAAA)だけを送信するように指示し、2つのレスポンスがほぼ同時に戻ってくる問題を回避する。
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- "/bin/echo 'options single-request-reopen' >> /etc/resolv.conf"