kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Try Envoy を "ほぼ" 完走した

2019年11月から Envoy の理解を深めるために,Envoy 公式の学習コンテンツ「Try Envoy」を試しながら,学んだことをブログにアウトプットしてきた.2020年1月末でやっと「ほぼ完走」することができたため,まとめ記事を書く.なお「Try Envoy」はどのコンテンツも「Estimated Time: 10 minutes」となっていて,ザッと流すならすぐ終わるけど,意味がないと思う.そこで,構築する構成図を描いたり,解説のなかったパラメータを調べたり,手順上の誤植を修正したり,自分なりに付加情報を意識しながらアウトプットすることを強く意識していた.

なぜ Try Envoy を選んだ?

新しい技術を学ぶときに,個人的に「できる限り手を動かすこと」を意識している.ただし,闇雲に手を動かすのではなく,体系的にステップバイステップに学びたく,どちらかと言うと「学習コンテンツ系(e-Learning / Hands-On / YouTube など)」を好む傾向にある.仕事柄,すぐに検証するプロダクション環境を持っていないという背景もある.そこで,今回は Envoy 公式の「Try Envoy」を選んだ.Katacoda をベースにしているため,環境構築の必要がないという点も初学者に優しい.

www.envoyproxy.io

www.katacoda.com

コンテンツ一覧

2020年1月末時点だと,Try Envoy では「計11個」のコンテンツが公開されている.以下にコンテンツ名とブログ記事をマッピングする.

Try Envoy kakakakakku blog
Getting Started with Envoy 「Try Envoy」で Envoy を学ぼう!「Getting Started with Envoy」を試した - kakakakakku blog
Migrating from NGINX to Envoy Proxy nginx と Envoy の設定を比較して学べる「Migrating from NGINX to Envoy Proxy」を試した - kakakakakku blog
Migrating from HAProxy to Envoy Proxy 実施なし (*1)
Securing traffic with HTTPS and SSL/TLS Envoy で HTTPS 接続をする設定を学べる「Securing traffic with HTTPS and SSL/TLS」を試した - kakakakakku blog
File Based Dynamic Routing Configuration Envoy のディスカバリサービス (xDS) を学べる「File Based Dynamic Routing Configuration」を試した - kakakakakku blog
API Based Dynamic Routing Configuration Envoy の EDS を REST API で体験する「API Based Dynamic Routing Configuration」を試した - kakakakakku blog
Detecting Down Services with Health Checks Envoy の Health Checking と Outlier Detection の違いを学べる「Detecting Down Services with Health Checks」を試した - kakakakakku blog
Implementing Blue / Green Rollouts Envoy の route.HeaderMatcher を使う「Implementing Blue / Green Rollouts」を試した - kakakakakku blog
Controlling load balancing policies Envoy の lb_policy は ROUND_ROBIN 以外にもある!「Controlling load balancing policies」を試した - kakakakakku blog
Implementing Metrics and Tracing Capabilities Envoy x Prometheus x Grafana x Jaeger に入門する「Implementing Metrics and Tracing Capabilities」を試した - kakakakakku blog
Debugging Envoy Proxy 実施なし (*2)

実は実施しなかった(できなかった)コンテンツが2個ある.よって,タイトルに "ほぼ" と書いた.

  • 実施なし (*1)
    • 個人的に HAProxy を使う場面はなく,nginx で十分だった
  • 実施なし (*2)

良いところ

何よりもまず「Try Envoy」をやり込むことにより,envoy.yaml を読めるようになった(はず).今でも「設定長いなぁ」とは思うものの,Envoy を学ぶ前と比較すると,圧倒的に envoy.yaml に直面したときの「ナニコレ感」はなくなった.これは大きなメリットと言える.

次に Envoy の醍醐味とも言える「xDS」を File Based と API Based で試せたのは良かった.記事にも書いた通り,正直なところ API Based (gRPC) を学びたかったけど,最低限の仕組みを把握できれば,残りは自分で試行錯誤できる.

最後は「ルーティング」の仕組みをたくさん学べた点で,nginx からのマイグレーションも,ロードバランシング,カナリーデプロイ,HTTP Header ベースルーティングも学べた.まだまだ Envoy の機能の一部ではあるものの,多機能であることは十分にわかった.

フィードバック

「Try Envoy」をより良くするためにフィードバックをまとめておく.

まず,Envoy を使った「ルーティング」を学ぶという側面が強く,例えば「マイクロサービス文脈(リトライ/サーキットブレイク/タイムアウト/スロットリング)」のコンテンツもあると良かった.とは言え,Envoy はあくまでデータプレーンなので,Istio などコントロールプレーン側のコンテンツで学ぶべきだ!と言われればそれも納得できるところではある.

なお,関連するコンテンツ「Learn Envoy」では,以下の分類になっていて,バランス良く構成されているように思う.

  • Getting Started
  • Dynamic Configuration
  • Observability
  • Deployment Models
  • Resilience
  • Building On Envoy

次に「コンテンツは古め」という点も気になる.Envoy 自体の進化も早く,ドキュメントが頻繁に書き換わるため,コンテンツからリンクされているドキュメントが 404 になっている場面もあった.正直 latest のドキュメントを参照していると,影響を受けすぎる気もする.

他にも envoy.yaml の記法として cluseterhostsEnvoy 1.8.0 (Oct 4, 2018) で既に deprecated になっていて,現在は load_assignment を使う必要があるのに,ほとんどのコンテンツは hosts のままになっていた.経験者なら気付けるけど,初学者だと「動くけど本当は deprecated」には気付けないと思う.最近の変更だと,Envoy 1.12.0 (October 31, 2019)tracing.operation_name も deprecated になっている.

www.envoyproxy.io

ただし,プルリクエストは定期的に merge してもらえる(デプロイはされていないけど).よって,コンテンツ自体も OSS であるという気持ちで,一緒に改善していくのが良さそう.

github.com

まとめ

これで「Try Envoy」の連載は終わり!

今後 Envoy を学ぶ人たちの参考になれば嬉しいなーと😃