Kubernetes 用の Apigee APIM Operator で API 管理ポリシーを使用する

このページの内容は Apigee に適用されます。Apigee ハイブリッドには適用されません。

Apigee Edge のドキュメントを表示する。

このページでは、クラスタで実行されている Google Kubernetes Engine(GKE)Gateway を変更して、Apigee APIM Operator for Kubernetes(プレビュー版)を使用して Apigee API 管理ポリシーを適用する方法について説明します。

始める前に

このタスクを開始する前に、次の手順を完了してください。

必要なロール

Kubernetes 用 Apigee APIM Operator をインストールするで説明されているように、必要なロールをサービス アカウントに割り当てた場合は、これらのタスクを完了するために追加の IAM ロールや権限は必要ありません。

Kubernetes に組み込まれたロールベースのアクセス制御(RBAC)メカニズムを使用して、Google Kubernetes Engine クラスタ内のリソースに対するアクションを認可できます。詳細については、 ロールベース アクセス制御を使用してクラスタ内のアクションを認可するをご覧ください。

概要

以降のセクションでは、APIM Operator を使用して Apigee ポリシーを使用するように GKE Gateway を変更するために必要な手順について説明します。このチュートリアルでは、次のことを行います。

  1. APIM 拡張機能ポリシーを定義する
  2. API プロダクトを定義する
  3. API オペレーション セットを定義します。
  4. Apigee サービス拡張機能をテストします。
  5. Google Cloud コンソールで Apigee API Analytics を表示する。

APIM 拡張機能ポリシーを定義する

このステップでは、APIM 拡張ポリシーを定義し、クラスタで実行されている GKE Gateway に適用します。このポリシーは、Gateway を通過するトラフィックとそれに関連する HTTPRoutesすべてを管理します。これは、現在の Apigee の環境レベルでflowhook と同様に機能します。

APIM 拡張機能ポリシーを定義します。

  1. apim Namespace に global-ext-lb1-apim-policy.yaml という名前の新しいファイルを作成します。
  2. 次の内容を新しいファイルにコピーします。
    # 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 環境] ページで確認できます。

    [環境] に移動

  3. ポリシーを適用します。
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml

    yaml が適用されると、APIM オペレーターがバックグラウンドでネットワーキング リソースを作成します。

  4. 次のコマンドを使用して、API 拡張ポリシーのステータスを確認します。
    kubectl -n apim get APIMExtensionPolicy

    出力は次のようになります。StateRUNNING です。

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING  
  5. 次のコマンドを使用して、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 で定義されたホスト名です。
  6. リクエストは失敗し、次のようなレスポンスが返されます。
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}

    これは、Apigee 拡張機能ポリシーが有効であり、API キーの適用とアクセス トークンの検証が有効であることを示します。

API プロダクトを定義する

API プロダクトを定義します。

  1. apim Namespace に api-product.yaml という名前の新しいファイルを作成します。
  2. 次の内容を新しいファイルにコピーします。
    # 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
  3. 次のコマンドを使用して、ファイルを Gateway に適用します。
    kubectl -n apim apply -f api-product.yaml

API オペレーション セットを定義する

前の手順で作成した API プロダクトの API オペレーション セットを定義します。

  1. apim Namespace に apim-policies.yaml という名前の新しいファイルを作成します。
  2. 次の内容を新しいファイルにコピーします。このファイルでは、前の手順で定義した 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
  3. ファイルを Gateway に適用します。
    kubectl -n apim apply -f apim-policies.yaml

Apigee サービス拡張機能をテストする

このステップでは、Google Cloud コンソールの Apigee UI を使用して、Apigee サービス拡張機能と Gateway に適用された Apigee 拡張機能ポリシーをテストします。

テストのセットアップ

テストに必要な API リソースを設定します。

  1. Google Cloud コンソールで、[Apigee API 管理] ページに移動します。

    Apigee API の管理

  2. APIM Operator をインストールした Apigee 組織を選択します。
  3. デベロッパーを作成します。
    1. [配布] > [デベロッパー] を選択します。
    2. [デベロッパー] ページで、[+ 作成] をクリックします。
    3. [デベロッパーを追加] ページで、任意の値を使用して必須項目に入力します。
    4. [追加] をクリックします。
  4. アプリを作成します。
    1. [Distribution] > [Apps] を選択します。
    2. [アプリ] ページで、[+ 作成] をクリックします。
    3. [Create App] ページの [App Details] セクションで、次の値を使用して必須フィールドに入力します。
      • アプリ名: demo-app
      • デベロッパー: 前の手順で作成したデベロッパー、またはリストから別のデベロッパーを選択します。
    4. [アプリの認証情報] セクションで、[+ 認証情報を追加] をクリックします。
    5. [認証情報] セクションで、[認証情報の詳細] セクションの必須フィールドに次の値を入力します。
      • 認証情報名: demo-credential
      • 認証情報の種類: [API キー] を選択します。
    6. [作成] をクリックします。
    7. [商品] セクションで、[+ 商品を追加] をクリックします。
    8. 前の手順で作成した api-product-1 を選択します。
    9. [追加] をクリックします。
    10. [作成] をクリックします。
  5. [App Details] ページの [Credential] セクションで、 をクリックして [Key] の値を表示します。

    Key の値をコピーします。このキーは、後の手順でサービスに対して API 呼び出しを行うために使用します。

  6. [アプリの詳細] ページの [認証情報] セクションで、 をクリックして [アプリシークレット] の値を表示します。

    [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 アナリティクスを使用します。

  1. Google Cloud コンソールで、[Apigee API の管理] ページに移動します。

    Apigee API の管理

  2. APIM Operator をインストールした Apigee 組織を選択します。
  3. サイド ナビゲーション メニューで、[アナリティクス] > [API 指標] を選択します。
  4. [API Proxy Performance] タブで、オプションのインストール手順 Apigee 環境を作成するで作成した環境、またはインストール中に APIM Operator によって作成された環境を選択します。環境の名前は接頭辞 apigee-ext-proc-enabled-env で始まります。
  5. 記録された API トラフィックをモニタリングします。

トラブルシューティング

APIM Operator で API マネジメント ポリシーを使用する際に問題が発生した場合は、APIM Operator のトラブルシューティングで一般的なエラーの解決策をご覧ください。

次のステップ