Traffic Director の詳細な構成オプション

このドキュメントでは、Traffic Director を構成する際に役立つ事項について説明します。

Traffic Director 用の単一の Compute Engine VM の構成

この手順は、サイドカー プロキシのデプロイとトラフィック インターセプトを実装して、VM に Traffic Director サービスへのアクセス権を付与する方法の例として使用します。

このプロセスに従って単一の VM に Traffic Director を構成する場合は、一部の設定タスクで Linux ホストにアクセスする必要があります。Virtual Private Cloud のネットワーク上で実行されているローカルマシンまたは VM をホストに設定できます。

まず、構成ファイルとサンプル スクリプトをダウンロードして準備します。

  1. セットアップ プロセスで使用している Linux ホストにログインします。

  2. 必要なファイルのアーカイブを Linux ホストにダウンロードし、アーカイブを展開します。

    wget https://storage.googleapis.com/traffic-director/traffic-director.tar.gz
    tar -xzvf traffic-director.tar.gz; cd traffic-director
    

    アーカイブには次のファイルが含まれています。

    • sidecar.env - 環境変数を含む構成ファイル。
    • pull_envoy.sh - 提供された Docker イメージタグから Envoy バイナリを取得するためのサンプル スクリプト。タグが指定されていない場合は、スクリプトが https://hub.docker.com/r/istio/proxyv2/tags から取得します。
    • iptables.sh - netfilter ルールを設定するためのスクリプト。
    • bootstrap_template.yaml - Envoy 用のブートストラップ テンプレート ファイル。
    • run.shsidecar.env 構成ファイルを使用して iptables をインターセプト用に設定し、Envoy サイドカー プロキシを実行する最上位スクリプト。
  3. サイドカー プロキシを実行する各ホストで、Envoy プロキシのプロセスを実行するシステム ユーザーを作成します。これは Envoy プロキシ ユーザーです。Envoy プロキシ ユーザーのログインは無効になっています。

    sudo adduser --system --disabled-login envoy
    
  4. sidecar.env ファイルを編集して構成を変更します。各変数の詳細な説明については、構成ファイルのインライン コメントをご覧ください。

    1. sidecar.env ファイルで、ENVOY_USER 変数を Envoy プロキシ ユーザーとして選択したユーザー名に設定します。
  5. 独自の Envoy バイナリを traffic-director ディレクトリにコピーするか、次の手順で Envoy バイナリを取得します。

    1. 使用している Linux ホストに Docker ツールをインストールします。サポートされている各オペレーティング システム用のファイルは、サポートされているプラットフォーム セクションにあります。
    2. pull_envoy.sh スクリプトを実行して Envoy バイナリを抽出します。

次に、Traffic Director を使用してアプリケーションを実行している各 VM ホストに対して、次の手順を実行します。

  1. 変更済みの sidecar.env ファイルと Envoy バイナリを格納する traffic-director ディレクトリ全体を、Traffic Director を使用するように構成するアプリケーションを実行している各 VM ホストにコピーします。
  2. run.sh スクリプトをシステムの起動スクリプトに追加します。これにより、VM が再起動するたびにスクリプトが実行されます。
  3. 各 VM ホストで、run.sh スクリプトを実行します。

    cd traffic-director
    sudo ./run.sh start
    
  4. Envoy プロキシが正常に起動したことを確認します。

    sudo ./run.sh status
    

    次の出力が表示されます。

    OK: Envoy seems to be running.
    OK: Traffic interception seems to be enabled.
    

    または、ps コマンドを使用してプロキシのプロセスが実行されていることを確認することもできます。出力に envoy が表示されていることを確認します。

    ps aux | grep envoy
    

    トラフィック インターセプトの方向を確認するには、次のコマンドを使用します。

    sudo iptables -S -t nat | grep ISTIO_REDIRECT
    

    想定される出力は次のとおりです。

    -N ISTIO_REDIRECT
    -A ISTIO_OUTPUT -j ISTIO_REDIRECT
    -A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001`
    

ルーティング ルール マップ

ルーティング ルール マップでルーティングを構成する方法は 2 つあります。

サービスの実際の宛先 VIP に基づいてルーティングを有効にできます。サービスの VIP を転送ルールの IPAddress パラメータとして構成した場合、そのアドレスが宛先として指定され、ポートに関連付けられたトラフィックのみが、URL マップに指定されたホスト パラメータとパスパラメータに基づいて一致し、ルーティングされます。

また、転送ルールのアドレスを 0.0.0.0 に設定することもできます。これにより、リクエストの宛先 IP アドレスに関係なく、宛先ポートに基づいてのみトラフィックを照合するようにプロキシが構成されます。その後、URL マップで指定されたホスト パラメータとパスパラメータに基づいて、トラフィックがルーティングされます。

これらの 2 つの方法では、ホストルールで構成されている通り、ホスト名は、宛先 VIP とポートペア、または宛先ポート(VIP が 0.0.0.0 の場合)に関連付けられており、サービス メッシュ構成内で一意である必要があります。つまり、同じホスト名を使用する 2 つの異なるサービスを、異なるバックエンドのセットで使用することはできません。

選択した方法に関係なく、サービスのホスト名 / FQDN によって解決される VIP へのトラフィックと、サービスがリッスンするポートがインターセプトされ、サイドカー プロキシにリダイレクトされる必要があります。ホストの完全な構成の詳細については、Traffic Director 用の単一の Compute Engine VM の構成をご覧ください。

VPC ネットワーク内の転送ルールには、VPC ネットワークごとに IP アドレスとポートの組み合わせが必要です(0.0.0.0 アドレスを含む)。同じ IP アドレスとポートで、特定の VPC ネットワーク内に複数の転送ルールを作成すると、最初の転送ルールだけが有効になります。他の要素は無視されます。

トラフィックの損失を防ぐために、以下の高度なトラフィック インターセプトの構成セクションの説明に従ってください。

高度なトラフィック インターセプトの構成

VM で Traffic Director によって構成されたサービスにアクセスする必要があるアプリケーションを実行する場合、サイドカー プロキシをインストールして VM にトラフィック インターセプトを構成し、サイドカー プロキシがバックエンドへのトラフィック ルーティングを管理できるようにする必要があります。

デプロイの要件によりすべての送信 VM トラフィックをインターセプトできない場合は、残りのトラフィックがホストのネットワーク構成で定義された通常のルートに従う状態のまま、特定のトラフィックをサイドカー プロキシにリダイレクトできます。

これを行うには、VM を使用した Traffic Director の設定と Envoy の手動デプロイの手順で Compute Engine VM ホストの設定を次のように変更します。

  1. Traffic Director で制御されるサービスで解決する IP アドレスの範囲を決定します。こうした IP アドレス宛てのトラフィックはインターセプトされ、サイドカー プロキシにリダイレクトされます。範囲はデプロイに固有のものです。

  2. sidecar.env ファイルで、SERVICE_CIDR の値をこの範囲に設定します。 これらの IP アドレスへのトラフィックは、netfilter によってサイドカー プロキシにリダイレクトされ、Traffic Director が指定した構成に従って負荷分散されます。

  3. サイドカー プロキシは、トラフィック インターセプトから除外されている専用ユーザーとして厳格に実行する必要はありません。ただし、そのような運用については引き続き推奨します。

  4. メインの手順に従って run.sh スクリプトを実行すると、この特定の範囲のインターセプトとリダイレクトのみが iptables に構成されます。

  5. 次のコマンドを実行して、netfilter が正しく構成されていることを確認します。${SERVICE_CIDR} は、インターセプトする IP アドレス範囲として構成した値に置き換えます。

    sudo iptables -L -t nat | grep -E "(ISTIO_REDIRECT).+${SERVICE_CIDR})"