metadata.google.internal から GKE プールの DNS キャッシュをクリアするにはどうすればよいですか?

metadata.google.internal から GKE プールの DNS キャッシュをクリアするにはどうすればよいですか?

外部ドメインの DNS エントリが壊れるという問題が発生しています。 現時点での問題の性質は不明です。

そのドメインは、エントリが壊れている間に、Google Kubernetes Engine の Kubernetes クラスタ ポッドからクエリされました。クラスタからそのドメインをクエリすると、問題は解決しません (インシデントは 2 か月以上前に発生しました)。

クラスタ DNS リゾルバは、DNS 解決に metadata.google.internal を使用し、クラスタから dig を使用したこれらのクエリは次のようになります。

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

同じプロジェクトとゾーンに新しい VM を作成すると、問題のあるドメインが正しく解決されます。これは、アクティブなクラスター メタデータ サーバー DNS リゾルバーにのみ影響します。

DNS キャッシュをフラッシュする方法、または他の提案はありますか?

一般的に、私はクラスター内の DNS 設定の編集を避けようとしており、それを修正するには他の手段を希望しています。

詳細情報の編集: NodeLocal DNSCacheクラスター内ですでにアクティブであり、そのドキュメントを参照していますhttps://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache問題はメタデータ DNS サーバーです。メリット リストからの抜粋:

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.

IP 169.254.169.254 はどれですか

答え1

Cloud DNS のメタデータ サーバーをフラッシュする特定の方法はありませんが、各クエリには TTL があり、ほとんどの場合、GCE DNS はそれを尊重し、一定時間が経過すると期限切れになり、キャッシュが無効になります。

ただし、問題がキャッシュにある場合は、kubectl cordon $NODENAMEコマンドを使用して GKE ノードを遮断することで修正されるはずです。

さらに、スタブDNS設定を指定することでGCE DNSをバイパスすることができます。このリンク詳細については。

答え2

NodeLocal DNS キャッシュ アドオンは、外部 URL の DNS クエリを kube-dns をバイパスしてローカルのクラウド DNS メタデータ サーバーに直接転送するため、上記のドメインの解決に役立ちます。また、Compute Engine VM は上記の DNS を解決できるため (ローカルのクラウド DNS を使用)、クラスターでも同様に解決できます。

参照するこのドキュメントGKE クラスタで NodeLocal DNSCache を構成する方法の詳細な手順については、こちらをご覧ください。

関連情報