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

Container Service for Kubernetes:DNS に関するよくある質問

最終更新日:Mar 25, 2026

このトピックでは、Container Service for Kubernetes (ACK) クラスターにおける DNS (Domain Name System) に関する一般的な質問に回答します。

CoreDNS Pod で exec が失敗する原因

症状

CoreDNS Pod に入るために、kubectl -n kube-system exec -it {coredns-pod-name} bash コマンドまたは類似のコマンドを使用できません。

原因

CoreDNS のコンテナイメージは Scratch 上に構築されており、シェル環境がありません。

解決策

nsenter を使用して、CoreDNS Pod のコンテナネットワーク環境にアクセスできます。詳細については、「CoreDNS Pod のネットワーク接続の確認」をご参照ください。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 はご利用のクラスターバージョンで非推奨であるか、まもなく非推奨になります。この問題には、次の 2 つの原因が考えられます。

  • CoreDNS のバージョンが古すぎる: インストールされている CoreDNS のバージョンが discovery.k8s.io/v1 API をサポートしていないため、discovery.k8s.io/v1beta1 API を使用しています。

  • CoreDNS が古い Kubernetes バージョンで起動された: CoreDNS が古い Kubernetes バージョン (例: v1.20) で起動され、起動時に discovery.k8s.io/v1beta1 API を選択しました。クラスターがアップグレードされ、この API が非推奨になった後も、CoreDNS は引き続きそれを使用しました。

解決策

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

  2. クラスターリスト ページで、クラスター名をクリックします。 左側のナビゲーションウィンドウで、アドオン管理 をクリックします。

  3. アドオン管理]ページで、CoreDNS コンポーネントをスペックアップします。

    ページにアップグレードできないと表示される場合は、次のステップに進みます。それ以外の場合は、ステップ 3 に進みます。コンポーネントのアップグレード方法の詳細については、「コンポーネントの管理」をご参照ください。

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

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

    再起動中に DNS 名前解決エラーが断続的に発生する場合があります。詳細については、「IPVS の不具合によって引き起こされる断続的な DNS タイムアウトの軽減」をご参照ください。

  5. CoreDNS がアップグレードまたは再起動された後、次のコマンドを実行して CoreDNS Pod のステータスを確認します。

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

    CoreDNS Pod が新しく再作成され、実行中状態である場合は、クラスター更新の事前チェックページに表示される CoreDNS からの非推奨の API 呼び出しレコードを無視して、クラスターのアップグレードに進むことができます。

CoreDNS ログエラー:dns: buffer size too small

症状

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

原因

CoreDNS のデフォルトのバッファーサイズ (bufsize) は 1232 バイトです。これにより、Kubernetes Pod からの DNS クエリに対する UDP パケットの最大サイズが 1232 バイトに制限されます。DNS 応答がこの制限を超えると、名前解決が失敗します。これは、特に大きな応答を持つ Pod 内の DNS クエリに影響します。詳細については、こちらの GitHub issue をご参照ください。

解決策

CoreDNS を v1.7.1 以降にアップグレードします。v1.7.1 より前のバージョンの場合は、kubectl edit cm -n kube-system coredns コマンドを実行して bufsize を設定できます。値は [512, 4096] の範囲内である必要があります。詳細については、CoreDNS ドキュメントをご参照ください。

. {
    bufsize 1220
    log
}

サービス作成後にリクエストが NXDOMAIN および NOERR を返す

CoreDNS コンポーネントは複数の Pod インスタンスでデプロイされます。新しいサービスが作成された後、いずれかの Pod が API サーバーから最新情報を迅速に取得しない場合、複数のリクエストが一貫性のない結果を返す可能性があります。CoreDNS Pod が最新のサービス情報を取得した後、DNS リクエストの結果は一貫性のあるものになります。

Windows ノードでの DNS 名前解決

  • Windows ノードで実行されている Pod は ClusterFirstWithHostNet をサポートしていません。Windows は、ピリオド (.) を含むすべての名前を完全修飾ドメイン名 (FQDN) として扱い、名前解決中に DNS 検索サフィックスを追加しません。

  • Windows は複数の DNS リゾルバーをサポートしており、それぞれにわずかな動作の違いがあります。Resolve-DnsName PowerShell コマンドレットを名前解決クエリに使用することを推奨します。

  • 名前を解決するために DNS サフィックスのリストを検索できる Linux とは異なり、Windows は Pod の名前空間に関連付けられている単一の DNS サフィックスのみを使用します。たとえば、default 名前空間で作成された Pod は、DNS サフィックス default.svc.cluster.local を受け取ります。Windows ノード上の Pod では、kubernetes.default.svc.cluster.localkubernetes は解決できますが、kubernetes.defaultkubernetes.default.svc のような部分的に修飾された名前は解決できません。

詳細については、「サービスと Pod の DNS」をご参照ください。