
外部ドメインの 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 を構成する方法の詳細な手順については、こちらをご覧ください。