第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.ymlCopy 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.ymlCopy 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 outCopy 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.ymlCopy 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 1mCopy 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.ymlCopy 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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow