Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1

ノヌト。 翻蚳。: サヌビス メッシュは、マむクロサヌビス アヌキテクチャに埓うアプリケヌションの最新のむンフラストラクチャに関連する゜リュヌションになっおいるのは間違いありたせん。 Istio は倚くの DevOps ゚ンゞニアが知っおいるかもしれたせんが、非垞に新しい補品であり、提䟛される機胜ずいう点では包括的ではありたすが、慣れるたでにかなりの時間を必芁ずする可胜性がありたす。 電気通信䌚瀟 Orange Networks で倧芏暡顧客向けのクラりド コンピュヌティングを担圓するドむツ人゚ンゞニアの Rinor Maloku は、Istio を玠早く深く掘り䞋げるための玠晎らしい䞀連の資料を執筆したした。 圌は、Istio で䞀般的に䜕ができるのか、そしおそれを自分の目ですぐに確認できる方法から話を始めたす。

むスティオ — Google、IBM、Lyft のチヌムず協力しお開発されたオヌプン゜ヌス プロゞェクト。 これは、マむクロサヌビスベヌスのアプリケヌションで生じる次のような耇雑さを解決したす。

  • 亀通管理: タむムアりト、再詊行、負荷分散;
  • セキュリティ: ゚ンドナヌザヌの認蚌ず認可。
  • 可芳枬性: トレヌス、モニタリング、ロギング。

これらはすべおアプリケヌション レベルで解決できたすが、それ以降はサヌビスは「マむクロ」ではなくなりたす。 これらの問題を解決するための䜙分な劎力はすべお、ビゞネス䟡倀に盎接䜿甚できる䌚瀟リ゜ヌスの無駄です。 䟋を芋おみたしょう:

プロゞェクト マネヌゞャヌ: フィヌドバック機胜を远加するのにどれくらい時間がかかりたすか?
開発者: スプリントは XNUMX ぀です。

MP: えっ?.それは単なる CRUD です!
R: CRUD を実行するのは簡単ですが、ナヌザヌずサヌビスを認蚌し、認可する必芁がありたす。 ネットワヌクの信頌性が䜎いため、繰り返しリク゚ストを実装する必芁がありたす。 サヌキットブレヌカヌのパタヌン クラむアントで。 たた、システム党䜓がクラッシュしないようにするには、タむムアりトず 隔壁 (前述の䞡方のパタヌンの詳现に぀いおは、蚘事埌半のおおよその翻蚳を参照しおください。)、問題を怜出するために、監芖、远跡、[
]

MP: ああ、それではこの機胜を Product サヌビスに挿入したしょう。

この考えは明らかだず思いたす。XNUMX ぀のサヌビスを远加するのに必芁な手順ず劎力は膚倧です。 この蚘事では、Istio が䞊蚘のすべおの耇雑さ (ビゞネス ロゞックを意図したものではありたせん) をサヌビスからどのように陀去するかを芋おいきたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1

泚意: この蚘事は、Kubernetes に関する実践的な知識があるこずを前提ずしおいたす。 それ以倖の堎合は、読むこずをお勧めしたす Kubernetes に぀いおの私の玹介 その埌、この資料を読み続けおください。

Istio のアむデア

Istio のない䞖界では、あるサヌビスが別のサヌビスに盎接リク゚ストを送信し、障害が発生した堎合には、サヌビス自䜓がそれを凊理する必芁がありたす。぀たり、新しい詊行を行ったり、タむムアりトを蚭定したり、サヌキット ブレヌカヌを開いたりする必芁がありたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
Kubernetes のネットワヌク トラフィック

Istio は、ネットワヌク通信を劚害するこずによっおサヌビスや機胜から完党に分離された、特殊な゜リュヌションを提䟛したす。 したがっお、次のように実装されたす。

  • 耐障害性: 応答のステヌタス コヌドに基づいお、リク゚ストが倱敗したかどうかを理解し、リク゚ストを再実行したす。
  • カナリアのロヌルアりト: 䞀定の割合のリク゚ストのみを新しいバヌゞョンのサヌビスにリダむレクトしたす。
  • モニタリングずメトリクス: サヌビスが応答するたでにどれくらい時間がかかりたしたか?
  • トレヌスず可芳枬性: 各リク゚ストに特別なヘッダヌを远加し、クラスタヌ党䜓でそれらを远跡したす。
  • セキュリティ: JWT トヌクンを取埗し、ナヌザヌを認蚌および認可したす。

これらは、興味をそそられる可胜性のほんの䞀郚 (実際にはほんの䞀郚です!) です。 それでは、技術的な詳现を芋おいきたしょう。

Istio アヌキテクチャ

Istio はすべおのネットワヌク トラフィックを傍受し、それに䞀連のルヌルを適甚し、サむドカヌ コンテナヌの圢匏でスマヌト プロキシを各ポッドに挿入したす。 すべおの機胜をアクティブ化するプロキシは、 デヌタプレヌンを䜿甚しお動的に構成できたす。 コントロヌルプレヌン.

デヌタプレヌン

ポッドにプロキシを挿入するず、Istio は必芁な芁件を簡単に満たすこずができたす。 たずえば、リトラむ機胜やサヌキットブレヌカヌ機胜を確認しおみたしょう。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
Envoy での再詊行ずサヌキット ブレヌクの実装方法

たずめるず

  1. ゚ンボむ (ここで話しおいるのは、サむドカヌ コンテナ内にあるプロキシであり、次のように配垃されたす。 別補品 — 玄翻蚳 サヌビス B の最初のむンスタンスにリク゚ストを送信したすが、倱敗したす。
  2. Envoy サむドカヌが再詊行したす リトラむ. (1)
  3. リク゚ストは倱敗し、それを呌び出したプロキシに返されたす。
  4. これにより、サヌキット ブレヌカヌが開き、埌続のリク゚ストに察しお次のサヌビスが呌び出されたす。 (2)

これは、別の Retry ラむブラリを䜿甚する必芁がなく、プログラミング蚀語 X、Y、たたは Z でサヌキット ブレヌクずサヌビス ディスカバリの独自の実装を䜜成する必芁がないこずを意味したす。これらすべおおよびその他の機胜がすぐに利甚可胜です。 Istio にあり、必芁ありたせん ノヌ コヌドの倉曎。

玠晎らしい ここで、Istio を䜿っお旅に出たいず思っおいるかもしれたせんが、ただ疑問が残っおいるので、オヌプンな質問をしおください。 これが人生のあらゆる堎面に圓おはたる普遍的な解決策であるならば、あなたは自然な疑念を抱きたす。結局のずころ、珟実にはそのような解決策はすべお、どのような堎合にも䞍適切であるこずが刀明したす。

そしお最埌に、「カスタマむズ可胜ですか?」ず尋ねたす。

これで航海の準備が敎いたした。コントロヌル プレヌンに぀いお芋おみたしょう。

コントロヌルプレヌン

これは XNUMX ぀のコンポヌネントで構成されたす。 パむロット, ミキサヌ О 芁塞これらは連携しお、トラフィックのルヌティング、ポリシヌの適甚、テレメトリ デヌタの収集を行うように Envoy を構成したす。 抂略的には、すべお次のようになりたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
コントロヌル プレヌンずデヌタ プレヌンの盞互䜜甚

Envoy (぀たり、デヌタ プレヌン) は次を䜿甚しお構成されたす。 Kubernetes CRD (カスタム リ゜ヌス定矩) Istio によっお定矩され、特にこの目的のために意図されおいたす。 これが意味するのは、これらは、䜿い慣れた構文を備えた Kubernetes の単なる別のリ゜ヌスであるように芋えるずいうこずです。 このリ゜ヌスが䜜成されるず、コントロヌル プレヌンによっお取埗され、Envoy に適甚されたす。

サヌビスず Istio の関係

Istio ずサヌビスの関係に぀いおは説明したしたが、その逆に぀いおは説明したせんでした。サヌビスは Istio にどのように関係するのでしょうか?

正盎に蚀うず、サヌビスは、「そもそも氎ずは䜕だろう?」ず自問するずきに、魚が氎に぀いお考えるのず同じくらい、Istio の存圚を認識しおいたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
むラスト ビクトリア・ディミトラコプロス: - 氎はどうですか? - そもそも氎ずは䜕ですか

したがっお、動䜜䞭のクラスタヌを取埗し、Istio コンポヌネントをデプロむした埌も、そのクラスタヌ内にあるサヌビスは匕き続き動䜜し、これらのコンポヌネントを削陀するず、すべおが正垞に戻りたす。 この堎合、Istio が提䟛する機胜が倱われるこずは明らかです。

理論は十分です。この知識を実践しおみたしょう。

Istio の実践

Istio には、少なくずも 4 ぀の vCPU ず 8 GB の RAM が利甚可胜な Kubernetes クラスタヌが必芁です。 クラスタヌをすばやくセットアップしお蚘事の手順に埓うには、新芏ナヌザヌ向けの Google Cloud Platform を䜿甚するこずをお勧めしたす。 無料 $300.

クラスタヌを䜜成し、コン゜ヌル ナヌティリティを䜿甚しお Kubernetes ぞのアクセスを構成した埌、Helm パッケヌゞ マネヌゞャヌを䜿甚しお Istio をむンストヌルできたす。

ヘルムの取り付け

「Helm クラむアント」の説明に埓っお、コンピュヌタヌに Helm クラむアントをむンストヌルしたす。 公匏ドキュメント。 次のセクションでは、これを䜿甚しお Istio をむンストヌルするためのテンプレヌトを生成したす。

Istio のむンストヌル

Istio リ゜ヌスを次からダりンロヌドしたす 最新のリリヌス (元の䜜成者のバヌゞョン 1.0.5 ぞのリンクは、珟圚のリンク、぀たり 1.0.6 - およその翻蚳に倉曎されたした。)、コンテンツを XNUMX ぀のディレクトリに抜出したす (以降、このディレクトリず呌びたす) [istio-resources].

Istio リ゜ヌスを簡単に識別するには、K8s クラスタヌに名前空間を䜜成したす。 istio-system:

$ kubectl create namespace istio-system

ディレクトリに移動しおむンストヌルを完了したす [istio-resources] そしおコマンドを実行したす:

$ helm template install/kubernetes/helm/istio 
  --set global.mtls.enabled=false 
  --set tracing.enabled=true 
  --set kiali.enabled=true 
  --set grafana.enabled=true 
  --namespace istio-system > istio.yaml

このコマンドは、Istio の䞻芁コンポヌネントをファむルに出力したす。 istio.yaml。 暙準テンプレヌトを自分たちに合わせお倉曎し、次のパラメヌタを指定したした。

  • global.mtls.enabled にむンストヌルされおいたす false (぀たり、mTLS 認蚌が無効になっおいたす - 箄)デヌトのプロセスを簡玠化するため。
  • tracing.enabled Yeter を䜿甚したリク゚スト トレヌスが含たれたす。
  • kiali.enabled Kiali をクラスタヌにむンストヌルしお、サヌビスずトラフィックを芖芚化したす。
  • grafana.enabled 収集されたメトリクスを芖芚化するために Grafana をむンストヌルしたす。

生成されたリ゜ヌスを次のコマンドで䜿甚しおみたしょう。

$ kubectl apply -f istio.yaml

クラスタヌぞの Istio のむンストヌルが完了したした。 すべおのポッドが名前空間に入るたで埅ちたす istio-system こずができるようになりたす Running たたは Completed以䞋のコマンドを実行したす。

$ kubectl get pods -n istio-system

これで、次のセクションに進み、アプリケヌションを起動しお実行する準備が敎いたした。

感情分析アプリケヌションのアヌキテクチャ

すでに述べたで䜿甚されおいるセンチメント分析マむクロサヌビス アプリケヌションの䟋を䜿甚しおみたしょう。 Kubernetesの玹介蚘事。 これは、Istio の機胜を実際に瀺すのに十分なほど耇雑です。

アプリケヌションは XNUMX ぀のマむクロサヌビスで構成されたす。

  1. サヌビス SAフロント゚ンド、Reactjs アプリケヌションのフロント゚ンドずしお機胜したす。
  2. サヌビス SA-WebApp感情分析ク゚リを凊理したす。
  3. サヌビス SAロゞック、それ自䜓が実行されたす 感情分析;
  4. サヌビス SA フィヌドバック、分析の粟床に぀いおナヌザヌからフィヌドバックを受け取りたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1

この図では、サヌビスに加えお、Kubernetes で受信リク゚ストを適切なサヌビスにルヌティングする Ingress コントロヌラヌも衚瀺されたす。 Istio は、Ingress Gateway 内で同様の抂念を䜿甚しおいたす。詳现に぀いおは埌述したす。

Istio からプロキシを䜿甚しおアプリケヌションを実行する

蚘事で説明されおいるさらなる操䜜を行うには、リポゞトリのクロヌンを䜜成したす。 istioマスタリヌ。 これには、Kubernetes ず Istio のアプリケヌションずマニフェストが含たれおいたす。

サむドカヌの挿入

挿入ができる 自動的に たたは 手動で。 サむドカヌ コンテナを自動的に挿入するには、名前空間にラベルを蚭定する必芁がありたす。 istio-injection=enabledこれは次のコマンドで実行したす。

$ kubectl label namespace default istio-injection=enabled
namespace/default labeled

これで、各ポッドがデフォルトの名前空間 (default) はサむドカヌ コンテナヌを受け取りたす。 これを確認するには、リポゞトリのルヌト ディレクトリに移動しおテスト アプリケヌションをデプロむしおみたしょう。 [istio-mastery] そしお次のコマンドを実行したす。

$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created

サヌビスをデプロむしたら、次のコマンドを実行しお、ポッドに XNUMX ぀のコンテナヌ (サヌビス自䜓ずそのサむドカヌを含む) があるこずを確認しおみたしょう。 kubectl get pods 列の䞋にあるこずを確認しおください READY 指定倀 2/2、䞡方のコンテナが実行されおいるこずを瀺しおいたす。

$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
sa-feedback-55f5dc4d9c-c9wfv   2/2       Running   0          12m
sa-frontend-558f8986-hhkj9     2/2       Running   0          12m
sa-logic-568498cb4d-2sjwj      2/2       Running   0          12m
sa-logic-568498cb4d-p4f8c      2/2       Running   0          12m
sa-web-app-599cf47c7c-s7cvd    2/2       Running   0          12m

芖芚的には次のようになりたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
いずれかのポッドの Envoy プロキシ

アプリケヌションが起動しお実行されるようになったので、アプリケヌションぞの受信トラフィックを蚱可する必芁がありたす。

むングレスゲヌトりェむ

これを達成する (クラスタヌ内のトラフィックを蚱可する) ベスト プラクティスは、次のずおりです。 むングレスゲヌトりェむ Istio では、クラスタヌの「゚ッゞ」に䜍眮し、ルヌティング、ロヌド バランシング、セキュリティ、受信トラフィックの監芖などの Istio 機胜を有効にするこずができたす。

Ingress Gateway コンポヌネントずそれを倖郚に転送するサヌビスは、Istio のむンストヌル䞭にクラスタヌにむンストヌルされたした。 サヌビスの倖郚 IP アドレスを確認するには、次を実行したす。

$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP
istio-ingressgateway   LoadBalancer   10.0.132.127   13.93.30.120

この IP (EXTERNAL-IP ず呌びたす) を䜿甚しおアプリケヌションにアクセスし続けるため、䟿宜䞊、倀を倉数に曞き蟌みたす。

$ EXTERNAL_IP=$(kubectl get svc -n istio-system 
  -l app=istio-ingressgateway 
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

ここでブラりザ経由でこの IP にアクセスしようずするず、「サヌビス利甚䞍可」゚ラヌが衚瀺されたす。 デフォルトでは、Istio はすべおの受信トラフィックをブロックしたす, ゲヌトりェむはただ定矩されおいたせん。

ゲヌトりェむリ゜ヌス

ゲヌトりェむは Kubernetes の CRD (カスタム リ゜ヌス定矩) であり、クラスタヌに Istio をむンストヌルし、受信トラフィックを蚱可するポヌト、プロトコル、ホストを指定できるようにした埌に定矩されたす。

この䟋では、すべおのホストに察しおポヌト 80 での HTTP トラフィックを蚱可したいず考えおいたす。 タスクは次の定矩によっお実装されたす (http-ゲヌトりェむ.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
- "*"

この構成はセレクタヌを陀いお説明の必芁はありたせん。 istio: ingressgateway。 このセレクタヌを䜿甚するず、構成を適甚する Ingress Gateway を指定できたす。 この堎合、これは Istio にデフォルトでむンストヌルされた Ingress Gateway コントロヌラヌです。

構成は、次のコマンドを呌び出すこずで適甚されたす。

$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created

ゲヌトりェむはポヌト 80 ぞのアクセスを蚱可したすが、リク゚ストをどこにルヌティングすればよいかわかりたせん。 このために必芁ずなるのは、 仮想サヌビス.

仮想サヌビスリ゜ヌス

VirtualService は、クラスタヌ内で蚱可されおいるリク゚ストをルヌティングする方法を Ingress Gateway に指瀺したす。

http-gateway 経由で送信されるアプリケヌションぞのリク゚ストは、sa-frontend、sa-web-app、および sa-フィヌドバック サヌビスに送信する必芁がありたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
VirtualServices で構成する必芁があるルヌト

SA フロント゚ンドに送信する必芁があるリク゚ストを芋おみたしょう。

  • 途䞭で完党䞀臎 / index.html を取埗するには、SA-Frontend に送信する必芁がありたす。
  • 接頭蟞付きパス /static/* CSS や JavaScript など、フロント゚ンドで䜿甚される静的ファむルを受信するには、SA フロント゚ンドに送信する必芁がありたす。
  • 正芏衚珟で䞀臎するパス '^.*.(ico|png|jpg)$'、SA フロント゚ンドに送信する必芁がありたす。 ペヌゞに衚瀺されおいる写真です。

実装は以䞋の構成で実珟したす (sa-virtualservice-external.yaml):

kind: VirtualService
metadata:
  name: sa-external-services
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway                      # 1
  http:
  - match:
    - uri:
        exact: /
    - uri:
        exact: /callback
    - uri:
        prefix: /static
    - uri:
        regex: '^.*.(ico|png|jpg)$'
    route:
    - destination:
        host: sa-frontend             # 2
        port:
number: 80

重芁事項

  1. この VirtualService は、経由するリク゚ストを指したす httpゲヌトりェむ;
  2. В destination リク゚ストが送信されるサヌビスが決定されたす。

泚意: 䞊蚘の蚭定はファむルに保存されたす sa-virtualservice-external.yamlこれには、SA-WebApp および SA-Feedback のルヌティングの蚭定も含たれおいたすが、簡朔にするためにこの蚘事では短瞮されおいたす。

次を呌び出しお VirtualService を適甚したしょう。

$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

泚意: Istio リ゜ヌスを䜿甚するず、Kubernetes API サヌバヌは Istio コントロヌル プレヌンによっお受信されるむベントを䜜成し、その埌、新しい構成が各ポッドの Envoy プロキシに適甚されたす。 たた、Ingress Gateway コントロヌラヌは、コントロヌル プレヌンで構成された別の Envoy であるように芋えたす。 これらすべおを図に瀺すず次のようになりたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
リク゚ストルヌティングのための Istio-IngressGateway 構成

センチメント分析アプリケヌションが次から利甚可胜になりたした。 http://{EXTERNAL-IP}/。 「芋぀かりたせん」ステヌタスが衚瀺されおも心配する必芁はありたせん。 構成が有効になり、Envoy キャッシュが曎新されるたでに少し時間がかかる堎合がありたす。.

先に進む前に、アプリを少しいじっおトラフィックを生成しおください。 (その埌のアクションを明確にするためにその存圚が必芁です - おおよその翻蚳).

キアリ: 可芳枬性

Kiali 管理むンタヌフェむスにアクセスするには、次のコマンドを実行したす。

$ kubectl port-forward 
    $(kubectl get pod -n istio-system -l app=kiali 
    -o jsonpath='{.items[0].metadata.name}') 
    -n istio-system 20001

...そしお開きたす http://localhost:20001/、管理者/管理者ずしおログむンしたす。 ここには、Istio コンポヌネントの構成を確認したり、ネットワヌク リク゚ストを傍受しお収集した情報を䜿甚しおサヌビスを芖芚化したり、「誰が誰に連絡しおいるのか?」、「どのバヌゞョンのサヌビスで問題が発生しおいるのか?」ずいう質問に察する回答を埗るなど、倚くの䟿利な機胜がありたす。倱敗」 等々。 䞀般に、Grafana を䜿甚したメトリクスの芖芚化に進む前に、Kiali の機胜を調べおください。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1

Grafana: メトリクスの芖芚化

Istio で収集されたメトリクスは Prometheus に送られ、Grafana で芖芚化されたす。 Grafana 管理むンタヌフェむスにアクセスするには、以䞋のコマンドを実行しお開きたす。 http://localhost:3000/:

$ kubectl -n istio-system port-forward 
    $(kubectl -n istio-system get pod -l app=grafana 
    -o jsonpath={.items[0].metadata.name}) 3000

メニュヌをクリックするず ホヌム 巊䞊で遞択䞭 Istio サヌビス ダッシュボヌド 巊䞊隅でサヌビスから始めおください sa-りェブアプリ収集されたメトリクスを確認するには:

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1

ここで私たちを埅っおいるのは、空虚でたったく退屈なパフォヌマンスです。経営陣はこれを決しお承認したせん。 次のコマンドを䜿甚しお、小さな負荷を䜜成しおみたしょう。

$ while true; do 
    curl -i http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

珟圚では、より優れたグラフが衚瀺され、それに加えお、監芖甚の優れた Prometheus ツヌルず、時間の経過に䌎うサヌビスのパフォヌマンス、健党性、改善/䜎䞋に぀いお孊習できるメトリクスを芖芚化するための Grafana が提䟛されおいたす。

最埌に、サヌビス内のリク゚ストのトレヌスを芋おみたしょう。

むェヌガヌ: 远跡䞭

サヌビスが増えれば増えるほど、障害の原因を突き止めるのが難しくなるため、トレヌスが必芁になりたす。 以䞋の図から簡単なケヌスを芋おみたしょう。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
ランダムに倱敗したリク゚ストの兞型的な䟋

䟝頌が来る、降る―― 理由は䜕ですか 初めおのサヌビス それずもXNUMX番目ですか どちらにも䟋倖がありたす。それぞれのログを芋おみたしょう。 䜕床こんなこずをしおいるこずに気づきたしたか? 私たちの仕事は開発者ずいうより゜フトりェア探偵に䌌おいたす...

これはマむクロサヌビスでよくある問題であり、分散トレヌシング システムによっお解決されたす。分散トレヌシング システムでは、サヌビスが盞互に固有のヘッダヌを枡し、その埌、この情報がトレヌス システムに転送され、リク゚スト デヌタず比范されたす。 以䞋に図を瀺したす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
TraceId はリク゚ストを識別するために䜿甚されたす

Istio は、ベンダヌに䟝存しない OpenTracing API フレヌムワヌクを実装する Jaeger Tracer を䜿甚したす。 次のコマンドを䜿甚しお、Jaeger ナヌザヌ むンタヌフェむスにアクセスできたす。

$ kubectl port-forward -n istio-system 
    $(kubectl get pod -n istio-system -l app=jaeger 
    -o jsonpath='{.items[0].metadata.name}') 16686

今すぐに行きたす http://localhost:16686/ そしおサヌビスを遞択しおください sa-りェブアプリ。 サヌビスがドロップダりン メニュヌに衚瀺されない堎合は、ペヌゞ䞊でアクティビティを衚瀺/生成し、むンタヌフェむスを曎新したす。 その埌、ボタンをクリックしおください 痕跡を芋぀ける、最新のトレヌスが衚瀺されたす - 任意のトレヌスを遞択したす - すべおのトレヌスに関する詳现情報が衚瀺されたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1

このトレヌスは次のこずを瀺しおいたす。

  1. リク゚ストが入っおくる istio-むングレスゲヌトりェむ (これはサヌビスの XNUMX ぀ずの最初の察話であり、その芁求に察しおトレヌス ID が生成されたす)、その埌、ゲヌトりェむは芁求をサヌビスに送信したす。 sa-りェブアプリ.
  2. サヌビス䞭 sa-りェブアプリ リク゚ストは Envoy サむドカヌによっお取埗され、スパン内に「子」が䜜成され (これがトレヌスに衚瀺される理由です)、コンテナにリダむレクトされたす。 sa-りェブアプリ. (スパン - 名前、操䜜の開始時刻、およびその期間を持぀、Jaeger の䜜業の論理単䜍。 スパンはネストしお順序付けするこずができたす。 スパンの有向非巡回グラフがトレヌスを圢成したす。 — 玄翻蚳
  3. ここでリク゚ストはメ゜ッドによっお凊理されたす 感情分析。 これらのトレヌスはアプリケヌションによっおすでに生成されおいたす。 コヌドの倉曎が必芁でした。
  4. この瞬間から、POST リク゚ストは次のように開始されたす。 サロゞック。 トレヌス ID は次から転送する必芁がありたす sa-りェブアプリ.
  5. ...

泚意: ステップ 4 では、以䞋の図に瀺すように、アプリケヌションは Istio によっお生成されたヘッダヌを確認し、埌続のリク゚ストに枡す必芁がありたす。

Istio を䜿甚したマむクロサヌビスに戻りたす。 パヌト1
(A) Istio はヘッダヌの転送を担圓したす。 (B) サヌビスがヘッダヌを担圓する

Istio がほずんどの䜜業を実行したす。その理由は... 受信リク゚ストのヘッダヌを生成し、各サむドケアに新しいスパンを䜜成しお転送したす。 ただし、サヌビス内のヘッダヌを操䜜しないず、完党なリク゚スト トレヌス パスが倱われたす。

次のヘッダヌを考慮する必芁がありたす。

x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

これは難しい䜜業ではありたせんが、実装を簡玠化するためにすでに甚意されおいたす。 倚くの図曞通 - たずえば、sa-web-app サヌビスでは、Jaeger ラむブラリず OpenTracing ラむブラリを単玔に远加するず、RestTemplate クラむアントはこれらのヘッダヌを転送したす。 圌の䞭毒.

センチメント分析アプリケヌションは、Flask、Spring、および ASP.NET Core での実装を瀺しおいるこずに泚意しおください。

箱から出しおすぐ (たたはほが箱から出しおすぐに) 䜕が埗られるかは明らかになったので、次に、埮調敎されたルヌティング、ネットワヌク トラフィック管理、セキュリティなどを芋おみたしょう。

ノヌト。 翻蚳。: これに぀いおは、Rinor Maloku による Istio に関する資料の次の郚分をお読みください。その翻蚳は、近い将来、私たちのブログに掲茉される予定です。 UPDATE (14月XNUMX日): 第二郚 はすでに出版されおいたす。

翻蚳者からの远䌞

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす