すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:DNS FAQ

最終更新日:Nov 12, 2024

このトピックでは、Container Service for Kubernetes (ACK) クラスターのドメインネームシステム (DNS) 解決に関するよくある質問に対する回答を提供します。

execコマンドを実行してCoreDNSポッドにアクセスできない場合はどうすればよいですか?

問題

kubectl -n kube-system exec -it {CoreDNS pod} bashコマンドなどを実行して、corednsポッドにアクセスすることはできません。

原因

CoreDNSポッドで使用されるコンテナーイメージはScratchを使用してビルドされ、シェルはありません。

解決策

nsenterコマンドを実行して、CoreDNSポッドが属する名前空間を入力します。 詳細については、「CoreDNSポッドのネットワーク接続の診断」をご参照ください。 CoreDNSのログを収集して分析することで、CoreDNSを監視できます。 詳細については、「CoreDNSログの収集と分析」をご参照ください。

CoreDNSが非推奨APIを使用するのはなぜですか?

問題

クラスター更新の事前チェックの結果は、ユーザーエージェントがcorednsであるクライアントが、廃止されたKubernetes API discovery.k8s.io/v1beta1を使用していることを示しています。 APIのエンドポイントは /apis/discovery.k8s.io/v1beta1です。

原因

CoreDNSは、discovery.k8s.io/v1beta1 APIを使用してAPIサーバーに接続します。 ただし、使用するクラスターバージョンでは、APIは非推奨であるか、非推奨になります。 この問題は、次のシナリオで発生します。

  • 以前のCoreDNSバージョンがクラスターにインストールされています。 現在のバージョンではdiscovery.k8s.io/v1beta1 APIがサポートされていないため、CoreDNSはdiscovery.k8s.io/v1beta1 APIを使用します。

  • CoreDNSとKubernetesのバージョンは最新です。 ただし、CoreDNSは1.20などの以前のKubernetesバージョンで起動され、ACKがCoreDNSポッドを起動するとdiscovery.k8s.io/v1beta1 APIが選択されます。 その後、クラスターはKubernetesバージョンに更新され、discovery.k8s.io/v1beta1 APIは廃止されますが、CoreDNSは廃止されたAPIを使用します。

解決策

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  3. CoreDNSコンポーネントは、[アドオン] ページから更新できます。

    利用可能な更新がないことをページが示している場合は、次のステップに進みます。 それ以外の場合は、ステップ3を実行します。 CoreDNSコンポーネントを更新する方法の詳細については、「コンポーネントの管理」をご参照ください。

  4. kubectlを使用して次のコマンドを実行し、CoreDNSを再起動します。

    kubectl -n kube-system rollout restart deployment coredns
    重要

    再起動プロセス中にDNS解決エラーが発生することがあります。 詳細については、「IPVSの欠陥による時折のDNS解決タイムアウトの悪影響を減らす」をご参照ください。

  5. CoreDNSを更新または再起動した後、kubectlを使用して次のコマンドを実行し、CoreDNSポッドのステータスを照会します。

    kubectl -n kube-system get pod -l k8s-app=kube-dns

    CoreDNSポッドが再作成され、[実行中] 状態の場合、事前チェックページで非推奨のAPIの使用に関連するチェック項目を無視して、クラスターを更新し続けることができます。

CoreDNSログにエラーメッセージdns: buffer size too smallが表示された場合はどうすればよいですか?

問題

kubectl -n kube-system logs {coredns pod} コマンドを実行してCoreDNSポッドのログを照会すると、エラーメッセージdns: buffer size too smallが表示されます。

発生原因

CoreDNSのデフォルトのバッファサイズ (bufsize) は1232バイトです。これにより、KubernetesポッドのDNSクエリのUDPパケットの最大サイズは1232バイトに制限されます。 DNSクエリ応答がこの制限を超えると、DNS解決が失敗し、特に応答データが大きい場合はクエリ結果が取得されません。 詳細については、「issue」をご参照ください。

ソリューション

CoreDNSをv1.7.1以降にアップグレードします。 CoreDNSバージョンがv1.7.1より前の場合、kubectl edit cm -n kube-system corednsコマンドを使用してバッファサイズを設定できます。 bufsizeは [512, 4096] の範囲でなければなりません。 詳細については、「CoreDNSドキュメント」をご参照ください。

. {
    bufsize 1220
    log
}