$30 off During Our Annual Pro Sale. View Details »

KubeCon + CNCon Europe 2022 Recap ~ Istio Today and Tomorrow: Sidecars and Beyond

ksudate
November 24, 2022

KubeCon + CNCon Europe 2022 Recap ~ Istio Today and Tomorrow: Sidecars and Beyond

Kubernetes Meetup Tokyo #54 (https://k8sjp.connpass.com/event/264501/)
の登壇資料になります

ksudate

November 24, 2022
Tweet

More Decks by ksudate

Other Decks in Programming

Transcript

  1. KubeCon + CNCon Europe 2022 Recap Istio Today and Tomorrow:

    Sidecars and Beyond Kubernetes Meetup Tokyo #54 株式会社ZOZO 技術本部 SRE部 ECプラットフォーム基盤SREブロック 巣立 健太郎 Copyright © ZOZO, Inc. 1
  2. © ZOZO, Inc. 株式会社ZOZO 技術本部 SRE部 ECプラットフォーム基盤SREブロック 巣立 健太郎 /

    Kentaro Sudate Kubecon初参加🔰 Twitter: @ksudate 
 
 2
  3. © ZOZO, Inc. 3 会場

  4. © ZOZO, Inc. 4 会場飯

  5. © ZOZO, Inc. Agenda 5 • セッション概要 • セッション紹介 •

    ZOZOTOWNのIstio Service Meshと運用課題 • Ambient Meshが解決するIstio Service Meshの運用課題
  6. © ZOZO, Inc. セッション概要 6 Slide https://static.sched.com/hosted_files/kccncna2022/08/Istio %20Maintainer%20Session.pptx.pdf Video https://youtu.be/bKNngrE4cc8

  7. © ZOZO, Inc. セッション概要 7 2022年9月にIstioの新しいアーキテクチャであるAmbient Meshが発表され ました。 このセッションでは既存のSidecarの課題とSidecarlessであるAmbient Mesh

    により解決される課題について紹介されました。
  8. © ZOZO, Inc. その前に… 8

  9. © ZOZO, Inc. Service Meshとは 9 • Applicationのコードに追加することなく、Observability、トラフィック管 理、セキュリティなどの機能を透過的に追加できる ◦

    Service Meshなし ▪ サービスAではJavaでRetry実装、サービスBではGoでRetry実装 ◦ Serice Meshあり ▪ istioの場合、istio-proxyでRetry処理
  10. © ZOZO, Inc. Istioとは 10 • Service Meshを実現するOSS • Application

    Podにistio-proxyコンテナをデプロイすることで実現 https://istio.io/latest/about/service-mesh/#how-it-works
  11. © ZOZO, Inc. Sidecarが抱える課題 11 • Sidecarのinjectが必要 • AppコンテナとSidecarの起動・終了時のシーケンスについて •

    SidecarをUpgradeすると、Applicationの再起動が必要 • Kubernetes Jobとの相性は?Server-send-firstプロトコルとの相性は?
  12. © ZOZO, Inc. Sidecarが抱える課題 12 • Sidecarのinjectが必要 ◦ Application PodにSidecarコンテナをデプロイする必要がある

    ◦ Podの数が多くなるほどSidecarコンテナの数も多くなりその分リソース が必要になる…
  13. © ZOZO, Inc. Sidecarが抱える課題 13 • AppコンテナとSidecarの起動・終了時のシーケンスについて ◦ Sidecarが起動する前にAppコンテナが起動し、通信しようとしてErrorに なる

    ◦ SidecarがAppコンテナの終了を待たず先に終了してAppコンテナが通信 できなくなる
  14. © ZOZO, Inc. Sidecarが抱える課題 14 • AppコンテナとSidecarの起動・終了時のシーケンスについて ◦ Sidecarが起動する前にAppコンテナが起動し、通信しようとしてError になる

  15. © ZOZO, Inc. Sidecarが抱える課題 15 • AppコンテナとSidecarの起動・終了時のシーケンスについて ◦ SidecarがAppコンテナの終了を待たず先に終了してAppコンテナが通信 できなくなる

  16. © ZOZO, Inc. Sidecarが抱える課題 16 • AppコンテナとSidecarの起動・終了時のシーケンスについて ◦ Istioでは対策としていくつかのOptionが提供されているが複雑なことに 変わりはない…

  17. © ZOZO, Inc. Sidecarが抱える課題 17 • SidecarをUpgradeすると、アプリケーションの再起動が必要 ◦ Sidecarをアップグレードする際にApplication PodをRestartする必要が

    ある ◦ アップグレードの度にSidecarがInjectされたDeploymentを全てRestart するのは辛い…
  18. © ZOZO, Inc. Sidecarが抱える課題 18 • Kubernetes Jobとの相性は?Server-send-firstプロトコルとの相性は? ◦ Jobは完了してもSidecarは終了しないのでJobは実行され続ける…

    ▪ https://github.com/istio/istio/issues/6324 ◦ IstioではMySQLなどのServer-send-first protocol (Clientではなく Serverが最初にデータを送る)を利用する場合、いくつかの問題がある ▪ https://istio.io/latest/about/faq/#mysql-with-mtls
  19. © ZOZO, Inc. Sidecar、辛い… 19

  20. © ZOZO, Inc. そこで、Ambient Mesh 20

  21. © ZOZO, Inc. Ambient Meshとは? 21 • Sidecarless ◦ Before

    1Pod/Container = 1 Proxy ◦ After 1Node = 1 ztunnel (Daemonset)
  22. © ZOZO, Inc. Ambient Meshとは? 22 • レイヤーの分割 ◦ Ztunnelを利用したSecure

    Overlay Layer ◦ Waypoint Proxyを利用したL7 Processing Layer
  23. © ZOZO, Inc. Ambient Meshとは? 23 • Secure Overlay Layerの役割

    ◦ L4 Trafficのルーティング ◦ 全てのサービス接続にmTLSを使用 ◦ AuthorizationPolicyを利用したシンプルなL4レベルでの認可 ◦ TCPメトリクス・ロギングの提供 これらは、Ztunnel (zero-trust tunnel)によって実装されている
  24. © ZOZO, Inc. Secure Overlay Layer 24 • Ztunnel ◦

    Daemonsetとして動作 ◦ 現在のベースはEnvoy Proxy ▪ 今後、シンプルで高性能なレイヤ4コンポーネントに変更される予定 • https://github.com/istio/istio/issues/40956
  25. © ZOZO, Inc. Secure Overlay Layer 25 • Ztunnel ▪

    全てのTrafficはHTTP Connectを使用したmTLS接続でトンネル化 (HBONE) • データプレーンのプロキシ間の専用ポート(15008)で動作 • 既存のIstioの動作と同様にSPIFEE IDを使用
  26. © ZOZO, Inc. Secure Overlay Layer 26 より詳しくは、solo.ioの以下の記事がおすすめ https://www.solo.io/blog/understanding-istio-ambient-ztunnel-and-secure-overlay/

  27. © ZOZO, Inc. L7 Processing Layer 27 • L7 Processing

    Layerの役割 ◦ HTTPルーティング、Retry、Timeout、Circuit breaking、etc... ◦ AuthorizationPolicyを利用した高度なL7レベルでの認可 ◦ HTTPメトリクス、アクセスログ、トレースの提供 これらは、Waypoint Proxyによって実装されている
  28. © ZOZO, Inc. L7 Processing Layer 28 • Waypoint Proxy

    ◦ Gateway APIを利用してデプロイが可能 ◦ ベースはEnvoy Proxy ◦ Waypoint ProxyをデプロイすることでVirtualServiceやDestinationRuleを 利用したHTTP Routingが可能 https://istio.io/latest/blog/2022/get-started-ambient/
  29. © ZOZO, Inc. 結局、何が嬉しいの? 29

  30. © ZOZO, Inc. 結局、何が嬉しいの? 30 • アプリケーションを再起動しなくて導入・更新が可能 🎉 ◦ Upgrade時、Podの再起動が必要ない!

    • レイヤーを分割したことで、段階的な導入が可能 🎉 ◦ Meshなし → Secure Overylay → 完全なL7 Processing • Sidecarに比べて、必要なリソースが大幅に削減可能 🎉
  31. © ZOZO, Inc. DEMO 31

  32. © ZOZO, Inc. 32 Install Istio with Ambient Mode

  33. © ZOZO, Inc. 33 What is installed? • Istio CNI

    Plugin ◦ 同じノードに同居するすべてのポッドをチェックし、Ambient Meshの一部で あるかどうかを確認し、Ztunnel にRedirectされるように構成する • ztunnel • Istiod • Istio ingress gateway
  34. © ZOZO, Inc. 34 構成 https://istio.io/latest/blog/2022/get-started-ambient/#adding-your-application-to-the-ambient-mesh

  35. © ZOZO, Inc. ZOZOTOWNのIstio Service Mesh 35 ZOZOTOWNのマイクロサービス基盤では、Istioを用いたService Meshを構築して いる。詳しくは、Techblogをご覧下さい。

    https://techblog.zozo.com/entry/zozotown-microservices-alb-istio
  36. © ZOZO, Inc. Istioの運用課題 36 1. 増え続けるSidecarのリソース 2. AppコンテナとSidecarの起動・終了時のシーケンスが複雑 3.

    頻度の高いリリースへの追従とそれに伴うUpgradeにかかる工数
  37. © ZOZO, Inc. Istioの運用課題 その1 37 • 増え続けるSidecarのリソース ◦ Sidecar構成では1Podあたり1Proxy必要となる

    ◦ CPU/MemoryはそのPodが受ける最大Request数を元に設定 ▪ 普段は少ないリソースで足りるが、最大の使用量を想定してCPU/Memoryを 割り当てる必要がある
  38. © ZOZO, Inc. Ambient Meshが解決するIstioの運用課題 その1 38 • 増え続けるSidecarのリソース ◦

    Sidecar ▪ 1 Pod = 1 Proxy ◦ Ambient Mesh ▪ 1 Node = 1 ztunnel ▪ 1 Service Account = 1 Waypoint Proxy
  39. © ZOZO, Inc. Ambient Meshが解決するIstioの運用課題 その1 39 例えば、3Nodeで動作する以下のような構成のApplicationの場合、 • Sidecar構成では、6Podなので6つのコンテナが必要

    • Ambient Meshでは、3 Ztunnelと1 WaypointProxyで4つのコンテナが必要 https://www.solo.io/blog/what-istio-ambient-mesh-means-for-your-wallet/
  40. © ZOZO, Inc. Ambient Meshが解決するIstioの運用課題 その1 40 例えばInstanceを3つにスケールすると… • Sidecar構成では6Pod

    * 3なので18個のコンテナが必要 • Ambient Meshでは、必要なのは4つのコンテナのまま変わらない 🎉 https://www.solo.io/blog/what-istio-ambient-mesh-means-for-your-wallet/
  41. © ZOZO, Inc. Istioの運用課題 その2 41 • AppコンテナとSidecarの起動・終了時のシーケンスが複雑 ◦ Sidecarが起動する前にAppコンテナが起動し、通信しようとしてErrorになる

    ◦ SidecarがAppコンテナの終了を待たず先に終了してAppコンテナが通信できな くなる
  42. © ZOZO, Inc. Ambient Meshが解決するIstioの運用課題 その2 42 • AppコンテナとSidecarの起動・終了時のシーケンスが複雑 ◦

    Ambient MeshではSidecarlessなので全て解決 🎉 ◦ ApplicationはMeshを意識することなく起動・終了することができる 🎉
  43. © ZOZO, Inc. Istioの運用課題 その3 43 • 頻度の高いリリースへの追従とそれに伴うUpgradeにかかる工数 ◦ Istioはリリースサイクル、EOLサイクルが短い

    ◦ その分、Upgradeの頻度も多くなる 安全かつ少ない工数でUpgradeを完了できることが求められる
  44. © ZOZO, Inc. Istioの運用課題 その3 44 • 現状のUpgrade手順 1. Control

    Plane & Ingress Gateway In-place Upgrade 2. Data Plane Upgrade a. 各MicroserviceのDeploymentを再起動し、Upgrade
  45. © ZOZO, Inc. Istioの運用課題 その3 45 • 現状のUpgrade手順 1. Control

    Plane & Ingress Gateway In-place Upgrade 2. Data Plane Upgrade a. 各MicroserviceのDeploymentを再起動し、Upgrade
  46. © ZOZO, Inc. Istioの運用課題 その3 46 • 各MicroserviceのDeploymentを再起動し、Upgradeを行う ◦ Microserviceが増えるたびに対象のDeploymentも増える。

    ◦ PRDはペア作業にてDeploymentを再起動 ◦ 再起動時は、各マイクロサービスのSREへ連絡 増え続けるMicroserviceを全て再起動するのは作業的にもメンタル的にも辛い… 各MicroserviceのSREとのコミュニケーションコストも高くて大変…
  47. © ZOZO, Inc. Ambient Meshが解決するIstioの運用課題 その3 47 • 頻度の高いリリースへの追従とそれに伴うUpgradeにかかる工数 ◦

    Ambient Meshでは、ZtunnelとWaypoint ProxyのUpgradeでOK 🎉 ◦ Application Podの再起動は必要ない 🎉
  48. © ZOZO, Inc. 注意点 48 • Ambient Meshは、2022年11月時点ではProduction環境での利用は推奨されて いません。 2023年の本番環境への移行に向けて開発中です。

    https://istio.io/latest/blog/2022/introducing-ambient-mesh/
  49. © ZOZO, Inc. まとめ 49 • Ambient Meshは今後Istioの最良の選択肢になる • Ambient

    Meshを試す際は、solo.io ACADEMYがおすすめ https://academy.solo.io/get-started-with-istio-ambient-mesh-with-istio-ambient-mesh- foundation-certification • 初のKubecon楽しかった🔰
  50. © ZOZO, Inc. 参考リンク 50 • https://istio.io/latest/blog/2022/get-started-ambient/ • https://istio.io/latest/blog/2022/introducing-ambient-mesh/ •

    https://www.solo.io/blog/understanding-istio-ambient-ztunnel-and-secure-overlay/ • https://www.solo.io/blog/what-istio-ambient-mesh-means-for-your-wallet/ • (Ambient Mesh 開発ブランチ) https://github.com/istio/istio/commits/experimental-ambient
  51. None