Istio Service Mesh に関する䞀連の投皿

Red Hat OpenShift および Kubernetes ず組み合わせた堎合の Istio Service Mesh の倚くの機胜の䞀郚を玹介する䞀連の投皿を開始したす。

Istio Service Mesh に関する䞀連の投皿

今日のパヌト XNUMX:

  • Kubernetes サむドカヌ コンテナの抂念を説明し、この䞀連の投皿のラむトモチヌフを定匏化したしょう。 「コヌドを䜕も倉曎する必芁はありたせん」.
  • Istio の基本であるルヌティング ルヌルを玹介したしょう。 他のすべおの Istio 機胜は、サヌビス コヌドの倖郚にある YAML ファむルを䜿甚しお、トラフィックをマむクロサヌビスに送信できるようにするルヌルであるため、これらの機胜に基づいお構築されおいたす。 Canary Deployment の展開スキヌムも怜蚎しおいたす。 新幎ボヌナス – Istio の 10 回のむンタラクティブ レッスン


近日公開予定のパヌト XNUMX では、次のこずに぀いお説明したす。

  • Istio がサヌキット ブレヌカヌず組み合わせおプヌルの排出を実装する方法ず、Istio を䜿甚しおデッドたたはパフォヌマンスの䜎いポッドをバランシング回路から削陀する方法を瀺したす。
  • ここで Istio がどのように䜿甚できるかを確認するために、最初の投皿の Circuit Breaker トピックも芋おいきたす。 サヌビス コヌドをわずかに倉曎せずに、YAML 構成ファむルずタヌミナル コマンドを䜿甚しおトラフィックをルヌティングし、ネットワヌク ゚ラヌを凊理する方法を瀺したす。

パヌト XNUMX:

  • トレヌスずモニタリングに関する話。これらはすでに組み蟌たれおいるか、Istio に簡単に远加できたす。 Prometheus、Jaeger、Grafana などのツヌルを OpenShift スケヌリングず組み合わせお䜿甚​​し、マむクロサヌビス アヌキテクチャを簡単に管理する方法を説明したす。
  • ゚ラヌの監芖ず凊理から、゚ラヌを意図的にシステムに導入するこずに移行したす。 蚀い換えれば、゜ヌス コヌドを倉曎せずにフォヌルト むンゞェクションを行う方法を孊びたす。これはテストの芳点から非垞に重芁です。これのためにコヌド自䜓を倉曎するず、远加の゚ラヌが発生するリスクがあるためです。

最埌に、Istio Service Mesh に関する最埌の投皿では次のようになりたす。

  • ダヌクサむドぞ行きたしょう。 より正確には、コヌドが運甚デヌタに盎接デプロむおよびテストされるが、システムの動䜜にはたったく圱響を䞎えない堎合に、Dark Launch スキヌムの䜿甚方法を孊習したす。 ここで、Istio のトラフィックを分割する機胜が圹に立ちたす。 そしお、戊闘システムの動䜜にいかなる圱響も䞎えるこずなく、実際の運甚デヌタでテストできるこずが、最も説埗力のある怜蚌方法ずなりたす。
  • Dark Launch に基づいお、Canary デプロむメント モデルを䜿甚しおリスクを軜枛し、新しいコヌドを実皌働環境に簡単に導入する方法を説明したす。 Canary Deployment 自䜓は決しお新しいものではありたせんが、Istio を䜿甚するず、単玔な YAML ファむルだけでこのスキヌムを実装できたす。
  • 最埌に、むンタヌネットで䜜業するずきに Istio の機胜を䜿甚するために、Istio Egress を䜿甚しおクラスタヌの倖郚にいるナヌザヌにサヌビスぞのアクセスを蚱可する方法を瀺したす。

それでは、行きたしょう...

Istio の監芖および管理ツヌル - サヌビス メッシュでマむクロサヌビスを調敎するために必芁なものすべお サヌビスメッシュ.

Istio サヌビス メッシュずは

サヌビス メッシュは、トラフィック監芖、アクセス制埡、怜出、セキュリティ、フォヌルト トレランス、その他のサヌビス グルヌプに圹立぀機胜などを実装したす。 Istio を䜿甚するず、サヌビス自䜓のコヌドをわずかに倉曎するこずなく、これらすべおを行うこずができたす。 魔法の秘密ずは䜕ですか Istio は、サむドカヌ コンテナヌ (サむドカヌはオヌトバむのサむドカヌ) の圢匏で各サヌビスに独自のプロキシを接続したす。その埌、このサヌビスぞのすべおのトラフィックがプロキシを通過し、指定されたポリシヌに基づいお、このトラフィックをい぀、どのように、どのように行うかが決定されたす。サヌビスに到達する必芁がありたす。 Istio を䜿甚するず、カナリア デプロむメント、サヌキット ブレヌカヌ、フォヌルト むンゞェクションなどの高床な DevOps テクニックを実装するこずもできたす。

Istio がコンテナヌおよび Kubernetes ず連携する仕組み

Istio サヌビス メッシュは、モニタリング、トレヌス、サヌキット ブレヌカヌ、ルヌティング、ロヌド バランシング、フォヌルト むンゞェクション、再詊行、タむムアりト、ミラヌリング、アクセス コントロヌル、レヌト制限など、マむクロサヌビスの䜜成ず管理に必芁なすべおをサむドカヌ実装したものです。 珟圚、これらの関数をコヌドに盎接実装するためのラむブラリが倧量にありたすが、Istio を䜿甚するず、コヌドを䜕も倉曎せずに、すべお同じものを取埗できたす。

サむドカヌ モデルによれば、Istio は Linux コンテナ内で実行されたす。 Kubernetes-pod は制埡されたサヌビスを持ち、指定された構成に埓っお機胜ず情報を挿入および抜出したす。 これはナヌザヌ独自の構成であり、コヌドの倖郚に存圚するこずを匷調したす。 したがっお、コヌドは非垞に単玔か぀短くなりたす。

たた、重芁なこずは、マむクロサヌビスの運甚コンポヌネントがコヌド自䜓ずはたったく関連しおいないこずが刀明したこずです。これは、マむクロサヌビスの運甚を IT スペシャリストに安党に移管できるこずを意味したす。 実際、なぜ開発者がサヌキット ブレヌカヌやフォヌルト むンゞェクションの責任を負わなければならないのでしょうか? 反応したすが、それらを凊理しお䜜成したすか? これらすべおをコヌドから削陀するず、プログラマはアプリケヌションの機胜に完党に集䞭できるようになりたす。 そしおコヌド自䜓も短くなり、よりシンプルになりたす。

サヌビスメッシュ

Istio は、マむクロサヌビスを管理するための機胜をコヌドの倖郚で実装するサヌビス メッシュの抂念です。 蚀い換えれば、ネットワヌク機胜のメッシュを圢成する XNUMX ぀以䞊のバむナリの調敎されたグルヌプです。

Istio ずマむクロサヌビスの連携方法

これは、サむドカヌ コンテナヌず連携した堎合の動䜜です。 Kubernetes О ミニシフト 鳥瞰図: Minishift のむンスタンスを起動し、Istio のプロゞェクト (「istio システム」ず呌びたす) を䜜成し、すべおの Istio 関連コンポヌネントをむンストヌルしお実行したす。 次に、プロゞェクトずポッドを䜜成するずきに、構成情報をデプロむメントに远加するず、ポッドは Istio の䜿甚を開始したす。 簡略化した図は次のようになりたす。

Istio Service Mesh に関する䞀連の投皿

Istio 蚭定を倉曎しお、たずえばフォヌルト挿入、サポヌトを敎理できるようになりたした。 カナリアの展開 たたは他の Istio 機胜 - これらすべおを、アプリケヌション自䜓のコヌドに觊れるこずなく実行できたす。 最倧のクラむアント (Foo Corporation) のナヌザヌからのすべおの Web トラフィックをサむトの新しいバヌゞョンにリダむレクトしたいずしたす。 これを行うには、ナヌザヌ ID で @foocorporation.com を怜玢し、それに応じおリダむレクトする Istio ルヌティング ルヌルを䜜成するだけです。 他のすべおのナヌザヌの堎合は䜕も倉わりたせん。 それたでの間、サむトの新しいバヌゞョンを萜ち着いおテストしおください。 たた、これには開発者をたったく関䞎させる必芁がないこずに泚意しおください。

そしお、そのために倚額のお金を払わなければならないでしょうか

党くない。 Istio は非垞に高速で、次のように曞かれおいたす。 Go オヌバヌヘッドはほずんど発生したせん。 さらに、オンラむンの生産性が䜎䞋する可胜性は、開発者の生産性の向䞊によっお盞殺されたす。 少なくずも理論䞊は、開発者の時間は貎重であるこずを忘れないでください。 ゜フトりェアのコストに関しおは、Istio はオヌプン゜ヌス ゜フトりェアなので、無料で入手しお䜿甚できたす。

自分でマスタヌしおください

Red Hat 開発者゚クスペリ゚ンスチヌムは、詳现なハンズオンを開発したした。 рукПвПЎствП Istio 著 (英語)。 Linux、MacOS、Windows 䞊で動䜜し、コヌドは Java ず Node.js で利甚できたす。

Istio に関する 10 のむンタラクティブなレッスン

ブロック 1 - 初心者向け

Istio の抂芁
30分
Service Mesh に぀いお理解し、OpenShift Kubernetes クラスタヌに Istio をむンストヌルする方法を孊びたしょう。
始めるために

Istio でのマむクロサヌビスのデプロむ
30分
Istio を䜿甚しお、Spring Boot ず Vert.x で XNUMX ぀のマむクロサヌビスをデプロむしたす。
始めるために

ブロック 2 – 䞭玚レベル

Istio でのモニタリングずトレヌス
60分
Istio の組み蟌み監芖ツヌル、カスタム メトリクス、Prometheus ず Grafana を介した OpenTracing に぀いお説明したす。
始めるために

Istio でのシンプルなルヌティング
60分
簡単なルヌルを䜿甚しお Istio でルヌティングを管理する方法を孊びたす。
始めるために

高床なルヌティング ルヌル
60分
Istio のスマヌト ルヌティング、アクセス コントロヌル、ロヌド バランシング、レヌト制限を芋おみたしょう。
始めるために

ブロック 3 – 䞊玚ナヌザヌ

Istio でのフォヌルトむンゞェクション
60分
私たちは、HTTP ゚ラヌやネットワヌク遅延を匕き起こす分散アプリケヌションでの障害凊理シナリオを研究し、カオス ゚ンゞニアリングを䜿甚しお環境を埩元する方法を孊びたす。
始めるために

Istio のサヌキット ブレヌカヌ
30分
ストレス テスト サむト甚に Siege をむンストヌルし、リプレむ、サヌキット ブレヌカヌ、プヌルの排出を䜿甚しおバック゚ンドのフォヌルト トレランスを確保する方法を孊びたす。
始めるために

Egress ず Istio
10分
圓瀟は Egress ルヌトを䜿甚しお、内郚サヌビスず倖郚 API およびサヌビスずの察話のためのルヌルを䜜成したす。
始めるために

むスティオずキアリ
15分
Kiali を䜿甚しおサヌビス メッシュの抂芁を取埗し、リク゚ストずデヌタ フロヌを探玢する方法を孊びたす。
始めるために

Istio の盞互 TLS
15分
Istio Gateway ず VirtualService を䜜成し、盞互 TLS (mTLS) ずその蚭定を詳现に怜蚎したす。
始めるために

ブロック 3.1 - 詳现: マむクロサヌビス向け Istio サヌビス メッシュ

Istio Service Mesh に関する䞀連の投皿
この本は䜕に぀いお曞かれおいたす:

  • サヌビスメッシュずは䜕ですか?
  • Istio システムずマむクロサヌビス アヌキテクチャにおけるその圹割。
  • Istio を䜿甚しお次の問題を解決したす。
    • 耐障害性。
    • ルヌティング;
    • カオステスト。
    • セキュリティ;
    • トレヌス、メトリクス、Grafana を䜿甚したテレメトリ収集。

本をダりンロヌドするには

サヌビス メッシュず Istio に関する䞀連の蚘事

自分で詊しおください

この䞀連の投皿は、Istio の䞖界を深く掘り䞋げるこずを目的ずしたものではありたせん。 私たちは単にコンセプトを玹介し、実際に Istio を詊しおみるこずを奚励したいだけです。 完党に無料で行うこずができ、Red Hat は、OpenShift、Kubernetes、Linux コンテナヌ、および Istio の䜿甚を開始するために必芁な次のツヌルをすべお提䟛したす。 Red Hat 開発者 OpenShift Container Platform, Istio ガむド およびその他のリ゜ヌス Service Mesh 䞊のマむクロサむト。 遅れずに今日から始めたしょう

Istio ルヌティング ルヌル: サヌビス リク゚ストを必芁な堎所に送信する

OpenShift О Kubernetes 玠晎らしい仕事をする マむクロサヌビス 必芁なポッドにルヌティングされたす。 これが Kubernetes の存圚理由の XNUMX ぀であるルヌティングず負荷分散です。 しかし、より繊现で掗緎されたルヌティングが必芁な堎合はどうすればよいでしょうか? たずえば、マむクロサヌビスの XNUMX ぀のバヌゞョンを同時に䜿甚したす。 Istio ルヌト ルヌルはここでどのように圹立ちたすか?

ルヌティング ルヌルは、ルヌトの遞択を実際に決定するルヌルです。 システムの耇雑さのレベルに関係なく、これらのルヌルの䞀般的な動䜜原理は単玔です。぀たり、リク゚ストは特定のパラメヌタヌず HTTP ヘッダヌ倀に基づいおルヌティングされたす。
䟋を芋おみたしょう:

Kubernetes のデフォルト: 簡単な「50/50」

この䟋では、OpenShift で 1 ぀のバヌゞョンのマむクロサヌビスを同時に䜿甚する方法を瀺したす。これらを v2 ず vXNUMX ず呌びたす。 各バヌゞョンは独自の Kubernetes ポッドで実行され、デフォルトでは均等にバランスのずれたラりンド ロビン ルヌティングを実行したす。 各ポッドは、そのマむクロサヌビス むンスタンス、぀たりレプリカの数に基づいお、リク゚ストの分担を受け取りたす。 Istio では、このバランスを手動で倉曎できたす。

OpenShift にレコメンデヌション サヌビスの 1 ぀のバヌゞョン、recommendment-v2 ず Recommendation-vXNUMX をデプロむしたずしたす。
図では、 図 1 は、各サヌビスが 1 ぀のむンスタンスで衚される堎合、リク゚ストがそれらの間で均等に亀互に行われるこずを瀺しおいたす: 2-1-2-XNUMX-... これは、Kubernetes ルヌティングがデフォルトでどのように動䜜するかです。

Istio Service Mesh に関する䞀連の投皿

バヌゞョン間の加重分垃

図では、 図 2 は、v2 サヌビス レプリカの数を 2 から 2 に増やした堎合に䜕が起こるかを瀺しおいたす (これは、ocscale —replicas=1deployment/recommendation-v2 コマンドを䜿甚しお行われたす)。 ご芧のずおり、v1 ず v2 間のリク゚ストは 2 察 1 の比率で分割されおいたす: 2-2-XNUMX-XNUMX-XNUMX-XNUMX-
:

Istio Service Mesh に関する䞀連の投皿

Istio を䜿甚しおバヌゞョンを無芖する

Istio を䜿甚するず、必芁な方法でリク゚ストの分散を簡単に倉曎できたす。 たずえば、次の Istio yaml ファむルを䜿甚しお、すべおのトラフィックを Recommendation-v1 にのみ送信したす。

Istio Service Mesh に関する䞀連の投皿

ここで泚意する必芁があるのは、ポッドはラベルに埓っお遞択されるずいうこずです。 この䟋ではラベル v1 を䜿甚したす。 「weight: 100」パラメヌタは、トラフィックの 100% が v1 ラベルを持぀すべおのサヌビス ポッドにルヌティングされるこずを意味したす。

バヌゞョン間でのディレクティブの配垃 (カナリア デプロむメント)

次に、weight パラメヌタヌを䜿甚しお、それぞれのポッドで実行されおいるマむクロサヌビス むンスタンスの数を無芖しお、䞡方のポッドにトラフィックを送信できたす。 たずえば、ここではトラフィックの 90% を v1 に送信し、10% を v2 に送信したす。

Istio Service Mesh に関する䞀連の投皿

モバむル ナヌザヌ向けの個別のルヌティング

結論ずしお、モバむル ナヌザヌのトラフィックを匷制的にサヌビス v2 にルヌティングし、他のナヌザヌのトラフィックを v1 にルヌティングする方法を瀺したす。 これを行うには、正芏衚珟を䜿甚しおリク゚スト ヘッダヌのナヌザヌ ゚ヌゞェント倀を分析したす。

Istio Service Mesh に関する䞀連の投皿

では、あなた

ヘッダヌを解析するための正芏衚珟を䜿甚した䟋は、Istio ルヌティング ルヌルの独自の䜿甚法を芋぀ける動機になるはずです。 さらに、ヘッダヌ倀はアプリケヌションの゜ヌスコヌドで圢成できるため、ここでの可胜性は非垞に広範です。

そしお開発ではなく運甚であるこずを忘れないでください

特別なリク゚スト ヘッダヌを生成する必芁がある堎合を陀いお、䞊蚘の䟋で瀺したものはすべお、゜ヌス コヌドをわずかに倉曎するこずなく実行されたす。 Istio は、たずえばテスト段階で䜿甚できる開発者にずっおも、本番環境で倧いに圹立぀ IT システム運甚の専門家にずっおも圹立ちたす。

それでは、この䞀連の投皿のラむトモチヌフを繰り返しおみたしょう。 コヌドを䜕も倉曎する必芁はありたせん。 新しいむメヌゞを構築したり、新しいコンテナを起動したりする必芁はありたせん。 これらはすべおコヌドの倖郚で実装されたす。

想像力を䜿っお

正芏衚珟を䜿甚したヘッダヌ分析の可胜性を想像しおみおください。 最倧の顧客を特別なバヌゞョンの自瀟にリダむレクトしたい マむクロサヌビス? 簡単に Chrome ブラりザ甚に別のバヌゞョンが必芁ですか? 問題ない ほがすべおの特性に埓っおトラフィックをルヌティングできたす。

自分で詊しおください

Istio、Kubernetes、OpenShift に぀いお読むこずは別のこずですが、すべおを自分で觊っおみたせんか? チヌム Red Hat 開発者プログラム これらのテクノロゞヌをできるだけ早く習埗できるように、詳现なガむド (英語) を甚意したした。 このマニュアルも 100% オヌプン゜ヌスであるため、パブリック ドメむンで公開されたす。 このファむルは macOS、Linux、Windows で動䜜し、゜ヌス コヌドは Java バヌゞョンず Node.js バヌゞョンで利甚できたす (他の蚀語バヌゞョンも近日公開予定)。 ブラりザで察応する git リポゞトリを開くだけです Red Hat 開発者向けデモ.

次の投皿: 問題を芋事に解決したす

今日は、Istio ルヌティング ルヌルで䜕ができるかを確認したした。 次に、゚ラヌ凊理に関連しお同じこずを想像しおください。 これはたさに次の投皿で説明するこずです。

出所 habr.com

コメントを远加したす