Envoy Proxyの公式チュートリアル — Getting Started with Envoy
Envoy Proxyには公式チュートリアル集「TRY ENVOY」があります。 Katacodaで実際に操作しながら動作を確認できるため分かりやすいです。
この中から、Beginner向けとなっている「Getting Started with Envoy」の内容をまとめました。 このチュートリアルでは、Step1~Step3でEnvoyの基礎とHTTPリクエストをGoogle.comに転送するプロキシ設定、Step4でFlask*1を使った複数の簡易Webサーバに対してURLによってリクエストをルーティングするプロキシ設定が紹介されています。
Step1~Step3では最終的にEnvoyの設定を記述した以下のYAMLファイルを作成します。
Create Proxy Config
Envoyではプロキシの動作をenvoy.yaml
というYAMLファイルで設定します。
この例では、全ての設定をあらかじめ定義しておくStatic Configuration APIを使用して設定を行います。
ここでは扱っていませんが、Envoyでは動的な設定を行うこともできます。
Resources
まず、envoy.yaml
で使用するAPIを定義します。
今回はStatic Configuration APIを使用するため、1行目にstatic_resources:
と記述します。
Listeners
Listenerにはリクエストを受けるために必要なIPアドレスやポートといったネットワーク設定を行います。 EnvoyはDockerコンテナで動作させるため、IPアドレス0.0.0.0の10000番ポートをリッスンします。
Filter Chains and Filters
この例では、Envoyのエンドポイントへのリクエストに対して、URLを変えずにGoogle.comを転送する設定を行います。
Filterは定義に一致するリクエストをターゲットに転送することができ、Listenerにはfilter_chains
で複数のFilterを設定することができます。
ここでは、envoy.http_connection_manager
というHTTP接続専用のビルトインFilterを使用します。
stat_prefix
: connection managerの統計を出力するときに使用する人間が読める形式のprefixroute_config
: ルーティング設定routes
:route
設定でURL prefixに一致するときの動作を定義host_rewrite
: HTTPリクエストのHostヘッダーの書き換えcluster
: リクエストを処理するClusterの名前http_filters
: 処理されたリクエストを修正するFilter
Clusters
リクエストがFilterに一致したとき、リクエストはClusterに転送されます。 この例では、HTTPSで動作するGoogle.comをホストとして定義しています。
Admin
このListenerもリクエストに対してマッチする複数のFilterを設定できます。
Start Proxy
Envoyの設定ファイルを作成したら、コンテナを起動します。
このとき、Docker側で/etc/envoy/envoy.yaml
をマウントしておきます。
docker run --name=proxy -d \ -p 80:10000 \ -v $(pwd)/envoy/envoy.yaml:/etc/envoy/envoy.yaml \ envoyproxy/envoy:latest
localhost:80へcurlすることで結果が得られます。
curl localhost
この結果として、URLは同じままGoogle.comのページが表示されます。
Admin View
Envoyは設定や統計、ログやその他のEnvoyの内部データを表示することができる管理者ビューを提供します。
docker run --name=proxy-with-admin -d \ -p 9901:9901 \ -p 10000:10000 \ -v $(pwd)/envoy/envoy.yaml:/etc/envoy/envoy.yaml \ envoyproxy/envoy:latest
Route to Docker Containers
この例では、URLによってリクエストを複数のWebサーバにルーティングするEnvoyの設定を行います。 設定やソースコードはGitHubで公開されています。