Wie lösche ich den DNS-Cache für den GKE-Pool aus metadata.google.internal?

Wie lösche ich den DNS-Cache für den GKE-Pool aus metadata.google.internal?

Ich habe ein Problem, bei dem der DNS-Eintrag für eine externe Domäne kaputt gegangen ist. Die Art des Problems ist zu diesem Zeitpunkt unbekannt.

Diese Domäne wurde vom Kubernetes-Cluster-Pod in der Google Kubernetes Engine abgefragt, während der Eintrag defekt war. Das Problem besteht weiterhin (der Vorfall ereignete sich vor über 2 Monaten), wenn diese Domäne vom Cluster abgefragt wird.

Der Cluster-DNS-Resolver verwendet metadata.google.internal zur DNS-Auflösung und vom Cluster aus führen diese Abfragen mit Dig Folgendes aus:

dig problematic.external.domain @169.254.169.254
# does not resolve and takes over 2 seconds
dig problematic.external.domain  @1.1.1.1
# resolves correctly under 200ms

Das Erstellen einer neuen VM im selben Projekt und in derselben Zone löst die problematische Domäne korrekt auf. Dies betrifft nur den DNS-Resolver des aktiven Cluster-Metadatenservers.

Gibt es eine Möglichkeit, DNS-Caches zu leeren, oder gibt es andere Vorschläge?

Generell versuche ich, die Bearbeitung der DNS-Einstellungen im Cluster zu vermeiden und würde das Problem lieber auf andere Weise beheben.

Weitere Informationen bearbeiten: NodeLocal DNSCacheist bereits im Cluster aktiv und verweist auf diese Dokumentationhttps://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cachedas Problem ist der Metadaten-DNS-Server. Dieser Auszug aus der Liste der Vorteile:

DNS queries for external URLs (URLs that don't refer to cluster resources) are forwarded directly to the local Cloud DNS metadata server, bypassing kube-dns.

Das ist die IP 169.254.169.254

Antwort1

Obwohl es keine spezielle Möglichkeit gibt, den Metadatenserver von Cloud DNS zu leeren, hat jede Abfrage dennoch eine TTL, und GCE DNS respektiert diese meistens. Sie läuft nach einer bestimmten Zeit ab und der Cache wird ungültig.

Wenn das Problem jedoch beim Cache liegt, sollte es durch die Sperrung des GKE-Knotens mit kubectl cordon $NODENAMEeinem Befehl behoben werden.

Darüber hinaus können Sie GCE DNS umgehen, indem Sie eine Stub-DNS-Konfiguration angeben. Schauen Sie sich andieser Linkfür Details.

Antwort2

Das NodeLocal DNS-Cache-Add-on kann in Ihrem Fall beim Auflösen der genannten Domänen hilfreich sein, da es DNS-Abfragen für externe URLs unter Umgehung von Kube-DNS direkt an den lokalen Cloud-DNS-Metadatenserver weiterleitet und da Ihre Compute Engine-VM die genannten DNS (unter Verwendung des lokalen Cloud-DNS) auflösen kann, wäre Ihr Cluster dazu auch in der Lage.

Beziehen aufdiese Dokumentationfür detaillierte Anweisungen zum Konfigurieren von NodeLocal DNSCache auf einem GKE-Cluster.

verwandte Informationen