Traffic Management with Istio

4cb5b950cfd0eabf5d6b828c951d4549?s=47 loftkun
July 11, 2019

Traffic Management with Istio

2019/07/11 #ふくばねてす node-2

https://fukubernetes.connpass.com/event/135117/

- Introduction
 - What is Istio?
 - What is a service mesh?
 - Why use Istio?
 - Core features
 - Traffic management
 - Architecture
- How to use
 - Install
 - Sidecar Injection
 - Apply rule
- Bookinfo
- Traffic Management
 - Request Routing
 - Traffic Shifting
 - Fault Injection (delay )
- Tools
 - Prometheus
 - Grafana
 - Kiali

4cb5b950cfd0eabf5d6b828c951d4549?s=128

loftkun

July 11, 2019
Tweet

Transcript

  1. Traffic Management with Istio 2019/07/11 #ふくばねてす node-2 loftkun

  2. About me • @loftkun • 将棋好き • 対局結果検索サイトなど公開してます • ⾳楽好き

    • ROCK IN JAPAN FESTIVAL ⾏きます • ピアノ習いたい • コンテナ好き、k8sは前職で使ってた、現職でも使いたい
  3. Event

  4. Bot 福岡新着ITイベント @ITEventFukuoka

  5. My k8s Environment

  6. Machine CPU Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz 6C/12T RAM

    64GB OS Ubuntu 17.10 k8s minikube v1.2.0 ( Kubernetes v1.15.0 ) kubectl v1.15.0 istio v1.2.2 helm v2.14.1
  7. minikube start vm-driver=virtualbox Container VM ( Node ) Minikube BareMetal

    ssh -fNL 12345:192.168.99.100:12345 loft@192.168.3.5 192.168.3.5 grafana service のnodePortが12345の場合 http://localhost:12345 でアクセスできるぞ 192.168.99.100 192.168.3.4 Minikube ssh でログイン可能
  8. minikube start vm-driver=none Container Minikube BareMetal 192.168.3.5 ( Node )

    grafana service のnodePortが12345の場合 http://192.168.3.5:12345 でアクセスできるぞ 192.168.3.4
  9. minikube start vm-driver=none Container Minikube BareMetal 192.168.3.5 ( Node )

    grafana service のnodePortが12345の場合 http://192.168.3.5:12345 でアクセスできるぞ 192.168.3.4 tcpdump –i docker0 全Pod間の通信をキャプチャできるぞ
  10. Agenda Introduction How to use Bookinfo Traffic Management Tools

  11. Introduction What is Istio?

  12. https://istio.io/ • サービスメッシュを構成するOSS • CNCF Platinum Member • Pod内にProxyコンテナ(Envoy)をSidecarとしてInjectionして利⽤する •

    ruleをapplyすることで様々な制御が可能(後ほどご紹介) • 便利なメトリクスや、サービスメッシュの可視化ツールも同梱されている • v1.2でDatadogへのメトリクス送信に対応 • Rancher 2.3 Preview 2 がIstioに対応
  13. None
  14. None
  15. What is Istio? • 既存の分散アプリケーションの上に透過的に重なる完全なオープンソースのサービス メッシュ • 分散型マイクロサービスアーキテクチャを正常にかつ効率的に実⾏でき、マイクロ サービスを安全に接続し、監視する統⼀的な⽅法を提供する https://istio.io/docs/concepts/what-is-istio/

  16. What is a service mesh? https://istio.io/docs/concepts/what-is-istio/ • 以下を含む • ディスカバリ

    • ロードバランシング • 障害回復 • メトリック • モニタリング • 複雑な運⽤要件も含む • A / Bテスト • カナリーロールアウト • レート制限 • アクセス制御 • エンドツーエンド認証など
  17. Why use Istio? • コードを変更することなく、ロードバランシング、サービス 間認証、監視などのサービスをdeployしたネットワーク を簡単に作成できる https://istio.io/docs/concepts/what-is-istio/

  18. Core features • Traffic management • Security • Observability (

    可観測性 ) • Platform support • Integration and customization https://istio.io/docs/concepts/what-is-istio/
  19. • Traffic management • サービス間のトラフィックとAPIコールの流れを制御できる • Security • 安全な通信チャネルを提供し、サービス通信の認証、承認、および暗号 化を⼤規模に管理

    • Observability(可観測性) • 強⼒なトレース、監視、およびログ記録機能 https://istio.io/docs/concepts/what-is-istio/
  20. • platform-independent (プラットフォーム⾮依存) • Kubernetes • Consul • VM •

    Integration and customization • 既存のソリューションと統合するように拡張およびカスタマイズできる • ACL • ログ記録 • 監視 • クォータ • 監査など https://istio.io/docs/concepts/what-is-istio/
  21. Proxy Proxy Architecture Proxy Mixer Pilot config metrics data plane

    control plane
  22. https://istio.io/docs/concepts/what-is-istio/ data plane a set of Proxies

  23. https://istio.io/docs/concepts/what-is-istio/ control plane manages and configures the proxies to route

    traffic
  24. https://istio.io/docs/concepts/what-is-istio/ Mixer collects telemetry data from the Envoy proxy and

    other services
  25. 帆︖

  26. Sea・・・ Kubernetes 操舵手(ギリシャ語) Helm 舵 tiller 舵柄(かじを操作するレバー) Istio 帆(ギリシャ語) Spinnaker

    大きな三角形の帆
  27. How to use Install à Sidecar Injection à Apply rule

  28. Install Use Helm? $ kubectl apply istio- demo.yaml Cluster has

    tiller? $ helm template istio | kubectl apply $ helm install istio N N Y Y Helm Chart • incubator/istioはメンテが⽌まってるので使わない • istio.ioのdoc記載の最新版をdownloadして使おう
  29. Sidecar Injection • 2way • Automatic • Manual $ kubectl

    label namespace my-namespace istio-injection=enabled 対象のnamespaceにラベルを設定しておくだけでOK! istioctl kube-injectコマンドを利⽤してSidecarを埋め込む $ kubectl apply -f < ( istioctl kube-inject -f my-manifests.yaml )
  30. Manual ( Helm Chart ) helm fetch stable/neo4j helm template

    neo4j-0.9.0.tgz > neo4j.yaml istioctl kube-inject -f ./neo4j.yaml > ./neo4j-injected.yaml kubectl apply –f ./neo4j-injected.yaml • chartのmanifestを出⼒する • istioctl kube-injectコマンドを利⽤し、Sidecarが埋め込まれたyaml を⽣成する • ⽣成したyamlをapplyする
  31. neo4j.yaml neo4j-injected.yaml

  32. neo4j.yaml neo4j-injected.yaml istio-proxyコンテナ

  33. Apply rule kubectl apply –f ./rule.yaml • Reviewsサービスへのリクエストをルーティングするルールの例 • VirtualService

    • Routing を定義する • その他様々な設定が可能(後ほどご紹介)
  34. Bookinfo Istioのサンプルアプリ

  35. review v1のレスポンス

  36. reload

  37. None
  38. review v2のレスポンス(⿊い星)

  39. reload

  40. None
  41. review v3のレスポンス(⾚い星)

  42. Architecture https://istio.io/docs/examples/bookinfo/

  43. Architecture round-robin ( by reviews service ) https://istio.io/docs/examples/bookinfo/

  44. After Sidecer Injection Letʼs Traffic Management !

  45. Traffic Management Routing, Shifting, Fault Injection

  46. Request Routing

  47. review v1のレスポンス(星なし)

  48. Request Routing (headers)

  49. review v1のレスポンス(星なし)

  50. None
  51. Canary Release に使えそう︕ review v2のレスポンス(⿊い星)

  52. Traffic Shifting

  53. review v1のレスポンス(星なし)

  54. Canary Release に使えそう︕ review v3のレスポンス(⾚い星)

  55. Fault Injection (delay ) Injected Delay : 7sec

  56. None
  57. None
  58. hard-corded Timeout : 10sec Injected Delay : 7sec

  59. hard-corded Timeout : 3sec Retry : 1 hard-corded Timeout :

    10sec Injected Delay : 7sec Chaos Engineering に使えそう︕
  60. None
  61. Other Traffic Managements • Circuit Breaking • Mirroring and more

    ! https://istio.io/docs/tasks/traffic-management/
  62. Tools 便利なOSSたち

  63. Prometheus • 経路毎のメトリクスを取得できる • istio_requests_total{destination_service="reviews.default.svc.cluste r.local", destination_version="v3"}

  64. Prometheus/Grafana • Istio Dashboard • Istio Galley Dashboard • Istio

    Mesh Dashboard • Istio Mixer Dashboard • Istio Performance Dashboard • Istio Pilot Dashboard • Istio Service Dashboard • Istio Workload Dashboard
  65. None
  66. None
  67. Kiali • サービスメッシュをGraph構造として可視化できる • https://www.kiali.io/

  68. None
  69. Letʼs Traffic Management with Istio! Thank you for listening !