第1章 ゲートウェイについて
ゲートウェイは、スタンドアロンの Envoy プロキシーデプロイメントと、サービスメッシュのエッジで動作する関連する Kubernetes サービスです。ゲートウェイを設定すると、メッシュに出入りするトラフィックをきめ細かく制御できます。Red Hat OpenShift Service Mesh では、ゲートウェイインジェクションを使用してゲートウェイをインストールします。
1.1. ゲートウェイインジェクションについて リンクのコピーリンクがクリップボードにコピーされました!
ゲートウェイインジェクションは、サイドカーインジェクションと同じメカニズムを利用して、Envoy プロキシーをゲートウェイ Pod に注入します。ゲートウェイインジェクションを使用してゲートウェイをインストールするには、Istio コントロールプレーンに表示される namespace に Kubernetes Deployment
オブジェクトと関連する Kubernetes Service
オブジェクトを作成します。Deployment
オブジェクトを作成するときに、Istio コントロールプレーンがプロキシーを注入し、プロキシーがゲートウェイとして設定されるように、オブジェクトにラベルおよびアノテーションを付けます。ゲートウェイをインストールしたら、Istio Gateway
と VirtualService
リソースを使用して、Ingress と Egress トラフィックを制御するようにゲートウェイを設定します。
1.1.1. ゲートウェイインジェクションを使用したゲートウェイのインストール リンクのコピーリンクがクリップボードにコピーされました!
この手順では、ゲートウェイインジェクションを使用してゲートウェイをインストールする方法を説明します。
この手順を使用して、Ingress または Egress ゲートウェイを作成できます。
前提条件
- OpenShift Service Mesh Operator バージョン 3.0 以降がインストールされている。
- Istio コントロールプレーンを作成している。
-
IstioCNI
リソースを作成している。
手順
ゲートウェイのインストールに使用する namespace を作成します。
oc create namespace <gateway_namespace>
$ oc create namespace <gateway_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ゲートウェイと Istio コントロールプレーンを異なる namespace にインストールします。
ゲートウェイを専用のゲートウェイ namespace にインストールできます。このアプローチにより、異なる namespace で動作する多くのアプリケーションでゲートウェイを共有できるようになります。または、ゲートウェイをアプリケーション namespace にインストールすることもできます。このアプローチでは、ゲートウェイはその namespace 内のアプリケーション専用のゲートウェイとして機能します。
ゲートウェイデプロイメントのサービスアカウント、ロール、およびロールバインディングを定義する
secret-reader.yml
という名前の YAML ファイルを作成します。これらの設定により、ゲートウェイは TLS 認証情報を取得するために必要なシークレットを読み取ることができます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f secret-reader.yml
$ oc apply -f secret-reader.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ゲートウェイの Kubernetes
Deployment
オブジェクトを定義する、gateway-deployment.yml
という名前の YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Istio コントロールプレーンがデフォルトのサイドカーテンプレートではなく、ゲートウェイインジェクションテンプレートを使用することを示します。
- 2
- ゲートウェイのデプロイメントに一意のラベルが設定されていることを確認します。Istio
Gateway
リソースがゲートウェイワークロードを選択できるようにするには、一意のラベルが必要です。 - 3
sidecar.istio.io/inject
ラベルをtrue
に設定して、ゲートウェイインジェクションを有効にします。Istio リソースの名前がdefault
でない場合は、代わりにistio.io/rev: <istio_revision>
ラベルを使用する必要があります。ここで、リビジョンは Istio リソースのアクティブなリビジョンを表します。- 4
- Pod が起動するたびにイメージが自動的に更新されるように、イメージフィールドを
auto
に設定します。 - 5
serviceAccountName
を、以前作成したServiceAccount
の名前に設定します。
以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f gateway-deployment.yml
$ oc apply -f gateway-deployment.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ゲートウェイ
Deployment
ロールアウトが正常に行れたことを確認します。oc rollout status deployment/<gateway_name> -n <gateway_namespace>
$ oc rollout status deployment/<gateway_name> -n <gateway_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のような出力が表示されるはずです。
出力例
Waiting for deployment "<gateway_name>" rollout to finish: 0 of 1 updated replicas are available... deployment "<gateway_name>" successfully rolled out
Waiting for deployment "<gateway_name>" rollout to finish: 0 of 1 updated replicas are available... deployment "<gateway_name>" successfully rolled out
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ゲートウェイの Kubernetes
Service
オブジェクトを含む、gateway-service.yml
という名前の YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f gateway-service.yml
$ oc apply -f gateway-service.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ゲートウェイサービスがゲートウェイ Pod のエンドポイントをターゲットにしていることを確認します。
oc get endpoints <gateway_name> -n <gateway_namespace>
$ oc get endpoints <gateway_name> -n <gateway_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例のような出力が表示されるはずです。
出力例
NAME ENDPOINTS AGE <gateway_name> 10.131.0.181:8080,10.131.0.181:8443 1m
NAME ENDPOINTS AGE <gateway_name> 10.131.0.181:8080,10.131.0.181:8443 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: ゲートウェイの Horizontal Pod Autoscaler を定義する、
gateway-hpa.yml
という名前の YAML ファイルを作成します。次の例では、最小レプリカを2
に、最大レプリカを5
に設定し、平均 CPU 使用率が CPU リソース制限の 80% を超えたときにレプリカをスケールアップします。この制限は、ゲートウェイのデプロイメントの Pod テンプレートで指定されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
spec.scaleTargetRef.name
を、以前作成したゲートウェイデプロイメントの名前に設定します。
オプション: 次のコマンドを実行して YAML ファイルを適用します。
oc apply -f gateway-hpa.yml
$ oc apply -f gateway-hpa.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: ゲートウェイの Pod Disruption Budget を定義する、
gateway-pdb.yml
という名前の YAML ファイルを作成します。次の例では、ゲートウェイ Pod のエビクション後も、クラスター上に少なくとも 1 つの正常なゲートウェイ Pod が残る場合にのみ、ゲートウェイ Pod のエビクションが許可されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
spec.selector.matchLabels
を、以前作成したゲートウェイデプロイメントの Pod テンプレートで指定された一意のラベルまたはラベルセットに設定します。
オプション: 次のコマンドを実行して YAML ファイルを適用します。
oc apply -f gateway-pdb.yml
$ oc apply -f gateway-pdb.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow