Microservices Engine (MSE) Nacos インスタンスに永続サービスプロバイダーを登録すると、HTTP および TCP のヘルスチェックは、ご利用のインスタンスが正常に実行中であっても、常に「異常」と報告されます。
原因
Nacos では、インスタンスタイプに応じて 2 種類のヘルスチェックモデルが採用されています。
| インスタンスタイプ | パラメーター | ヘルスチェックの方向 | 動作の仕組み |
|---|---|---|---|
| 一時的(デフォルト) | ephemeral=true | インスタンス → サーバー | サービスインスタンスが Nacos サーバーに対してハートビートを送信します。 |
| 永続的 | ephemeral=false | サーバー → インスタンス | Nacos サーバーが HTTP または TCP リクエストを送信して、サービスインスタンスに対してサーバー主導のプローブを行います。 |
MSE Nacos は、お客様のアプリケーションとは分離された独立したネットワーク上で実行されるマネージドサービスです。セキュリティ上の理由から、ネットワーク層が MSE Nacos サーバーからのアウトバウンドリクエストをサービスインスタンスへ送信することをブロックしています。永続インスタンスはサーバー主導のプローブに依存しているため、ヘルスチェックは常にタイムアウトし、「異常」と報告されます。
一時的インスタンスには影響がありません。これは、ヘルスチェックの方向が逆であり、インスタンス側から Nacos サーバーへハートビートを送信するため、ネットワーク層がこれを許可しているためです。
ソリューション:一時的インスタンスへの切り替え
ephemeral パラメーターを true に設定することで、サービスを一時的として登録してください。true はデフォルト値であるため、ephemeral パラメーター自体を完全に削除しても、同じ効果があります。
Open API
curl -d 'serviceName=<your-service-name>' \
-d 'ip=<your-instance-ip>' \
-d 'port=<your-instance-port>' \
-d 'ephemeral=true' \
-X POST 'http://<nacos-server-address>/nacos/v2/ns/instance'以下のプレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 | 例 |
|---|---|---|
<your-service-name> | サービス名 | my-service |
<your-instance-ip> | サービスインスタンスの IP アドレス | 192.168.1.100 |
<your-instance-port> | サービスインスタンスのポート | 8080 |
<nacos-server-address> | MSE Nacos インスタンスのアドレス | mse-xxx.nacos.mse.aliyuncs.com:8848 |
Spring Cloud Alibaba
アプリケーションの構成ファイルに、以下のプロパティを追加してください。
spring.cloud.nacos.discovery.ephemeral=true構成ファイルで ephemeral を明示的に設定していない場合、デフォルト値はすでに true であるため、変更は不要です。代わりに、明示的に ephemeral=false と設定されている箇所を確認し、その設定を削除または変更してください。