0

nomadを使用して、 gRPCエンドポイントを提供するアプリケーションをタスクとしてデプロイします。その後、タスクはnomad の service stanzaを使用してConsulに登録されます。

アプリケーションのルーティングは、envoy proxyを使用して実現されます。IP で負荷分散された中央の envoy インスタンスを実行しています10.1.2.2

host現在、ルーティング先のエンドポイント/タスクの決定はヘッダーに基づいており、すべてのタスクは の下にサービスとして登録されています<$JOB>.our.cloud。これは 2 つの問題につながります。

  1. サービスにアクセスするときは、ロードバランサー IP の DNS 名を登録する必要があります。これにより、次の/etc/hostsようなエントリが生成されます。

    10.1.2.2 serviceA.our.cloud serviceB.our.cloud serviceC.our.cloud
    

    この問題は を使用することで部分的に軽減されますdnsmasqが、新しいサービスを追加するときはまだ少し面倒です

  2. 同じ gRPC サービスを提供する複数のサービスを同時に実行することはできません。たとえば、サービスの新しい実装をテストすることにした場合job、同じ名前で同じサービスを実行する必要があり、gRPC サービス ファイルで定義されているすべてのサービスを実装する必要があります。

私たちが議論してきた可能な解決策はtagsserviceスタンザの を使用して、提供された gRPC サービスを定義するタグを追加することです。

service {
  tags = ["grpc-my.company.firstpackage/ServiceA", "grpc-my.company.secondpackage/ServiceB"]
}

しかし、これはConsulによって推奨されていません:

Dots are not supported because Consul internally uses them to delimit service tags.

今、私たちは、のようなタグでそれを行うことを考えていましたgrpc-my-company-firstpackage__ServiceA...これは本当に嫌に見えますが:-(

だから私の質問は:

  • 誰かがそのようなことをしたことがありますか?
  • その場合、Consul で自動検出される gRPC サービスにルーティングする方法に関する推奨事項は何ですか?
  • 誰かがこれについて他のアイデアや洞察を持っていますか?
  • これは、たとえばistioでどのように達成されますか?
4

2 に答える 2

0

これと似たようなことを、私たち自身の製品である Turbine Labs を使用して行っています。

少し異なるスタックを使用していますが、考え方は次のとおりです。

  • サービス ディスカバリ情報をコントロール プレーンに取り込みます。(私たちはKubernetesを使用していますが、 Consulをサポートしています)。
  • このサービス ディスカバリ情報をサービス別およびバージョン別に整理します。tbn_clusterstage、およびversion(ここでは のように)を使用します。

私たちにとってはリリースの SHA であるためversion、フォーマットの問題はありません。tbn_clusterまた、タグは階層の最初のレベルを定義するため、一意である必要はありません。

それらを取得したら、UI / API を使用してすべてのルートを定義します (例: app.turbinelabs.io/stats-> stats_service)。これらのルールにはタグが含まれているため、新しいバージョンをデプロイすると ( deploy != release )、トラフィックはルーティングされません。リリースは、ルールを更新することによって行われます。

(スライダーのように、「トラフィックの 10% を新しいバージョンに解放する」という一般的なケースのために、これらのルールを更新するための優れた UI アフォーダンスもあります!)

うまくいけば、それは役に立ちます!LearnEnvoy.io をチェックしてみてください。Envoy で何が機能するかについての多くのチュートリアルとベスト プラクティスです。Service Discovery IntegrationIncremental Blue/Green Releasesに関する記事が役立つ場合があります。

于 2018-03-26T20:56:29.953 に答える