このトピックでは、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を使用します。
解決策
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
CoreDNSコンポーネントは、[アドオン] ページから更新できます。
利用可能な更新がないことをページが示している場合は、次のステップに進みます。 それ以外の場合は、ステップ3を実行します。 CoreDNSコンポーネントを更新する方法の詳細については、「コンポーネントの管理」をご参照ください。
kubectlを使用して次のコマンドを実行し、CoreDNSを再起動します。
kubectl -n kube-system rollout restart deployment coredns
重要再起動プロセス中にDNS解決エラーが発生することがあります。 詳細については、「IPVSの欠陥による時折のDNS解決タイムアウトの悪影響を減らす」をご参照ください。
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
}