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...
Search
ksudate
November 24, 2022
Programming
1
520
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
2
1.7k
KubeCon + CNCon Europe 2023 Recap Flux Beyond Git: Harnessing the Power of OCI
ksudate
1
17k
分散負荷試験の自動化を実現するGatling Operatorの紹介
ksudate
1
4.4k
PodのAZ分散を実現する Pod Topology Spread ConstraintsとDescheduler
ksudate
1
740
Other Decks in Programming
See All in Programming
Rails アプリ地図考 Flush Cut
makicamel
1
130
Amazon Q Developer Proで効率化するAPI開発入門
seike460
PRO
0
120
ソフトウェアエンジニアの成長
masuda220
PRO
12
2.1k
DROBEの生成AI活用事例 with AWS
ippey
0
140
Better Code Design in PHP
afilina
0
160
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
250
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
16
3.5k
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
220
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
220
楽しく向き合う例外対応
okutsu
0
580
CDK開発におけるコーディング規約の運用
yamanashi_ren01
2
240
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
720
Featured
See All Featured
Being A Developer After 40
akosma
89
590k
Statistics for Hackers
jakevdp
797
220k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Music & Morning Musume
bryan
46
6.4k
Code Review Best Practice
trishagee
67
18k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Unsuck your backbone
ammeep
669
57k
Git: the NoSQL Database
bkeepers
PRO
427
65k
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