ワイルドカードホストを使用したエグレス
外部サービスへのアクセス6 タスクと イグレスゲートウェイの設定7 の例では、edition.cnn.com
のような特定のホスト名に対するイグレストラフィックの設定方法について説明しています。この例では、各ホストを個別に設定する代わりに、共通ドメイン内のホストのセット(例:*.wikipedia.org
)に対するイグレストラフィックを有効にする方法を示します。
背景
Istioで、すべての言語のwikipedia.org
サイトに対するイグレストラフィックを有効にしたいとします。特定の言語のwikipedia.org
の各バージョンには、それぞれ独自のホスト名があります(例:英語ではen.wikipedia.org
、ドイツ語ではde.wikipedia.org
)。各言語のサイトを個別に指定することなく、すべてのWikipediaサイトに対して共通の設定項目でイグレストラフィックを有効にしたいと考えています。
始める前に
- アクセスログが有効になっており、デフォルトでブロックするアウトバウンドトラフィックポリシーが適用されている状態でIstioをインストールします。
リクエストを送信するためのテストソースとして使用する、curl9サンプルアプリをデプロイします。自動サイドカーインジェクションを有効にしている場合は、次のコマンドを実行してサンプルアプリをデプロイします。
それ以外の場合は、次のコマンドを使用してサイドカーを手動でインジェクトしてから、
curl
アプリケーションをデプロイします。ソースポッドの名前を
SOURCE_POD
環境変数に設定します。
ワイルドカードホストへのダイレクトトラフィックの設定
共通ドメイン内のホストのセットにアクセスする最初の、そして最も簡単な方法は、ワイルドカードホストを持つ単純なServiceEntry
を設定し、サイドカーから直接サービスを呼び出すことです。サービスを直接呼び出す場合(つまり、イグレスゲートウェイを介さない場合)、ワイルドカードホストの設定は他の(例:完全修飾)ホストの設定と変わりません。共通ドメイン内に多くのホストがある場合にのみ、はるかに便利です。
*.wikipedia.org
に対するServiceEntry
を定義します。https://en.wikipedia.org11とhttps://de.wikipedia.org12にHTTPSリクエストを送信します。
ワイルドカードホストへのダイレクトトラフィックのクリーンアップ
ワイルドカードホストへのイグレスゲートウェイトラフィックの設定
すべてのワイルドカードホストが単一のサーバーによって提供される場合、ワイルドカードホストへのイグレスゲートウェイベースのアクセスの設定は、ほとんどのホストの設定と非常に似ています。ただし、1つの例外があります。構成されたルートの宛先は、構成されたホスト(つまり、ワイルドカード)と同じではありません。代わりに、ドメインのセットの単一サーバーのホストを使用して構成されます。
- *.wikipedia.orgに対するイグレス
Gateway
と、トラフィックをイグレスゲートウェイ経由で、そしてイグレスゲートウェイから外部サービスに転送するルートルールを作成します。
宛先サーバーwww.wikipedia.org13に対する
ServiceEntry
を作成します。https://en.wikipedia.org11とhttps://de.wikipedia.org12にHTTPSリクエストを送信します。
*.wikipedia.orgへのリクエストに対応するカウンターについて、イグレスゲートウェイのプロキシの統計を確認します。
ワイルドカードホストへのイグレスゲートウェイトラフィックのクリーンアップ
任意のドメインに対するワイルドカード設定
前のセクションの設定は、すべての*.wikipedia.org
サイトがwikipedia.org
サーバーのいずれかによって提供されるため機能しました。しかし、これは常に当てはまるわけではありません。たとえば、*.com
や*.org
のようなより一般的なワイルドカードドメインへのアクセスに対してイグレス制御を設定したい場合があります。任意のワイルドカードドメインへのトラフィックの設定は、Istioゲートウェイにとって課題となります。Istioゲートウェイは、事前に定義されたホスト、事前に定義されたIPアドレス、またはリクエストの元の宛先IPアドレスへのトラフィックのルーティングのみを構成できます。
前のセクションでは、仮想サービスを構成してトラフィックを事前に定義されたホストwww.wikipedia.org
に転送するように設定しました。しかし、一般的なケースでは、リクエストで受信した任意のホストを提供できるホストまたはIPアドレスがわからないため、リクエストをルーティングするための値としてリクエストの元の宛先アドレスだけが残ります。残念ながら、イグレスゲートウェイを使用する場合、元の要求がゲートウェイにリダイレクトされるため、リクエストの元の宛先アドレスは失われ、宛先IPアドレスはゲートウェイのIPアドレスになります。
Istioの実装の詳細に依存するため、簡単ではなく、やや脆弱ではありますが、Envoyフィルター14を使用して、HTTPSまたはTLSリクエストのSNI15値を使用して、リクエストをルーティングする元の宛先を識別することで、ゲートウェイが任意のドメインをサポートするように構成できます。この構成アプローチの例は、ワイルドカード宛先へのイグレストラフィックのルーティング16にあります。
クリーンアップ
curl9サービスをシャットダウンします。
クラスタからIstioをアンインストールします。