Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
KubeCon + CNCon Europe 2022 Recap ~ Istio Today and Tomorrow: Sidecars and Beyond
Search
ksudate
November 24, 2022
Programming
0
400
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
Share
More Decks by ksudate
See All by ksudate
ZOZOTOWNにおけるKubernetes Cluster Upgradeの これまでとこれから
ksudate
0
760
KubeCon + CNCon Europe 2023 Recap Flux Beyond Git: Harnessing the Power of OCI
ksudate
1
14k
分散負荷試験の自動化を実現するGatling Operatorの紹介
ksudate
1
3.7k
PodのAZ分散を実現する Pod Topology Spread ConstraintsとDescheduler
ksudate
1
580
Other Decks in Programming
See All in Programming
品質とスピードを両立: TypeScriptの柔軟な型システムをバックエンドで活用する
kosui
8
2.2k
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
370
CircleCIを活用して AWSへの継続的デリバリーを 実践する
coconala_engineer
1
230
スクラムガイドのスプリントレトロスペクティブを改めて読みかえしてみた / Re-reading the Sprint Retrospective Section in the Scrum Guide
mackey0225
3
330
Ruby Pattern Matching
bkuhlmann
0
920
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
22
15k
AWS Application Composerで始める、 サーバーレスなデータ基盤構築 / 20240406-jawsug-hokuriku-shinkansen
kasacchiful
1
250
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
100
受託開発でGitLab CI を活用していく
xiombatsg
1
270
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
今、知っておきたい! 生成AIエージェントの世界
elith
3
340
Doctrine ORMでValue Objectを扱う方法4選 #phpstudy / 4 ways to handle Value Objects with Doctrine ORM
77web
4
110
Featured
See All Featured
Building Effective Engineering Teams - LeadDev
addyosmani
27
1.8k
Web development in the modern age
philhawksworth
202
10k
Building a Modern Day E-commerce SEO Strategy
aleyda
16
6.4k
A Modern Web Designer's Workflow
chriscoyier
688
190k
The Language of Interfaces
destraynor
151
23k
Optimizing for Happiness
mojombo
370
69k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Visualization
eitanlees
135
14k
What's new in Ruby 2.0
geeforr
337
31k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
658
120k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.1k
Principles of Awesome APIs and How to Build Them.
keavy
120
16k
Transcript
KubeCon + CNCon Europe 2022 Recap Istio Today and Tomorrow:
Sidecars and Beyond Kubernetes Meetup Tokyo #54 株式会社ZOZO 技術本部 SRE部 ECプラットフォーム基盤SREブロック 巣立 健太郎 Copyright © ZOZO, Inc. 1
© ZOZO, Inc. 株式会社ZOZO 技術本部 SRE部 ECプラットフォーム基盤SREブロック 巣立 健太郎 /
Kentaro Sudate Kubecon初参加🔰 Twitter: @ksudate 2
© ZOZO, Inc. 3 会場
© ZOZO, Inc. 4 会場飯
© ZOZO, Inc. Agenda 5 • セッション概要 • セッション紹介 •
ZOZOTOWNのIstio Service Meshと運用課題 • Ambient Meshが解決するIstio Service Meshの運用課題
© ZOZO, Inc. セッション概要 6 Slide https://static.sched.com/hosted_files/kccncna2022/08/Istio %20Maintainer%20Session.pptx.pdf Video https://youtu.be/bKNngrE4cc8
© ZOZO, Inc. セッション概要 7 2022年9月にIstioの新しいアーキテクチャであるAmbient Meshが発表され ました。 このセッションでは既存のSidecarの課題とSidecarlessであるAmbient Mesh
により解決される課題について紹介されました。
© ZOZO, Inc. その前に… 8
© ZOZO, Inc. Service Meshとは 9 • Applicationのコードに追加することなく、Observability、トラフィック管 理、セキュリティなどの機能を透過的に追加できる ◦
Service Meshなし ▪ サービスAではJavaでRetry実装、サービスBではGoでRetry実装 ◦ Serice Meshあり ▪ istioの場合、istio-proxyでRetry処理
© ZOZO, Inc. Istioとは 10 • Service Meshを実現するOSS • Application
Podにistio-proxyコンテナをデプロイすることで実現 https://istio.io/latest/about/service-mesh/#how-it-works
© ZOZO, Inc. Sidecarが抱える課題 11 • Sidecarのinjectが必要 • AppコンテナとSidecarの起動・終了時のシーケンスについて •
SidecarをUpgradeすると、Applicationの再起動が必要 • Kubernetes Jobとの相性は?Server-send-firstプロトコルとの相性は?
© ZOZO, Inc. Sidecarが抱える課題 12 • Sidecarのinjectが必要 ◦ Application PodにSidecarコンテナをデプロイする必要がある
◦ Podの数が多くなるほどSidecarコンテナの数も多くなりその分リソース が必要になる…
© ZOZO, Inc. Sidecarが抱える課題 13 • AppコンテナとSidecarの起動・終了時のシーケンスについて ◦ Sidecarが起動する前にAppコンテナが起動し、通信しようとしてErrorに なる
◦ SidecarがAppコンテナの終了を待たず先に終了してAppコンテナが通信 できなくなる
© ZOZO, Inc. Sidecarが抱える課題 14 • AppコンテナとSidecarの起動・終了時のシーケンスについて ◦ Sidecarが起動する前にAppコンテナが起動し、通信しようとしてError になる
© ZOZO, Inc. Sidecarが抱える課題 15 • AppコンテナとSidecarの起動・終了時のシーケンスについて ◦ SidecarがAppコンテナの終了を待たず先に終了してAppコンテナが通信 できなくなる
© ZOZO, Inc. Sidecarが抱える課題 16 • AppコンテナとSidecarの起動・終了時のシーケンスについて ◦ Istioでは対策としていくつかのOptionが提供されているが複雑なことに 変わりはない…
© ZOZO, Inc. Sidecarが抱える課題 17 • SidecarをUpgradeすると、アプリケーションの再起動が必要 ◦ Sidecarをアップグレードする際にApplication PodをRestartする必要が
ある ◦ アップグレードの度にSidecarがInjectされたDeploymentを全てRestart するのは辛い…
© 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
© ZOZO, Inc. Sidecar、辛い… 19
© ZOZO, Inc. そこで、Ambient Mesh 20
© ZOZO, Inc. Ambient Meshとは? 21 • Sidecarless ◦ Before
1Pod/Container = 1 Proxy ◦ After 1Node = 1 ztunnel (Daemonset)
© ZOZO, Inc. Ambient Meshとは? 22 • レイヤーの分割 ◦ Ztunnelを利用したSecure
Overlay Layer ◦ Waypoint Proxyを利用したL7 Processing Layer
© ZOZO, Inc. Ambient Meshとは? 23 • Secure Overlay Layerの役割
◦ L4 Trafficのルーティング ◦ 全てのサービス接続にmTLSを使用 ◦ AuthorizationPolicyを利用したシンプルなL4レベルでの認可 ◦ TCPメトリクス・ロギングの提供 これらは、Ztunnel (zero-trust tunnel)によって実装されている
© ZOZO, Inc. Secure Overlay Layer 24 • Ztunnel ◦
Daemonsetとして動作 ◦ 現在のベースはEnvoy Proxy ▪ 今後、シンプルで高性能なレイヤ4コンポーネントに変更される予定 • https://github.com/istio/istio/issues/40956
© ZOZO, Inc. Secure Overlay Layer 25 • Ztunnel ▪
全てのTrafficはHTTP Connectを使用したmTLS接続でトンネル化 (HBONE) • データプレーンのプロキシ間の専用ポート(15008)で動作 • 既存のIstioの動作と同様にSPIFEE IDを使用
© ZOZO, Inc. Secure Overlay Layer 26 より詳しくは、solo.ioの以下の記事がおすすめ https://www.solo.io/blog/understanding-istio-ambient-ztunnel-and-secure-overlay/
© ZOZO, Inc. L7 Processing Layer 27 • L7 Processing
Layerの役割 ◦ HTTPルーティング、Retry、Timeout、Circuit breaking、etc... ◦ AuthorizationPolicyを利用した高度なL7レベルでの認可 ◦ HTTPメトリクス、アクセスログ、トレースの提供 これらは、Waypoint Proxyによって実装されている
© 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/
© ZOZO, Inc. 結局、何が嬉しいの? 29
© ZOZO, Inc. 結局、何が嬉しいの? 30 • アプリケーションを再起動しなくて導入・更新が可能 🎉 ◦ Upgrade時、Podの再起動が必要ない!
• レイヤーを分割したことで、段階的な導入が可能 🎉 ◦ Meshなし → Secure Overylay → 完全なL7 Processing • Sidecarに比べて、必要なリソースが大幅に削減可能 🎉
© ZOZO, Inc. DEMO 31
© ZOZO, Inc. 32 Install Istio with Ambient Mode
© ZOZO, Inc. 33 What is installed? • Istio CNI
Plugin ◦ 同じノードに同居するすべてのポッドをチェックし、Ambient Meshの一部で あるかどうかを確認し、Ztunnel にRedirectされるように構成する • ztunnel • Istiod • Istio ingress gateway
© ZOZO, Inc. 34 構成 https://istio.io/latest/blog/2022/get-started-ambient/#adding-your-application-to-the-ambient-mesh
© ZOZO, Inc. ZOZOTOWNのIstio Service Mesh 35 ZOZOTOWNのマイクロサービス基盤では、Istioを用いたService Meshを構築して いる。詳しくは、Techblogをご覧下さい。
https://techblog.zozo.com/entry/zozotown-microservices-alb-istio
© ZOZO, Inc. Istioの運用課題 36 1. 増え続けるSidecarのリソース 2. AppコンテナとSidecarの起動・終了時のシーケンスが複雑 3.
頻度の高いリリースへの追従とそれに伴うUpgradeにかかる工数
© ZOZO, Inc. Istioの運用課題 その1 37 • 増え続けるSidecarのリソース ◦ Sidecar構成では1Podあたり1Proxy必要となる
◦ CPU/MemoryはそのPodが受ける最大Request数を元に設定 ▪ 普段は少ないリソースで足りるが、最大の使用量を想定してCPU/Memoryを 割り当てる必要がある
© 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
© 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/
© 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/
© ZOZO, Inc. Istioの運用課題 その2 41 • AppコンテナとSidecarの起動・終了時のシーケンスが複雑 ◦ Sidecarが起動する前にAppコンテナが起動し、通信しようとしてErrorになる
◦ SidecarがAppコンテナの終了を待たず先に終了してAppコンテナが通信できな くなる
© ZOZO, Inc. Ambient Meshが解決するIstioの運用課題 その2 42 • AppコンテナとSidecarの起動・終了時のシーケンスが複雑 ◦
Ambient MeshではSidecarlessなので全て解決 🎉 ◦ ApplicationはMeshを意識することなく起動・終了することができる 🎉
© ZOZO, Inc. Istioの運用課題 その3 43 • 頻度の高いリリースへの追従とそれに伴うUpgradeにかかる工数 ◦ Istioはリリースサイクル、EOLサイクルが短い
◦ その分、Upgradeの頻度も多くなる 安全かつ少ない工数でUpgradeを完了できることが求められる
© ZOZO, Inc. Istioの運用課題 その3 44 • 現状のUpgrade手順 1. Control
Plane & Ingress Gateway In-place Upgrade 2. Data Plane Upgrade a. 各MicroserviceのDeploymentを再起動し、Upgrade
© ZOZO, Inc. Istioの運用課題 その3 45 • 現状のUpgrade手順 1. Control
Plane & Ingress Gateway In-place Upgrade 2. Data Plane Upgrade a. 各MicroserviceのDeploymentを再起動し、Upgrade
© ZOZO, Inc. Istioの運用課題 その3 46 • 各MicroserviceのDeploymentを再起動し、Upgradeを行う ◦ Microserviceが増えるたびに対象のDeploymentも増える。
◦ PRDはペア作業にてDeploymentを再起動 ◦ 再起動時は、各マイクロサービスのSREへ連絡 増え続けるMicroserviceを全て再起動するのは作業的にもメンタル的にも辛い… 各MicroserviceのSREとのコミュニケーションコストも高くて大変…
© ZOZO, Inc. Ambient Meshが解決するIstioの運用課題 その3 47 • 頻度の高いリリースへの追従とそれに伴うUpgradeにかかる工数 ◦
Ambient Meshでは、ZtunnelとWaypoint ProxyのUpgradeでOK 🎉 ◦ Application Podの再起動は必要ない 🎉
© ZOZO, Inc. 注意点 48 • Ambient Meshは、2022年11月時点ではProduction環境での利用は推奨されて いません。 2023年の本番環境への移行に向けて開発中です。
https://istio.io/latest/blog/2022/introducing-ambient-mesh/
© 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楽しかった🔰
© 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
None