この記事はWeChatの公開アカウント「趙華兵」から転載したものです。この記事を転載する場合は、趙華兵の公開アカウントにご連絡ください。
目次
クラウドネイティブ サービス メッシュの分野で人気の高いオープン ソース プロジェクトである Istio は、非侵入型トラフィック管理、安全な通信、サービスの可視性などのサービス ガバナンス機能を備えたマイクロサービスを提供できます。現在、ますます多くのマイクロサービス プロジェクトが、マイクロサービス インフラストラクチャを Istio に移行することを検討し始めています。 Istio は Kubernetes に強く依存しており、そのサービス検出は Kubernetes に基づいて実装されています。既存のマイクロサービス プロジェクトの多くは、まだ Kubernetes に移行されていません。あるいは、Kubernetes がデプロイメントと管理に使用されているにもかかわらず、Consul や Eureka などの他のサービス登録ソリューションや、独自に構築したサービス登録センターが引き続き使用されている場合もあります。 この場合、既存のマイクロサービス プロジェクトを Istio と最小限のコストで迅速に統合し、Istio が提供するさまざまなサービス ガバナンス機能を活用するにはどうすればよいでしょうか。この記事では、Istio サービス登録メカニズムの原理を分析し、読者の参考のために Istio をサードパーティのサービス登録センターと統合するための実現可能なソリューションをいくつか提案します。 Istio サービス モデル まず、Istio 内のサービス モデルを見てみましょう。 Istio コントロール プレーンでは、Pilot コンポーネントがサービス メッシュ内のサービスとトラフィック ポリシーの管理を担当します。 Pilot は、サービス情報とルーティング ポリシーを xDS インターフェイスの標準データ構造に変換し、データ プレーン上の Envoy に送信します。 Pilot 自体はメッシュ内のサービス登録を担当しませんが、他のサービス レジストリと統合することでメッシュ内で管理されるサービスを取得します。さらに、Istio は、API を介してレジストリ以外の独立したサービスをメッシュに追加することもサポートしています。 図 1 Istio サービス モデル データ ソース 上の図からわかるように、Pilot で管理されるサービス データは、次の 2 つのソースから取得されます。
パイロットサービスモデルのソースコード分析 Pilot のサービス モデルに関係するコード モジュールを次の図に示します。 図2 パイロットサービスモデルに関連するコード構造 Pilot のエントリ関数は、pilot/cmd/pilot-discovery/main.go のメイン メソッドです。検出サーバーはメイン メソッドで作成されます。検出サーバーおよびサービス モデルには、主に次の 3 つの部分が含まれます。
検出サービス: サービス モデルとコントロール プレーン構成をデータ プレーンの標準データ形式に変換し、xDS インターフェイスを介してデータ プレーン エージェントに送信します。主に以下のロジックが含まれます。
サードパーティのサービスレジストリ統合 Consul 統合 Istio は Kubernetes との密接な関係を考慮して、当初は Kubernetes サービス登録の統合のみに重点を置いていました。 Istio の初期バージョンには Consul と Eureka の適応コードも含まれていますが、これらのコードは基本的にプロトタイプ検証ノードにすぎず、多くの障害とパフォーマンスの問題があります。 プロジェクトでは自社開発のサービス登録用のバックエンドストレージとして Consul を使用しているため、Istio との統合時に Consul の適応性について多くのテストと調査を実施し、機能とパフォーマンス効率の面でいくつかの問題を解決しました。これらの Consul 適応の問題は解決され、Istio バージョンに統合されました。次の PR を参照してください。
これらの問題が解決された後、Consul レジストリの統合は基本的に使用可能になりました。 Consul を Pilot に接続するには、pilot-discovery 起動コマンドの次の 2 つのパラメータを使用して、レジストリ タイプと Consul の接続アドレスを指定します: --registries Consul --consulserverURL http://$consul-ip:$port。 他のサービスレジストリとの統合 1.0 では Eureka 用の適応コード フレームワークがまだ存在しますが、Istio のそれ以降のバージョンでは Eureka 適応関連のコードは完全に削除されました。ネイティブ Istio コードは、Kubernetes と Consul 以外のサービス レジストリをサポートしていません。しかし、次の 3 つの方法で Istio に統合できます。 図3 サードパーティのサービスレジストリを統合する3つの方法 上の図では、赤、緑、青を使用して、これら 3 つの異なる統合方法を識別しています。 カスタム サービス レジストリ アダプター 図 3 の赤い矢印で示されているように、サードパーティのサービス レジストリを統合するためのカスタム アダプターを作成できます。カスタム アダプターは、サードパーティのサービス レジストリからサービスとサービス インスタンスを取得し、それらを Pilot 内の標準モデルに変換して、サービス コントローラーに統合します。カスタム アダプターは、serviceregistry.Instance インターフェイスを実装する必要があります。この方法の原理は Consul Service Registry の適応と似ており、記述には Consul Service Registry の適応コードを参照できます。 このソリューションを実装するには、Pilot 内部サービス モデルと、Service Registry の適応に関連する Istio ソース コードに精通している必要があり、カスタム アダプタ コードと Pilot コードを一緒にコンパイルして、カスタマイズされた Pilotd バイナリ実行可能ファイルを生成する必要があります。このソリューションの問題点は、Istio コードと密接に結合されていることです。後続の Istio バージョンのアップグレードでは、アダプター コードの変更と再コンパイルが必要になる場合があります。 MCP サーバーのカスタマイズ この統合方法のビジネス プロセスは、図 3 の青い矢印で示されています。このソリューションでは、カスタム MCP サーバーを作成して、サードパーティのレジストリからサービスとサービス インスタンスを取得し、それらを ServiceEntry および WorkloadEntry リソースに変換する必要があります。その後、これらのリソースは、MCP プロトコルを介して Pilot の MCP 構成コントローラーに提供されます。 このように、グローバル メッシュ オプションの configSources パラメータを通じてカスタム MCP サーバーのアドレスを設定する必要があります。現在の 1.6 Config Controller 実装では、異なるタイプの Config Controller を同時に使用できないことに注意してください。つまり、カスタム MCP サーバーを使用してサードパーティのレジストリからサービス データを取得する場合は、他のコントロール プレーンの構成を取得するために Galley も使用する必要があります。
バージョン 1.5 以降では、Galley の機能は Istiod に統合され、デフォルトで無効になっています。 Isito 操縦面の簡素化の傾向から判断すると、Galley は今後徐々に廃止される可能性が高く、Galley 自体の機能の安定性も疑問視されています。したがって、本番環境で Galley を有効にすることはお勧めしません。 さらに、Istio コミュニティの MCP over XDS 提案によると、コミュニティでは構成データを送信するために現在の MCP プロトコルを置き換えるために XDSv3/UDPA の使用が議論されているため、バージョン 1.7 では MCP サーバーと Pilot 間の通信メカニズムが変更される可能性があります。 ServiceEntry と WorkloadEntry を API サーバーに書き込む この統合方法のビジネス プロセスは、図 3 の緑色の矢印で示されています。サードパーティのサービス レジストリからサービスとサービス インスタンス データを取得し、それらを Istio の ServiceEntry および WorkloadEntry リソースに変換し、K8s API サーバーのインターフェースを介して API サーバーに書き込む別のサービスを記述するだけで済みます。 Pilot の Kube Config Controller は、K8s API サーバー内の Istio 関連のリソース オブジェクトの変更を監視し、ServiceEntry と WorkloadEntry を Piolt の内部サービス モデルに変換します。 まとめ この記事では、カスタム サービス レジストリ アダプター コード、カスタム MCP サーバー、独立したサービスを使用して ServiceEntry と WorkloadEntry を API サーバーに書き込むなど、Istio をサードパーティのサービス レジストリと統合するいくつかの方法を分析します。必要な読者は、プロジェクトの実際の状況に基づいて、どの方法を採用するかを選択できます。現時点では、1 番目と 2 番目の方法の両方に問題があるので、個人的には、まず 3 番目の方法を使用し、Istio が Galley と MCP の変換を完全に完了した後に 2 番目の方法への移行を検討することをお勧めします。 注: この記事の分析と提案は、Istio 1.6 を使用することを前提としています。 Istio のバージョンが進化し続けると、サービス モデルと登録関連のメカニズムが変更される可能性があり、サードパーティのサービス レジストリとの統合方法も変更される可能性があります。 参照ドキュメント
|
[[431325]] JVM 全体構造HotSpot VM は、市場における代表的な高性能仮想マシン...
gigsgigscloud は、今年の Double Eleven イベントを開催し、販売中止になっ...
米国の定評あるデータセンターである BudgetVM は、Host Cat に連絡し、現在人気の C...
少し前に、同様の問題に遭遇しました。それは形而上学的な出来事のように思えました。当初、これはネットワ...
[51CTO.com クイック翻訳] Amazon、Microsoft、Google などの大企業は...
ご存知のとおり、Go と Rust はクラウド ネイティブの主要な開発言語となっています。 Rust...
過去 2 日間、Linode はホスティング業界で最もホットな話題となりました。11 年の歴史を持つ...
1. 著作権アルゴリズムの改善。多くの人は、著作権を下部に追加せずに他人の記事を転載しています。この...
キーワードランキングは上がるために一生懸命努力し、この結果を得るまでにほとんどの時間がかかりましたが...
themebetterは、ビッグフロントエンドの元作者が立ち上げた、中国で有名なWordPressテ...
序文: 「寿宝礼」は日本の剣道の学習法から始まり、後に他の武術や産業に発展しました。 「修」とは、最...
hosteonsは最近、米国西海岸のポートランドデータセンターにVPSを追加しました。デフォルトでA...
今後、 Googleモバイル サービスの認可を取得できなくなるブランドや地域は増えるのでしょうか?ロ...
tothost のベトナム VPS には、CMC 回線と VNPT 回線があります。ハノイ VNPT...
Fiberstateは新しいビジネスです。主な業務は、ソルトレイクシティのコンピュータールームでのサ...