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 をベースにしているため,環境構築の必要がないという点も初学者に優しい.
コンテンツ一覧
2020年1月末時点だと,Try Envoy では「計11個」のコンテンツが公開されている.以下にコンテンツ名とブログ記事をマッピングする.
実は実施しなかった(できなかった)コンテンツが2個ある.よって,タイトルに "ほぼ" と書いた.
- 実施なし (*1)
- 個人的に HAProxy を使う場面はなく,nginx で十分だった
- 実施なし (*2)
- コンテンツ自体が公開されてなく,アクセスしても 404 エラーだった
- GitHub には存在しているため,デプロイの問題だと思う(Issue で報告済)
良いところ
何よりもまず「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
の記法として cluseter
の hosts
は Envoy 1.8.0 (Oct 4, 2018) で既に deprecated になっていて,現在は load_assignment
を使う必要があるのに,ほとんどのコンテンツは hosts
のままになっていた.経験者なら気付けるけど,初学者だと「動くけど本当は deprecated」には気付けないと思う.最近の変更だと,Envoy 1.12.0 (October 31, 2019) で tracing.operation_name
も deprecated になっている.
ただし,プルリクエストは定期的に merge してもらえる(デプロイはされていないけど).よって,コンテンツ自体も OSS であるという気持ちで,一緒に改善していくのが良さそう.
まとめ
これで「Try Envoy」の連載は終わり!
今後 Envoy を学ぶ人たちの参考になれば嬉しいなーと😃