IBM Cloud Docs
Warum sind DNS-Suchen von bestimmten Pods so langsam?

Warum sind DNS-Suchen von bestimmten Pods so langsam?

Bestimmte Container, die auf Alpine Linuxbasieren, wie z. B. NGINX, haben Probleme bei der Behandlung von DNS-Abfragen, die dazu führen können, dass sie keine gültigen DNS-Antworten verarbeiten. Ein kleiner Prozentsatz der DNS-Suchen aus diesen Pods kann über 5 Sekunden dauern, anstatt die typischen <80mszu verwenden. Wenn das für Ihre Anwendung festgelegte Zeitlimit weniger als 5 Sekunden beträgt, können die DNS-Suchen das Zeitlimit überschreiten.

Um zu testen, ob Ihr Pod dieses Problem aufweist, melden Sie sich bei ihm an und überprüfen Sie, ob 'curl ' installiert ist. Sie können curl mit dem Befehl apk add curl installieren. Führen Sie dann innerhalb des Pods den folgenden Befehl aus.

for i in $(seq 1 50); do curl -k -w "time_namelookup: %{time_namelookup}\n" -so /dev/null "https://www.ibm.com/"; done

Dieses Problem kann durch die Art und Weise verursacht werden, wie DNS-Antworten in diesen Pods behandelt werden. Wenn beispielsweise eine IPv6-Antwort (AAAA-Datensatz) und eine IPv4-Antwort (A-Datensatz) nahezu gleichzeitig zurückgegeben werden, wird eine der beiden Antworten möglicherweise nicht verarbeitet, sodass der DNS-Client die Antwort nicht registriert. Nach einer Verzögerung von 5 Sekunden sendet der DNS-Client eine neue Anforderung.

Sie können dieses Problem auf eine der folgenden Arten beheben.

  • (Bevorzugt) Verwenden Sie ein Basisimage für Ihren Container, das dieses Problem nicht aufweist, wie z. B. Alpine 3.18. Sie können auch Alpine durch ubi-minimalersetzen.
  • Fügen Sie die Optionen options single-request-reopen oder options single-request zur /etc/resolv.conf-Datei des Client-Pods hinzu. Verwenden Sie beispielsweise den folgenden postStart-Befehl, um Ihrem Pod diese Optionen hinzuzufügen. Diese Optionen weisen den DNS-Client an, nur jeweils eine Anforderung (A oder AAAA) zu senden, und vermeiden das Problem, dass zwei Antworten nahezu gleichzeitig zurückgegeben werden.
  lifecycle:
  postStart:
    exec:
      command:
      - /bin/sh
      - -c
      - "/bin/echo 'options single-request-reopen' >> /etc/resolv.conf"