特定のポッドからの 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"