サービスメッシュとistio - KanamaruK/Kanamaru20190529 GitHub Wiki

  • 細かい設定方法等は、プライベートへ記載。
  • ここでは、個人用に解釈、翻訳したざっくりなやーつを記載。

そもそもサービスメッシュとは?

背景

世は大マイクロ時代!

  • 主目的は迅速なソフトウェア開発
  • コンテナブームとかなんやかんやで世間では、マイクロサービス化が進んだ

だがしかし

マイクロサービスは、今まで一つだったものをマイクロ化したりしようとすると、
連携させる必要があるものなどが複雑に紐づけないといけないなど、課題が多い

マイクロサービス課題

  • Service Discovery(サービスの発見)
    • 今まではDNSとかロードバランサでやってたもの
    • あとはアプリの設定ファイルとかで呼び出したり、指定してたのかな
    • これをマイクロ化したサービスのデプロイとかリリースの度に更新だと、迅速な開発と食い違う
  • Fault Isolation(障害の分離)
    • 一つの障害で、大規模な連鎖になるのを防ぎたい
    • サーキットブレイカーで遮断したいが、これもサービス毎にやるのはとても手間だしNot迅速
  • Observability(分散トレーシング)
    • マイクロさんは全体の把握ムズイ(複雑にこんがらがった社会)
    • レスポンス悪化とかあったときに、問題特定するためにトレーシングしたい
  • Security(認証・認可)
    • マイクロなサービス個々に、認証、認可の設定とかry
    • 管理も作業もコスト高いしね

助けてドラえもんーー

  • ててててん サービスメッシューー

本題

サービスメッシュとは??

  • マイクロなサービスたち、個々に設定とかしたらマイクロサービスの本懐からずれちゃうねー
  • Kubernetsみたいに、上の課題を網羅して、管理コントロールできる仕組み欲しいよねー
  • その仕組み、概念がサービスメッシュ

どんな仕組みなの??

  • 個々のマイクロなサービス達に「サイドカープロキシ」っていうのトッピングぅ
  • サービスじゃなく、このサイドカーに課題で上がった部分やってもらう
  • 多分ラベルとかで管理して、一斉に設定とか変更とかコントロールとかする

んで??

  • サービス同士のつながりは、全部このサイドカー経由にする
  • そうすると、サービス同士がメッシュ状につながる
  • ゆえに侘助

んでそんなサービスメッシュの実現するソフトウェアがIstio

Istio

上にも書いたけど、サービスメッシュを実現するソフトウェア。

その実現のための仕組みをかみ砕いてくなう

まずは特徴

  • マルチ・プラットフォーム対応
  • アプリケーションに依存しないこと
  • 「ポリシー」を基準とした運用

要はアプリとかサービス側に依存しないで、どこでも動く。
動かし方は、ポリシー定義だから、Kubernetesの宣言的であることと似てる

機能と仕組みの考え方

大きく二つに分けれる

  • Data Plane(データプレーン)
    • プロキシによるマイクロサービス間の通信を管理
    • Istio用に拡張された「Envoy」をサイドカープロキシとして、KubernetesのPod内にデプロイする
  • Control Plane(コントロールプレーン)
    以下の3つのコンポーネントが含まれる
    • Mixer
      Envoyから各サービスのデータを収集し、その情報を元にアクセスコントロールを行うコンポーネント
    • Pilot
      Envoyのサービスディスカバリやトラフィック管理を担当するコンポーネント
    • Citadel
      サービス間認証とエンドユーザ認証を実現するコンポーネント

アーキテクチャもやっぱりKubernetesとよく似てる

コントロールとかを担うマスター群があって、
マスターの中にも、それぞれ役割に応じたkubeletさんとか、apiさんががいるみたいな

Enjoy Envoy!

Istioのデータプレーンに利用されているが、これ自体もソフトウェア。
サイドカープロキシとしてデプロイされるので、 各サービスに対してアプリケーションの改修なく、機能を付加できる

どんな機能あるの?

Istioが提供する機能は3つに大別される。

  • 「トラフィック管理」
  • 「セキュリティ」
  • 「テレメトリー」

細かくリストアップすると、以下

  • サービスディスカバリ
  • 負荷分散
  • TLS終端
  • HTTP/2 と gRPC のプロキシ
  • サーキットブレーカー
  • ヘルスチェック
  • トラフィックの分割(A/Bテスト)
  • Fault injection(フォールト・インジェクション)
  • メトリクスの取得

何かしっくりくるイメージないかなー

ねるとん紅鯨団的な集団お見合いで考えてみよう。

■登場人物、団体

  • 各種サービス
    • 集団お見合いする一般の人たち
  • Control Plane
    • お見合いパーティーの会社
    • Mixer、Pilot、Citadelたちが所属している
    • 従業員たちは現場をモニタリングしながら支持出す
  • Date Plane
    • 集団お見合いしてる場所
  • Envoy
    • 株式会社Control Planeと連携して、お見合いする人たち一人一人につくコンサルタント
    • 現地入りする。
  • Mixer
    • Envoyさんから情報とかもらって、全体コントロールする人
  • Pilot
    • 条件に合う子をディスカバリしたり、アタックの仕方を指示してくれる
  • Citadel
    • 条件満たしてない人をはじくために、お高い子とかは合言葉とか認証かけてたりする
    • そこら辺の合言葉とかを管理する人

とりあえずイメージこれでいいや

■Envoyさんマジぱねぇっす

  • お客さん増えたら、また新しいEnvoyさんが投入される。
  • 人気の子がいたり、やばそうな子がいたら、分散させたり、サーキットブレイクして拒絶してくれる
    • ちょっとあの子人気あるから、あっちの子にしましょう
    • 年収1000万以上ない人はちょっと。。と申しておりますゆえ、お引き取りを
  • そこら辺をお客さんにやらせず、全部やってくれる
  • お客さんは自分のアピールだけしてくれればいいよ

これしっくりきそう。各機能も当て込んでハマったらめっちゃ分かりやすそう


その他

メモ