7. Cloud OnAir
スケーリングの限界
ホストリソース
(CPU / RAM) の増強
垂直スケーリング 水平スケーリング
ホストの台数を増やす
app
html
service A service B
mvcjs
app
html
service A service B
mvcjsapp
html
service A service B
mvcjsapp
html
service A service B
mvcjs
8. Cloud OnAir
app
app
app
マイクロサービスとは
Thoughtworks 社の James Lewis 氏と Martin Fowler 氏が 2014 年に提唱
● 機能毎に独立したアプリケーション
(サービス)に分割
● 各サービスは単一の目的をもつ
● 分散システム、サービス間は疎結合、
軽量な API などでやり取り
service A
service B
service C
app
UI
app
UI
21. Cloud OnAir
● Kubernetes のマスターを
同一 リージョン内の
3 つのゾーンで持つ
● Kubernetes API に対する
99.95% の SLA
● デフォルトで 3 つのゾーンで
Node を配置、1 から 4 まで
選択可能
● マスター側のメンテナンスが
あってもサービス断なし
Regional Clusters
Zone BZone A Zone C
Regional Control Plane
Nodes Nodes Nodes
22. Cloud OnAir
● セカンダリのゾーンの
Disk に対してデータを
ミラーリング
● ゾーン障害があった場合、
GKE はコンテナを
問題のないゾーンに
マイグレーション、強制的に
ミラーリングしてある Disk を
アタッチ
Regional Persistent Disks Beta
Zone BZone A Zone C
Regional Control Plane
Nodes Nodes Nodes
23. Cloud OnAir
従来の GKE のスケーリング機能
- HPA : Pod の水平スケーリング
- VPA : Pod の垂直スケーリング
- CA : Node の水平スケーリング
Node Auto-Provisioning (NAP) は
上記と一緒に動作し、workload に
最適なインスタンスを使って新しい
Node Pool を作成する。
Node Auto-Provisioning Beta
Master
1. Deploy new large
workload
2. Scheduler
determines existing
node pool’s instance
types are too small for
the new workload
3. Provisions new node
pool with bigger
instances
4. Over time, HPA, CA,
and NAP will work
together to optimize
the cluster
Node pool A
Nodes
Node pool B
Nodes
24. Cloud OnAir
Public IP を持たない Nodes を
利用可能。
Master は Public IP を持つ必要が
あるが、Firewall で許可された
ネットワークからのみアクセス
可能。
Private Cluster
Master
Nodes
25. Cloud OnAir
HTTP(S) ロードバランサーから
直接 Pod の IP を参照
“double-hop” 問題を解決
Latency とルーティング性能を改善
VPC-native clusters かつ kubernetes
version 1.10+ で
利用可能
Container Native Loadbalancing Beta
Master
CC
Nodes
C
Nodes
47. Cloud OnAir
Istio のアーキテクチャ
Pilot: Envoy と連携しサービス間の
通信を制御
Envoy: ネットワークプロキシ
Mixer: ポリシー管理、
テレメトリーサービスとの連携
Citadel: 相互 TLS、証明書発行
Control Plane API
Mixer
Service A Service B
proxy proxy
HTTP/1.1, HTTP/2,
gRPC or TCP --
with or without
mTLS
Pilot Citadel
Config data
to Envoys
TLS certs to
Envoys
Policy checks,
telemetry
50. Cloud OnAir
CA(Certificate Authority) として
相互 TLSで使われる鍵の管理や
証明書の発行を行う
Istio - Citadel
Service A Service B
proxy proxy
Issuing certs per
workload to allow
service-based
authentication and
authorization
Citadel
52. Cloud OnAir
リクエスト処理の流れ 1
サービス A のサイドカーとしてデプロイされた
Envoy がサービスの情報、ルーティングや
構成ポリシーを Pilot から取得。
Citadel が使われる場合は、 TLS 証明書も
配布される。
Mixer
Service A Service B
proxy proxy
Pilot Citadel
Routing and
load
balancing
config to
Envoys
TLS certs to
Envoys
53. Cloud OnAir
リクエスト処理の流れ 2
サービス A からサービス B にリクエストが発生。
クライアント側 (サービス A 側) の Envoy が
リクエストをインターセプト。
Envoy はどのように、どこへサービス B 宛の
リクエストをルーティングするか構成情報を
参照する。
Mixer
Service A Service B
proxy proxy
Pilot Citadel
54. Cloud OnAir
リクエスト処理の流れ 3
Envoy はリクエストを適切なサービスの
インスタンスへ転送する。
サーバー側 (サービス B 側) の Envoy が
当該リクエストをインターセプトする。
Mixer
Service A Service B
proxy proxy
Pilot Citadel
HTTP/1.1, HTTP/2,
gRPC or TCP --
with or without
mTLS
55. Cloud OnAir
リクエスト処理の流れ 4
サーバー側 (サービス B 側) の Envoy は
届いた
リクエストが許可されたものか Mixer に
問い合わせ確認する。 (ACL, Quota etc.)
Mixer
Service A Service B
proxy proxy
Pilot Citadel
Policy checks,
telemetry
56. Cloud OnAir
リクエスト処理の流れ 5
Mixer は適切なアダプター
( Policy Engine, Quota Adapter) に当該リクエストを
サービス B に転送してよいか true / false で Envoy
に返す。
Mixer
Service A Service B
proxy proxy
Pilot Citadel
Policy checks,
telemetry
PolicyEngine
Quota
Adaptor
57. Cloud OnAir
リクエスト処理の流れ 6
サーバー側 (サービス B 側) の Envoy はサービス B
にリクエストを転送し、レスポンスを受け取る。
Mixer
Service A Service B
proxy proxy
Pilot Citadel
58. Cloud OnAir
リクエスト処理の流れ 7
Envoy はレスポンスをサービス A へ転送する。
クライアント側 (サービス A 側) の Envoy が
インターセプトする。
Mixer
Service A Service B
proxy proxy
Pilot Citadel
59. Cloud OnAir
リクエスト処理の流れ 8
Mixer
Service A Service B
proxy proxy
Pilot Citadel
Logging
plugin
Monitoring
plugin
サーバー側 (サービス B 側) の Envoy はテレメトリを
Mixer に報告する。