3.2. Istio API を使用してゲートウェイ経由で Egress トラフィックを誘導する
Istio API を使用して、ゲートウェイインジェクションを使用してインストールされたゲートウェイを介して送信 HTTP トラフィックを誘導します。
前提条件
- ゲートウェイインジェクションを使用してゲートウェイをインストールしている。
手順
次のコマンドを実行して、
curl
という名前の namespace を作成します。oc create namespace curl
$ oc create namespace curl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用している更新ストラテジーに応じて、適切なコマンドを実行して namespace でサイドカーインジェクションを有効にします。
InPlace
更新ストラテジーを使用している場合は、次のコマンドを実行します。oc label namespace curl istio-injection=enabled
$ oc label namespace curl istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RevisionBased
更新ストラテジーを使用している場合は、次のコマンドを実行します。次のコマンドを実行してリビジョン名を表示します。
oc get istiorevisions.sailoperator.io
$ oc get istiorevisions.sailoperator.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE READY STATUS IN USE VERSION AGE default Local True Healthy True v1.24.3 3m33s
NAME TYPE READY STATUS IN USE VERSION AGE default Local True Healthy True v1.24.3 3m33s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、namespace にリビジョン名のラベルを付け、サイドカーインジェクションを有効にします。
oc label namespace curl istio.io/rev=default
$ oc label namespace curl istio.io/rev=default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、
curl
アプリケーションをデプロイします。oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
$ oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl Pod の名前で初期化された
CURL_POD
環境変数をエクスポートします。export CURL_POD=$(oc get pod -n curl -l app=curl -o jsonpath='{.items[0].metadata.name}')
$ export CURL_POD=$(oc get pod -n curl -l app=curl -o jsonpath='{.items[0].metadata.name}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow メッシュから外部サービスにトラフィックを誘導する
http-se.yaml
という名前の YAML ファイルを作成します。次の例では、URL のServiceEntry
を定義します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f http-se.yaml
$ oc apply -f http-se.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceEntry
設定が正しく適用されていることを確認します。次のコマンドを実行して、前の手順で指定したホストに HTTP リクエストを送信します。oc exec "$CURL_POD" -n curl -c curl -- curl -sSL -o /dev/null -D - http://docs.redhat.com
$ oc exec "$CURL_POD" -n curl -c curl -- curl -sSL -o /dev/null -D - http://docs.redhat.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、接続が機能していることを示す
301
(リダイレクト) または200
(成功) などの HTTP ステータスコードを返します。Egress
Gateway
を作成し、メッシュからのトラフィックを外部サービスに指定されたホストにルーティングするhttp-gtw.yaml
という名前の YAML ファイルを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f http-gtw.yaml
$ oc apply -f http-gtw.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションサイドカーから Egress ゲートウェイを経由して外部ホストまでのトラフィックのフローを管理する
VirtualService
をセットアップするhttp-vs.yaml
という名前の YAML ファイルを作成します。設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f http-vs.yaml
$ oc apply -f http-vs.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP リクエストを URL に再送信します。
oc exec "$CURL_POD" -n curl -c curl -- curl -sSL -o /dev/null -D - http://docs.redhat.com
$ oc exec "$CURL_POD" -n curl -c curl -- curl -sSL -o /dev/null -D - http://docs.redhat.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ターミナルには、以下の出力に似た情報が表示されます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、リクエストがゲートウェイ経由でルーティングされたことを確認します。
oc logs deployment/<gateway_name> -n <gateway_namespace> | tail -1
$ oc logs deployment/<gateway_name> -n <gateway_namespace> | tail -1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この検証手順を実行するには、アクセスロギングを有効にする必要があります。Istio リソースで
spec.values.meshConfig.accessLogFile
フィールドを/dev/stdout
に設定することで、標準出力へのアクセスロギングを有効にできます。ターミナルには、以下の出力に似た情報が表示されます。
出力例
[2024-11-07T14:35:52.428Z] "GET / HTTP/2" 301 - via_upstream - "-" 0 0 24 24 "10.128.2.30" "curl/8.11.0" "79551af2-341b-456d-b414-9220b487a03b" "docs.redhat.com" "23.55.176.201:80" outbound|80||docs.redhat.com 10.128.2.29:49766 10.128.2.29:80 10.128.2.30:38296 -
[2024-11-07T14:35:52.428Z] "GET / HTTP/2" 301 - via_upstream - "-" 0 0 24 24 "10.128.2.30" "curl/8.11.0" "79551af2-341b-456d-b414-9220b487a03b" "docs.redhat.com" "23.55.176.201:80" outbound|80||docs.redhat.com 10.128.2.29:49766 10.128.2.29:80 10.128.2.30:38296 -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow