このページの内容は Apigee に適用されます。Apigee ハイブリッドには適用されません。
Apigee Edge のドキュメントを表示する。
このページでは、クラスタで実行されている Google Kubernetes Engine(GKE)Gateway を変更して、Apigee APIM Operator for Kubernetes(プレビュー版)を使用して Apigee API 管理ポリシーを適用する方法について説明します。
始める前に
このタスクを開始する前に、次の手順を完了してください。
- GKE クラスタに Workload Identity が構成されていることを確認します。必要な手順については、Workload Identity を作成するをご覧ください。
- クラスタで GKE Gateway が構成され、動作していることを確認します。詳細については、Gateway のデプロイをご覧ください。
- APIM Operator をインストールします。インストール手順については、Kubernetes 用の Apigee APIM Operator をインストールするをご覧ください。
必要なロール
Kubernetes 用 Apigee APIM Operator をインストールするで説明されているように、必要なロールをサービス アカウントに割り当てた場合は、これらのタスクを完了するために追加の IAM ロールや権限は必要ありません。
Kubernetes に組み込まれたロールベースのアクセス制御(RBAC)メカニズムを使用して、Google Kubernetes Engine クラスタ内のリソースに対するアクションを認可できます。詳細については、 ロールベース アクセス制御を使用してクラスタ内のアクションを認可するをご覧ください。
概要
以降のセクションでは、APIM Operator を使用して Apigee ポリシーを使用するように GKE Gateway を変更するために必要な手順について説明します。このチュートリアルでは、次のことを行います。
- APIM 拡張機能ポリシーを定義する。
- API プロダクトを定義する。
- API オペレーション セットを定義します。
- Apigee サービス拡張機能をテストします。
- Google Cloud コンソールで Apigee API Analytics を表示する。
APIM 拡張機能ポリシーを定義する
このステップでは、APIM 拡張ポリシーを定義し、クラスタで実行されている GKE Gateway に適用します。このポリシーは、Gateway を通過するトラフィックとそれに関連する HTTPRoutes
のすべてを管理します。これは、現在の Apigee の環境レベルでflowhook と同様に機能します。
APIM 拡張機能ポリシーを定義します。
apim
Namespace にglobal-ext-lb1-apim-policy.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。
# global-ext-lb1-apim-policy.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIMExtensionPolicy metadata: name: global-ext-lb1-apim-policy namespace: apim spec: apigeeenv: ENV_NAME # optional location: global failOpen: false timeout: 1000ms targetRef: # identifies the Gateway where the extension should be applied name: global-ext-lb1 kind: Gateway namespace: default
ここで、ENV_NAME は、インストール手順の Apigee 環境を作成するで作成した Apigee 環境の名前です。
使用可能なすべての環境は、Google Cloud コンソールの [Apigee 環境] ページで確認できます。
- ポリシーを適用します。
kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
yaml
が適用されると、APIM オペレーターがバックグラウンドでネットワーキング リソースを作成します。 - 次のコマンドを使用して、API 拡張ポリシーのステータスを確認します。
kubectl -n apim get APIMExtensionPolicy
出力は次のようになります。
State
はRUNNING
です。NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
- 次のコマンドを使用して、Gateway にリクエストを送信します。
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME"
場所:
GATEWAY_IP_ADDRESS
は Gateway の IP アドレスです。Gateway の IP アドレスは、次のコマンドを使用して取得できます。ここで、GATEWAY_NAME
は Gateway の名前です。kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
は、Gateway のHTTPRoute
で定義されたホスト名です。
- リクエストは失敗し、次のようなレスポンスが返されます。
{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
これは、Apigee 拡張機能ポリシーが有効であり、API キーの適用とアクセス トークンの検証が有効であることを示します。
API プロダクトを定義する
API プロダクトを定義します。
apim
Namespace にapi-product.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。
# api-product.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIProduct metadata: name: api-product namespace: apim spec: approvalType: auto description: Http bin GET calls displayName: api-product enforcementRefs: - name: global-ext-lb1-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- 次のコマンドを使用して、ファイルを Gateway に適用します。
kubectl -n apim apply -f api-product.yaml
API オペレーション セットを定義する
前の手順で作成した API プロダクトの API オペレーション セットを定義します。
apim
Namespace にapim-policies.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。このファイルでは、前の手順で定義した API プロダクトの割り当てポリシーと使用可能な REST オペレーションを定義します。
# apim-policies.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIOperationSet metadata: name: item-set spec: apiProductRefs: - name: api-product kind: APIProduct group: apim.googleapis.com namespace: apim quota: limit: 10 interval: 1 timeUnit: minute restOperations: - name: GetItems path: /get methods: - GET
- ファイルを Gateway に適用します。
kubectl -n apim apply -f apim-policies.yaml
Apigee サービス拡張機能をテストする
このステップでは、Google Cloud コンソールの Apigee UI を使用して、Apigee サービス拡張機能と Gateway に適用された Apigee 拡張機能ポリシーをテストします。
テストのセットアップ
テストに必要な API リソースを設定します。
Google Cloud コンソールで、[Apigee API 管理] ページに移動します。
- APIM Operator をインストールした Apigee 組織を選択します。
- デベロッパーを作成します。
- [配布] > [デベロッパー] を選択します。
- [デベロッパー] ページで、[+ 作成] をクリックします。
- [デベロッパーを追加] ページで、任意の値を使用して必須項目に入力します。
- [追加] をクリックします。
- アプリを作成します。
- [Distribution] > [Apps] を選択します。
- [アプリ] ページで、[+ 作成] をクリックします。
- [Create App] ページの [App Details] セクションで、次の値を使用して必須フィールドに入力します。
- アプリ名: demo-app
- デベロッパー: 前の手順で作成したデベロッパー、またはリストから別のデベロッパーを選択します。
- [アプリの認証情報] セクションで、[+ 認証情報を追加] をクリックします。
- [認証情報] セクションで、[認証情報の詳細] セクションの必須フィールドに次の値を入力します。
- 認証情報名: demo-credential
- 認証情報の種類: [API キー] を選択します。
- [作成] をクリックします。
- [商品] セクションで、[+ 商品を追加] をクリックします。
- 前の手順で作成した
api-product-1
を選択します。 - [追加] をクリックします。
- [作成] をクリックします。
- [App Details] ページの [Credential] セクションで、
visibility_off をクリックして [Key] の値を表示します。
Key
の値をコピーします。このキーは、後の手順でサービスに対して API 呼び出しを行うために使用します。 - [アプリの詳細] ページの [認証情報] セクションで、visibility_off をクリックして [アプリシークレット] の値を表示します。
[App secret] の値をコピーします。この値は、後のステップでアクセス トークンを生成するために使用します。
API キーの適用をテストする
前の手順で取得した API キーを使用して Gateway にリクエストを送信するには、次のコマンドを使用します。
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
ここで
GATEWAY_IP_ADDRESS
は Gateway の IP アドレスです。Gateway の IP アドレスは、次のコマンドを使用して取得できます。ここで、GATEWAY_NAME
は Gateway の名前です。kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
は、Gateway のHTTPRoute
で定義されたホスト名です。API_KEY
は、テストのセットアップで取得した API キー値です。
リクエストが成功すると、次のようなレスポンスが返されます。
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Api-Key": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt", "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739" }, "origin": "34.54.193.72", "url": "https://34.54.193.72/get" }
割り当ての適用をテストする
APIM 拡張機能ポリシーで定義された割り当て適用をテストするには、前の手順で取得したリクエストを 1 分以内に 10 回 Gateway に送信します。
次のスクリプトを実行してリクエストを生成できます。
#!/bin/sh for i in $(seq 1 11); do curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" sleep 1 done
ここで
GATEWAY_IP_ADDRESS
は Gateway の IP アドレスです。Gateway の IP アドレスは、次のコマンドを使用して取得できます。ここで、GATEWAY_NAME
は Gateway の名前です。kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
は、Gateway のHTTPRoute
で定義されたホスト名です。API_KEY
は、テストのセットアップで取得した API キー値です。
このアクションにより、割り当て違反がトリガーされ、次のような障害が発生します。
{"fault":{"faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}
REST オペレーションの適用をテストする
残りのオペレーションの適用をテストするには、次のコマンドを使用して、API オペレーション セットにない URL を使用して Gateway にリクエストを送信します。
curl http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
ここで
GATEWAY_IP_ADDRESS
は Gateway の IP アドレスです。Gateway の IP アドレスは、次のコマンドを使用して取得できます。ここで、GATEWAY_NAME
は Gateway の名前です。kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
は、Gateway のHTTPRoute
で定義されたホスト名です。API_KEY
は、テストのセットアップで取得した API キー値です。
リクエストは失敗し、次のようなレスポンスが返されます。
{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}
Google Cloud コンソールで Apigee API Analytics を表示する
GKE Gateway とインストールした APIMExtensionPolicy によって処理される API トラフィックを表示するには、Google Cloud コンソールで Apigee API アナリティクスを使用します。
- Google Cloud コンソールで、[Apigee API の管理] ページに移動します。
- APIM Operator をインストールした Apigee 組織を選択します。
- サイド ナビゲーション メニューで、[アナリティクス] > [API 指標] を選択します。
- [API Proxy Performance] タブで、オプションのインストール手順
Apigee 環境を作成するで作成した環境、またはインストール中に APIM Operator によって作成された環境を選択します。環境の名前は接頭辞
apigee-ext-proc-enabled-env
で始まります。 - 記録された API トラフィックをモニタリングします。
トラブルシューティング
APIM Operator で API マネジメント ポリシーを使用する際に問題が発生した場合は、APIM Operator のトラブルシューティングで一般的なエラーの解決策をご覧ください。
次のステップ
- GKE Gateway にポリシーを追加する方法を学習する。
- Kubernetes 用の Apigee APIM Operator をアンインストールする方法を学習する。