Warum sind DNS-Suchen von bestimmten Pods so langsam?
Beheben Sie langsame DNS-Lookups, die zu Verbindungsverzögerungen in Ihrem Cluster führen.
Bestimmte Container, die auf Alpine Linux basieren, wie z. B. NGINX, haben Probleme mit der Behandlung von DNS-Anfragen, die dazu führen können, dass sie keine gültigen DNS-Antworten verarbeiten. Ein kleiner Prozentsatz der DNS-Lookups von diesen Pods kann mehr als 5 Sekunden statt der üblichen weniger als 80 ms dauern. Wenn die für Ihre Anwendung eingestellte Zeitüberschreitung weniger als 5 Sekunden beträgt, können die DNS-Suchvorgänge eine Zeitüberschreitung verursachen.
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 anschließend 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 (AAAA-Datensatz) und eine IPv4 (A-Datensatz) Antwort fast zur gleichen Zeit zurückgegeben werden, kann eine der beiden Antworten nicht verarbeitet werden, was dazu führt, dass 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 Weisen 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
options single-request-reopenoderoptions single-requestin die Datei/etc/resolv.confdes Client-Pods ein. Verwenden Sie beispielsweise den folgendenpostStart-Befehl, um Ihrem Pod diese Optionen hinzuzufügen. Mit diesen Optionen wird der DNS-Client angewiesen, jeweils nur eine Anfrage (A oder AAAA) zu senden, um das Problem zu vermeiden, dass zwei Antworten fast gleichzeitig zurückkommen.
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- "/bin/echo 'options single-request-reopen' >> /etc/resolv.conf"