2

Consul を使用して、HTTP エンドポイントを使用してサービスを Consul Agent に登録します/v1/agent/service/register。唯一の問題は、サービスが異なる IP アドレス (1 番目のインスタンス 10.0.0.1、2 番目の 10.0.0.2 など) にバインドされる可能性があり、Consul がリクエストの IP アドレスに基づいて自動的にアドレスを設定することです。

例えば、

「サービス インスタンス 1 (10.0.0.1)」が送信{name:'svs', id:'svs-01'}され/v1/agent/service/register、Consul はそれを次のように登録します。{name:'svs', id:'svs-01', Address: 10.0.0.1}

「サービス インスタンス 2 (10.0.0.2)」が送信{name:'svs', id:'svs-02'}され/v1/agent/service/register、Consul はそれを次のように登録します。{name:'svs', id:'svs-02', Address: 10.0.0.2}

Consul Agent Service Documentationによると、住所フィールドがサービス登録クエリで欠落している場合、提供されていない場合、住所はデフォルトでエージェントの住所になります。しかし、それは私が必要とするものではありません。

実行時にサービスの IP アドレスを検出しようとしましたが、ネットワーク インターフェイスが複数ある可能性があり、それらを区別するのは困難です。

4

1 に答える 1

1

サービスを実行するマシンからサービスを登録する必要があります。Consul は実際にそのように設計されています。HTTP API ではなく、エージェントを使用する必要があります。

ちなみに、Consul サーバーからリモート サービスを直接登録したい場合は、それが実行されている IP を検出し、既に正しい json 構成を送信するために、追加の作業を行う必要があります。これらのヘルスチェックはローカルで実行されることを意図しているため、リモートサービスではヘルスチェックが機能しないことに注意してください。

ここで Consul 開発者の回答を確認してください: https://groups.google.com/forum/#!msg/consul-tool/r4ZY97PE7BY/9QTRd3EsBgAJ

Catalog API は、エージェントがサービスの状態とチェックを Consul サーバーに報告するために使用されます。Catalog API と直接対話することは非常にまれであり、Consul は、Consul エージェントなしでのチェックの実行を実際にはサポートしていません。ノードでエージェントを実行する場合、次のようなボディで curl -X PUT を実行することにより、Agent API を使用してそのノードのサービスとチェックを登録できます。

https://www.consul.io/docs/agent/http/agent.html#agent_service_register

エージェントの構成ファイルでヘルスチェックを定義することもできます。エージェントはチェックを実行し、カタログ API の内部バージョンを使用してヘルス ステータスの変化に応じて、サーバーでカタログを最新の状態に保つように管理します。

Consul サーバーの 1 つでこの Agent API を呼び出した場合、チェックを実行させることもできますが、別のノードでサービスの状態をチェックする場合に使用するのは通常とは異なる構成です。各ノードでエージェントを実行することにより、Consul 自体が無料でいくつかの基本的な「ノードに到達可能」チェックを取得し、サービスの知識を保持し、それらが実行されているエッジでチェックアウトします (Catalog API により、Consul サーバーはフリート全体の質問に答えることができますが、Consul ではエージェントが真実の情報源であり、何が起こっているかを一致させるためにカタログを最新に保ちます)。

于 2015-12-09T23:49:41.000 に答える