メッシュ内のサービスが外部トラフィックを受信する必要がある場合、Istio ゲートウェイがエントリポイントとして機能します。これは、Service Mesh (ASM) インスタンスのエッジにあるロードバランサーであり、インバウンドまたはアウトバウンドの HTTP/TCP 接続を受信し、VirtualService を介してトラフィックがバックエンドサービスに到達する前に、どのポート、プロトコル、ホストが公開されるかを制御します。
ゲートウェイの仕組み
ゲートウェイはネットワークスタックの L4-L6 で動作し、以下を定義します。
リッスンするポートとプロトコル (HTTP、HTTPS、TCP)
トラフィックを受け入れるホスト (特定のドメインまたはワイルドカード)
暗号化された接続のための TLS 設定
ゲートウェイ単独では、サービスへのトラフィックをルーティングしません。特定のバックエンドサービスにトラフィックを転送するには、VirtualService をゲートウェイにバインドする必要があります。完全な API 仕様については、「Gateway」をご参照ください。
前提条件
開始する前に、以下があることを確認してください。
ASM インスタンス。詳細については、「ASM インスタンスを作成する」をご参照ください。
Istio ゲートウェイの作成
オプション 1: ASM コンソールの使用
オプション 2: YAML ファイルの使用
ASM コンソールにログインします。左側のナビゲーションウィンドウで、[Service Mesh] > [メッシュ管理] を選択します。
「メッシュ管理」ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、「ASM ゲートウェイ」>「ゲートウェイ」を選択します。表示されるページで、「YAML からの作成」をクリックします。
「作成」ページで、[名前空間] ドロップダウンリストから名前空間を選択し、[テンプレート] ドロップダウンリストからテンプレートを選択し、[YAML] コードエディタで構成を変更してから、[作成] をクリックします。
主要フィールド
次の表に、一般的に構成されるフィールドを示します。完全な API リファレンスについては、「Gateway」をご参照ください。
| フィールド | 説明 |
|---|---|
spec.selector | この構成を処理するゲートウェイ Pod を決定するラベルセレクターです。通常、istio: ingressgateway です。 |
spec.servers[].port.number | リッスンするポート番号。 |
spec.servers[].port.protocol | プロトコルタイプ。例: HTTP、HTTPS、または TCP。 |
spec.servers[].port.name | ポートのラベル。 |
spec.servers[].hosts | このポートで公開されるホスト。すべてのホストに一致させるには * を指定するか、example.com のような特定のドメインをリストします。 |
spec.servers[].tls.mode | TLS モード。例: SIMPLE または MUTUAL。 |
spec.servers[].tls.credentialName | TLS 証明書とキーを含む Kubernetes シークレットの名前。 |
YAML の例
HTTP ゲートウェイ
すべてのホストに対してポート 80 を公開し、HTTP トラフィックを HTTPS にリダイレクトします。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
namespace: default
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*.example.com"
tls:
httpsRedirect: trueTLS を使用した HTTPS ゲートウェイ
Kubernetes シークレットを使用してポート 443 で TLS を終端します。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: https-gateway
namespace: default
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- "bookinfo.example.com"
tls:
mode: SIMPLE
credentialName: bookinfo-tls-secretマルチポートゲートウェイ
異なるポートで HTTP、HTTPS、およびワイルドカードリスナーを公開します。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
namespace: some-config-namespace
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- test1.com
- test2.com
tls:
httpsRedirect: true
- port:
number: 443
name: https-443
protocol: HTTPS
hosts:
- uk.bookinfo.com
- eu.bookinfo.com
tls:
mode: SIMPLE
serverCertificate: /etc/certs/servercert.pem
privateKey: /etc/certs/privatekey.pem
- port:
number: 9443
name: https-9443
protocol: HTTPS
hosts:
- "bookinfo-namespace/*.bookinfo.com"
tls:
mode: SIMPLE
credentialName: bookinfo-secret
- port:
number: 9080
name: http-wildcard
protocol: HTTP
hosts:
- "*"このゲートウェイは、ポート 80、443、9443、および 9080 を公開します。istio: ingressgateway ラベルを持つ Pod に適用されます。
Istio ゲートウェイの変更
[ゲートウェイ] ページで、対象の Istio ゲートウェイを検索し、[YAML] を [操作] 列でクリックします。
「[編集]」ダイアログボックスで、ビジネス要件に応じて構成を変更し、「[OK]」をクリックします。
Istio ゲートウェイのロールバック
[ゲートウェイ]ページで、対象の Istio ゲートウェイを見つけ、[バージョン]を[操作]列でクリックします。
[バージョン] ダイアログボックスで、[ロールバック] をクリックして以前のバージョンを復元します。
詳細については、「Istio リソースを以前のバージョンにロールバックする」をご参照ください。
Istio ゲートウェイの削除
Istio ゲートウェイを削除すると、対応するトラフィックルーティングルールは機能しなくなります。その結果、サービスにアクセスできなくなる可能性があります。この操作を実行する際は注意してください。
[ゲートウェイ] ページで、対象の Istio ゲートウェイを見つけ、[削除] を [操作] 列でクリックします。
[送信] メッセージで、[OK] をクリックします。
