tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。
原文としたのEnvoyのドキュメントはこちらのディレクトリ以下にあります(ライセンス:Apache License 2.0, NOTICE)。
目次はこちらです。
IP透明性
IP透過性とは
プロキシとして、EnvoyはIPエンドポイントです。これは、ダウンストリーム要求とは異なる独自のIPアドレスを持ちます。その結果、Envoyがアップストリームホストへの接続を確立すると、その接続のIPアドレスはプロキシ接続のIPアドレスとは異なります。
多くの場合、アップストリームのサーバーまたはネットワークは、ダウンストリームのリモートアドレスと呼ばれる、接続の元のIPアドレスを知る必要があります。例をいくつか挙げます。
- アイデンティティの一部を形成するために使用されているIPアドレス
- ネットワークポリシーを実施するために使用されているIPアドレス
- 監査に含まれるIPアドレス
Envoyは、ダウンストリームリモートアドレスをアップストリームホストに提供するための複数の方法をサポートしています。これらの手法は複雑さと適用性が異なります。
HTTPヘッダ
HTTPヘッダーは、x-forwarded-forヘッダーに要求の元のIPアドレスを含めることができます。アップストリームサーバーはこのヘッダーを使用してダウンストリームリモートアドレスを決定できます。 Envoyはこのヘッダを使用して、Original Src HTTP Filterによって使用されるIPアドレスを選択することもできます。
HTTPヘッダーのアプローチにはいくつかの欠点があります。
- HTTPにのみ適用されます。
- 上流ホストではサポートされていない可能性があります。
- 慎重な設定が必要です。
プロキシプロトコル
HAProxy Proxy Protocolは、メインTCPストリームの前に、TCPを介した接続に関するメタデータを通信するためのプロトコルを定義します。このメタデータには送信元IPが含まれます。 Envoyはプロキシプロトコルフィルタを使用してこの情報を消費することをサポートしています。これはダウンストリームのリモートアドレスをx-forwarded-forヘッダへの伝播用に回復するために使用される場合があります。 Original Src Listener Filterと組み合わせて使用することもできます。
プロキシプロトコルのいくつかの欠点:
- TCPプロトコルのみをサポートしています。
- アップストリームホストのサポートが必要です。
- Envoyはまだそれを上流に送ることはできません。
元のソースリスナーフィルタ
制御された配置では、Original Sourceリスナーフィルタを使用して、アップストリーム接続にダウンストリームリモートアドレスを複製することが可能です。アップストリームの要求またはストリームにメタデータは追加されません。そうではなく、アップストリーム接続自体はダウンストリームリモートアドレスを送信元アドレスとして確立されます。このフィルタは任意のアップストリームプロトコルまたはホストで動作します。ただし、それはかなり複雑な設定を必要とし、ルーティングの制約のためにすべての配置でサポートされないかもしれません。
オリジナルソースフィルタのいくつかの欠点:
- Envoyがダウンストリームのリモートアドレスにアクセスできることが必要です。
- その構成は比較的複雑です。
- 接続プールの制限により、パフォーマンスがわずかに低下する可能性があります。
元のソースHTTPフィルタ
制御された展開では、Original Source HTTPフィルタを使用して、アップストリーム接続にダウンストリームリモートアドレスを複製することが可能です。このフィルタはOriginal Src Listener Filterとよく似た働きをします。主な違いは、HTTPヘッダーから元の送信元アドレスを推測できることです。これは、単一のダウンストリーム接続が異なる元の送信元アドレスからの複数のHTTP要求を伝送する場合に重要です。ケースが適用される場合の例として、サイドプロキシへのフロントプロキシ転送を使用した展開があります。
このフィルタはどんな上流のHTTPホストでも動作します。ただし、それはかなり複雑な設定を必要とし、ルーティングの制約のためにすべての配置でサポートされないかもしれません。
オリジナルソースフィルタのいくつかの欠点:
- Envoyがx-forwarded-forヘッダーからダウンストリームのリモートアドレスを抽出するように正しく設定されている必要があります。
- その構成は比較的複雑です。
- 接続プールの制限により、パフォーマンスがわずかに低下する可能性があります。