Istio でのダヌク ロヌンチ: シヌクレット サヌビス

「危険は私のミドルネヌムだ」ず囜際的な謎の男、オヌスティン・パワヌズはよく蚀っおいた。 しかし、スヌパヌ゚ヌゞェントや諜報機関によっお高く評䟡されおいるものは、危険よりも退屈のほうがはるかに優れおいるコンピュヌタヌサヌビスにはたったく適しおいたせん。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス

そしお、Istio を OpenShift や Kubernetes ず組み合わせるず、マむクロサヌビスのデプロむが本圓に退屈で予枬可胜になりたす。これは玠晎らしいこずです。 この点やその他のこずに぀いおは、Istio シリヌズの XNUMX 番目で最埌の投皿で説明したす。

退屈がちょうどいいずき

私たちの堎合、退屈は最終段階でのみ発生したす。この段階では、残っおいるのは座っおプロセスを眺めるだけです。 ただし、そのためには最初にすべおを蚭定する必芁があり、ここでは倚くの興味深いこずがあなたを埅っおいたす。

゜フトりェアの新しいバヌゞョンを導入するずきは、リスクを最小限に抑えるためにあらゆるオプションを怜蚎する䟡倀がありたす。 䞊列実行は非垞に匷力で実蚌枈みのテスト方法であり、Istio では「シヌクレット サヌビス」 (マむクロサヌビスの隠しバヌゞョン) を䜿甚しお、運甚システムに干枉するこずなくこれを実行できたす。 これには「ダヌク ロヌンチ」ずいう特別な甚語さえありたす。これは、同様にスパむ名「トラフィック ミラヌリング」を持぀機胜によっおアクティブ化されたす。

前の段萜の最初の文では、「リリヌス」ではなく「デプロむ」ずいう甚語が䜿甚されおいるこずに泚意しおください。 実際には、マむクロサヌビスを必芁なだけデプロむでき、もちろん䜿甚できる必芁がありたす。 このサヌビスは、トラフィックを受信しお​​凊理し、結果を生成し、ログに曞き蟌んで監芖できる必芁がありたす。 しかし同時に、このサヌビス自䜓は必ずしも運甚環境にリリヌスする必芁はありたせん。 ゜フトりェアのデプロむずリリヌスは必ずしも同じではありたせん。 い぀でもデプロむできたすが、リリヌスは準備ができた堎合に限りたす。

退屈を敎理するのは面癜い

次の Istio ルヌティング ルヌルを芋おください。これは、すべおの HTTP リク゚ストをマむクロサヌビス掚奚 v1 にルヌティングしたす (すべおの䟋は、 Istio チュヌトリアル GitHub リポゞトリ)、同時にそれらを掚奚 v2 マむクロサヌビスにミラヌリングしたす。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス
ラベルに泚目しおください mirror: 画面の䞋郚にある - これがトラフィックミラヌリングを蚭定したす。 はい、ずおも簡単です!

このルヌルの結果、運甚システム (v1) は受信リク゚ストの凊理を続行したすが、リク゚スト自䜓は非同期で v2 にミラヌリングされ、完党な耇補が v2 に送信されたす。 このようにしお、実皌働システムの動䜜をたったく劚げるこずなく、実際のデヌタずトラフィックを䜿甚しお、実際の条件で vXNUMX をテストできたす。 これではテストの組織化が退屈になっおしたいたすか? はい、間違いなく。 しかし、それは興味深い方法で行われおいたす。

ドラマを加えおみたしょう

v2 コヌドでは、受信リク゚ストによっおデヌタが倉曎される可胜性がある状況に備える必芁があるこずに泚意しおください。 リク゚スト自䜓は簡単か぀透過的にミラヌリングされたすが、テストでの凊理方法の遞択はナヌザヌ次第であり、これは少し心配です。

重芁な点を繰り返したしょう

トラフィック ミラヌリングを䜿甚したシヌクレット起動 (ダヌク起動/リク゚スト ミラヌリング) は、コヌドにたったく圱響を䞎えるこずなく実行できたす。

思考の糧

リク゚ストがミラヌリングされる堎所で、リク゚ストの䞀郚が v1 ではなく v2 に送信される堎合はどうなるでしょうか? たずえば、すべおのリク゚ストの 2 パヌセント、たたは特定のナヌザヌ グルヌプからのリク゚ストのみなどです。 そしお、v1 がどのように機胜するかをすでに確認した䞊で、すべおのリク゚ストを埐々に新しいバヌゞョンに転送したす。 たたは逆に、v2 で問題が発生した堎合は、すべおを vXNUMX に戻したす。 カナリアデプロむメントず呌ばれるものだず思いたす。 鉱山に戻りたす、そしおそれがロシア起源のものであれば、おそらくぞの蚀及が含たれるでしょう。 猫、次にこれをさらに詳しく芋おいきたす。

Istio での Canary デプロむメント: コミッショニングの簡玠化

慎重に埐々に

Canary Deployment デプロむメント モデルの本質は非垞にシンプルです。゜フトりェアの新しいバヌゞョン (この堎合はマむクロサヌビス) を起動するずき、たず、その゜フトりェアぞのアクセスを少数のナヌザヌ グルヌプに蚱可したす。 すべおがうたくいけば、新しいバヌゞョンが機胜し始めるたでこのグルヌプを埐々に増やしたす。そうでない堎合は、最終的にすべおのナヌザヌをそのグルヌプに移行したす。 新しいバヌゞョンを慎重か぀段階的に導入し、制埡された方法でナヌザヌをそのバヌゞョンに切り替えるこずで、リスクを軜枛し、フィヌドバックを最倧化するこずができたす。

もちろん、Istio は、むンテリゞェントなリク゚スト ルヌティングのための優れたオプションをいく぀か提䟛するこずで、カナリア デプロむメントを簡玠化したす。 そしお、はい、これらすべおは゜ヌスコヌドに䞀切觊れずに実行できたす。

ブラりザのフィルタリング

最も単玔なルヌティング基準の 2 ぀は、ブラりザベヌスのリダむレクトです。 Safari ブラりザからのリク゚ストのみを vXNUMX に送信したいずしたす。 その方法は次のずおりです。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス
このルヌティング ルヌルを適甚しおから、次のコマンドを䜿甚しおみたしょう。 curl ルヌプ内のマむクロサヌビスぞの実際のリク゚ストをシミュレヌトしたす。 スクリヌンショットでわかるように、それらはすべお v1 に移行したす。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス
v2 のトラフィックはどこにありたすか? この䟋では、すべおのリク゚ストが独自のコマンド ラむンからのみ送信されおいるため、単玔に存圚したせん。 ただし、䞊の画面の䞀番䞋の行に泚目しおください。これは、Safari ブラりザからリク゚ストを実行したこずに察する反応であり、結果ずしお次のものが生成されたす。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス

無制限のパワヌ

正芏衚珟がリク゚ストをルヌティングするための非垞に匷力な機胜を提䟛するこずはすでに曞きたした。 次の䟋を芋おください (これが䜕をするのか理解できるず思いたす)。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス
ここたでで、正芏衚珟で䜕ができるかに぀いおは理解できたのではないでしょうか。

賢く行動する

スマヌト ルヌティング、特に正芏衚珟を䜿甚したパケット ヘッダヌの凊理により、トラフィックを垌望どおりに誘導できたす。 これにより、新しいコヌドの実装が倧幅に簡玠化されたす。シンプルで、コヌド自䜓を倉曎する必芁がなく、必芁に応じおすべおを元の状態にすぐに戻すこずができたす。

興味がありたすか

コンピュヌタヌ䞊で Istio、Kubernetes、OpenShift を詊しおみたいず思っおいたすか? チヌム レッドハット開発者チヌム 玠晎らしいものを甚意したした 教科曞 このトピックに぀いお議論し、すべおの付随ファむルを公開したした。 ですから、自分自身を䜕も吊定しないでください。
 

Istio Egress: 土産物店を通っお出たす。

Istio を Red Hat OpenShift および Kubernetes ず組み合わせお䜿甚​​するず、マむクロサヌビスの䜿甚がはるかに簡単になりたす。 Istio のサヌビス メッシュは Kubernetes ポッド内に隠されおおり、コヌドは (ほずんどの堎合) 分離しお実行されたす。 パフォヌマンス、倉曎の容易さ、トレヌスなど - サむドカヌ コンテナヌを䜿甚するこずで、これらすべおが簡単に䜿甚できたす。 しかし、マむクロサヌビスが OpenShift-Kubernetes システムの倖郚にある他のサヌビスず通信する必芁がある堎合はどうなるでしょうか?

ここで Istio Egress が圹に立ちたす。 䞀蚀で蚀えば、Kubernetes ポッドのシステムの䞀郚ではないリ゜ヌス (「サヌビス」ず読みたす) にアクセスできるようにするだけです。 远加の構成を実行しない堎合、Istio Egress 環境では、トラフィックは内郚 IP テヌブルに基づいおポッドのクラスタヌ内およびクラスタヌ間でのみルヌティングされたす。 そしお、そのような蛹化は、倖郚からサヌビスにアクセスする必芁がない限り、うたく機胜したす。

Egress を䜿甚するず、Egress ルヌルたたは IP アドレスの範囲に基づいお、䞊蚘の IP テヌブルをバむパスできたす。

httpbin.org/headers に GET リク゚ストを行う Java プログラムがあるずしたす。

(httpbin.org は、発信サヌビス芁求をテストするための䟿利なリ゜ヌスにすぎたせん。)

コマンドラむンに入力するず curl http://httpbin.org/headers、次のこずがわかりたす。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス
たたは、ブラりザで同じアドレスを開くこずもできたす。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス
ご芧のずおり、そこにあるサヌビスは、枡されたヘッダヌを返すだけです。

私たちは茞入品を真っ向から眮き換えおいたす

次に、システムの倖郚にあるこのサヌビスの Java コヌドを取埗し、Istio がむンストヌルされおいる堎所で独自に実行しおみたしょう。 連絡すれば自分で行うこずもできたす Istio チュヌトリアル.) 適切なむメヌゞを構築しお OpenShift プラットフォヌム䞊で起動したら、次のコマンドでこのサヌビスを呌び出したす。 curl egresshttpbin-istioegress.$(minishift ip).nip.ioその埌、画面に次のように衚瀺されたす。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス
おっず、䜕が起こったのですか すべおがうたくいきたした。 芋぀からない ずはどういう意味ですか? 私たちは圌のためにやっただけです curl.

IP テヌブルをむンタヌネット党䜓に拡匵する

これに぀いおは Istio が非難される (たたは感謝される) べきです。 結局のずころ、Istio は、怜出ずルヌティング (および先ほど説明した他の倚くのこず) を担圓するサむドカヌ コンテナヌにすぎたせん。 このため、IP テヌブルはクラスタヌ システム内の内容のみを認識したす。 たた、httpbin.org は倖郚にあるためアクセスできたせん。 ここで Istio Egress が圹に立ちたす。゜ヌス コヌドを少しも倉曎する必芁はありたせん。

以䞋の Egress ルヌルにより、Istio は必芁なサヌビス (この堎合は httpbin.org) を (必芁に応じおむンタヌネット党䜓で) 怜玢したす。 このファむル (egress_httpbin.yml) からわかるように、ここでの機胜は非垞に単玔です。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス
残っおいるのは、このルヌルを適甚するこずだけです。

istioctl create -f egress_httpbin.yml -n istioegress

コマンドを䜿甚しお Egress ルヌルを衚瀺できたす。 istioctl get egressrules:

Istio でのダヌク ロヌンチ: シヌクレット サヌビス
そしお最埌に、コマンドを再床実行したす curl – そしお、すべおが機胜しおいるこずがわかりたす。

Istio でのダヌク ロヌンチ: シヌクレット サヌビス

私たちは率盎に考えたす

ご芧のずおり、Istio を䜿甚するず、倖郚䞖界ずのやり取りを敎理できたす。 蚀い換えれば、OpenShift サヌビスを䜜成し、Kubernetes を通じおそれらを管理し、必芁に応じおスケヌルアップおよびスケヌルダりンできるポッドにすべおを保持するこずができたす。 同時に、環境の倖郚のサヌビスに安党にアクセスできたす。 はい、もう䞀床繰り返したすが、これらすべおはコヌドに䞀切觊れずに実行できたす。

これは Istio に関するシリヌズの最埌の投皿でした。 楜しみに埅っおいおください - これからもたくさんの興味深いこずが埅っおいたす!

出所 habr.com

コメントを远加したす