このトピックでは、マイクロサービスエンジン(MSE)Nacosインスタンスのドメイン名の解決に失敗した場合のトラブルシューティング方法について説明します。
問題の説明
アプリケーションが MSE Nacosインスタンスに接続されているときに、インスタンスのドメイン名の解決に失敗し、次のエラーメッセージが返される場合があります。
- UnknownHostException
- No route to host
- Unable to resolve host
原因
- アプリケーションノードの DNS サーバーまたはネームサーバーが正しく構成されていません。その結果、MSE Nacosインスタンスのドメイン名の解決に失敗します。
- コンテナがホストの DNS サーバーまたはネームサーバーを使用していないか、ネットワークタイプが無効です。その結果、MSE インスタンスのドメイン名の解決に失敗します。
- アプリケーションノードに構成されている DNS サーバーまたはネームサーバーに障害が発生しています。たとえば、Kubernetes クラスターに必要な CoreDNS が失敗します。その結果、MSE インスタンスのドメイン名の解決に失敗します。
解決策
解決策 1:dig コマンドを使用する
次のコマンドを実行して、dig ツールをインストールします。
yum install -y bind-utils
次のコードにリストされている dig
コマンドを使用して、インスタンスのドメイン名を解決してみてください。status フィールドと SERVER フィールドの値に基づいて、ドメイン名が正しく解決されているかどうかを確認します。
status フィールドの値が NOERROR で、SERVER フィールドで指定された DNS サーバーまたはネームサーバーが有効な場合、ドメイン名は正しく解決されます。
dig ${mse.nacos.host}
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.1.alios7.2 <<>> ${mse.nacos.host}
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN ## status フィールドの値を確認します。 id: 46791
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;${mse.nacos.host}. IN A
;; AUTHORITY SECTION:
com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1670413473 1800 900 604800 86400
;; Query time: 0 msec
## SERVER フィールドの値を確認します。
;; SERVER: yyy.yyy.yyy.yyy#zz(...)
;; WHEN: Wed Dec 07 19:39:32 CST 2022
;; MSG SIZE rcvd: 73
dig
コマンドを使用してドメイン名を解決できない場合は、次のいずれかの方法を使用して問題を修正します。- Elastic Compute Service(ECS)インスタンスを使用して環境をデプロイする場合は、SERVER フィールドに DNS サーバーまたはネームサーバーの IP アドレスを記録します。次に、チケットを送信するを送信して、ECS またはネットワークテクニカルサポートに連絡し、ドメイン名解決の失敗の原因を特定してもらいます。
- Docker または Kubernetes クラスターを使用して環境をデプロイする場合は、ホストまたはノードにアクセスし、
dig
コマンドを再度実行して、ドメイン名を解決してみてください。- ドメイン名解決が成功した場合、ネットワークタイプが無効であるか、コンテナ内の DNS サーバーまたはネームサーバーの構成がノードの構成と異なっています。この場合は、ネットワークタイプを変更するか、ノードの
/etc
パスにある resolv.conf ファイルの構成情報をコンテナに移行し、ドメイン名を再度解決してみてください。 - ドメイン名を解決できない場合は、チケットを送信するを送信して、ECS またはネットワークテクニカルサポートに連絡し、ドメイン名解決の失敗の原因を特定してもらいます。
- ドメイン名解決が成功した場合、ネットワークタイプが無効であるか、コンテナ内の DNS サーバーまたはネームサーバーの構成がノードの構成と異なっています。この場合は、ネットワークタイプを変更するか、ノードの
dig
コマンドを使用してドメイン名を解決でき、アプリケーションが正常に復元された場合、DNS サーバーまたはネームサーバーに障害が発生しています。チケットを送信するを送信して、ネットワークテクニカルサポートに連絡し、DNS サーバーまたはネームサーバーの障害の原因を特定してもらいます。Container Service for Kubernetes(ACK)クラスターを使用して環境をデプロイする場合は、チケットを送信するを送信して、ACK テクニカルサポートに連絡し、CoreDNS 障害の原因を特定してもらいます。
解決策 2:ping コマンドを使用する
ping ${mse.nacos.host}
コマンドを実行して、ドメイン名を解決してみてください。unknown host
というメッセージが表示された場合、ドメイン名の解決に失敗しています。PING ${mse.nacos.host} (xxx.xx.xx.xx) 56(84) bytes of data.
というメッセージが表示された場合、ドメイン名は正常に解決されています。
ping
コマンドを使用してドメイン名を解決できない場合は、/etc
パスにある resolv.conf ファイルの内容を表示し、DNS サーバーまたはネームサーバーの IP アドレスを取得し、次のいずれかの方法を使用して問題を修正してみてください。- ECS インスタンスを使用して環境をデプロイする場合は、
/etc
パスにある resolv.conf ファイルの内容を記録し、チケットを送信するを送信して、ECS またはネットワークテクニカルサポートに連絡し、ドメイン名解決の失敗の原因を特定してもらいます。 - Docker または Kubernetes クラスターを使用して環境をデプロイする場合は、ホストまたはノードにアクセスし、
ping
コマンドを再度実行して、ドメイン名を解決してみてください。- ドメイン名解決が成功した場合、ネットワークタイプが無効であるか、コンテナ内の DNS サーバーまたはネームサーバーの構成がノードの構成と異なっています。この場合は、ネットワークタイプを変更するか、ノードの
/etc
パスにある resolv.conf ファイルの構成情報をコンテナに移行し、ドメイン名を再度解決してみてください。 - ドメイン名を解決できない場合は、チケットを送信するを送信して、ECS またはネットワークテクニカルサポートに連絡し、ドメイン名解決の失敗の原因を特定してもらいます。
- ドメイン名解決が成功した場合、ネットワークタイプが無効であるか、コンテナ内の DNS サーバーまたはネームサーバーの構成がノードの構成と異なっています。この場合は、ネットワークタイプを変更するか、ノードの
- ECS インスタンスを使用して環境をデプロイする場合は、
ping
コマンドを使用してドメイン名を解決でき、アプリケーションが正常に復元された場合、DNS サーバーまたはネームサーバーに障害が発生しています。チケットを送信するを送信して、ネットワークテクニカルサポートに連絡し、DNS サーバーまたはネームサーバーの障害の原因を特定してもらいます。ACK クラスターを使用して環境をデプロイする場合は、チケットを送信するを送信して、ACK テクニカルサポートに連絡し、CoreDNS 障害の原因を特定してもらいます。