ApigeeBackendService を作成する

このページは ApigeeApigee ハイブリッドに適用されます。

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

このページでは、クラスタで実行されている Google Kubernetes Engine(GKE)Gateway に必要なトラフィック拡張機能を作成するために ApigeeBackendService を作成する方法について説明します。

この方法は、APIMExtensionPolicy を使用して Apigee データプレーンを GKE Gateway のポリシー決定ポイント(PDP)として識別する方法の代替手段です。ApigeeBackendService を作成すると、Apigee Operator for Kubernetes は、ApigeeBackendService と同じ名前と Namespace を持つ APIMExtensionPolicy を自動的に作成します。これはバックアップ APIMExtensionPolicy です。

Cloud Load Balancing トラフィック拡張機能を作成して管理し、トラフィック拡張機能リソースに拡張機能として Apigee を追加する場合は、この方法をおすすめします。Apigee トラフィック拡張機能が他のトラフィック拡張機能と連携して動作する場合は、ApigeeBackendService を使用する必要があります。

始める前に

このタスクを始める前に、次のことを行ってください。

  • GKE 実装で GKE バージョン 1.34.x 以降が使用されていることを確認します。
  • GKE クラスタに Workload Identity が構成されていることを確認します。必要な手順については、Workload Identity を作成するをご覧ください。
  • クラスタで GKE Gateway が構成され、動作していることを確認します。詳細については、Gateway のデプロイをご覧ください。
  • Apigee Operator for Kubernetes をインストールします。インストール手順については、Apigee Operator for Kubernetes をインストールするをご覧ください。

必要なロール

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

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

ApigeeBackendService リソースを作成する

GKE Gateway でトラフィック サービス拡張機能を構成するには、次の 2 つのメインリソースを作成します。

  • ApigeeBackendService: このカスタム リソースは、Apigee データプレーンをポリシー決定点(PDP)として指定し、Private Service Connect(PSC)ネットワーク エンドポイント グループ(NEG)のネットワークの詳細を構成します。
  • GCPTrafficExtension: この GKE Gateway API リソースは、トラフィックが ApigeeBackendService に転送される方法などの拡張機能チェーンを定義します。

ApigeeBackendService を作成します。

ApigeeBackendService リソースは、Apigee データプレーンを GCPTrafficExtension の PDP として指定します。

ApigeeBackendService の作成方法:

  1. 次の内容で apigee-backend-service.yaml という名前の YAML ファイルを作成します。
  2. # apigee-backend-service.yaml
    kind: ApigeeBackendService
    apiVersion:  apim.googleapis.com/v1
    metadata:
      name: my-apigee-extension-backend-service
    spec:
      apigeeEnv: ENV_NAME # optional for Apigee, required for hybrid
      defaultSecurityEnabled: SECURITY_ENABLED
      locations: # required field
      - name: REGION_NAME_1
        network: NETWORK_NAME_1
        subnet: SUBNET_NAME_1
      - name: REGION_NAME_2
        network: NETWORK_NAME_2
        subnet: SUBNET_NAME_2

    ここで

    • ENV_NAME は使用する Apigee 環境です。これは、APIMExtensionPolicyapigeeEnv フィールドに似ています。このフィールドは、Apigee では省略可能ですが、ハイブリッドでは必須です。
    • SECURITY_ENABLED(省略可)は、API キーの検証と割り当てチェックのデフォルトの Apigee ポリシーを自動的に有効にするかどうかを指定します。指定しない場合のデフォルトは true です。
    • REGION_NAME_1 は、GKE Gateway をデプロイするリージョンを指定します。
    • NETWORK_NAME_1SUBNET_NAME_1 は、PSC NEG が作成されるネットワークとサブネットワークの完全なリソース URI を指定します。たとえば、projects/my-project/global/networks/my-defaultprojects/my-project/regions/us-central1/subnetworks/my-default です。通常、これらは GKE クラスタのネットワークとサブネットワークと同じです。
    • REGION_NAME_2NETWORK_NAME_2SUBNET_NAME_2 は省略可能です。Apigee トラフィック拡張機能を複数のリージョンにデプロイする場合は、これらが必要です。

  3. YAML ファイルを default Namespace のクラスタに適用します。
    kubectl apply -f apigee-backend-service.yaml
  4. ApigeeBackendService が正常に作成されたことを確認します。
    kubectl get apigeebackendservice

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

    NAMESPACE   NAME                          STATE     ERRORMESSAGE
    default     default-ext-lb1-apim-policy   CREATED   

ApigeeBackendService を作成すると、Apigee Operator for Kubernetes は、ApigeeBackendService と同じ名前と Namespace の APIMExtensionPolicy を自動的に作成します。これはバックアップ APIMExtensionPolicy です。

defaultSecurityEnabledtrue に設定されている場合、Apigee Operator for Kubernetes はデフォルトの API キーと割り当てポリシーを APIMExtensionPolicy に自動的に追加します。ポリシーを追加するには、GKE Gateway にポリシーを追加するをご覧ください。

GCPTrafficExtension リソースを作成する

GCPTrafficExtension リソースは Apigee の拡張機能を定義し、前の手順で作成した ApigeeBackendServicebackendRef として参照します。GCPTrafficExtension の構成の詳細については、サービス拡張機能を構成するをご覧ください。

supportedEvents フィールドは、リクエストとレスポンスのライフサイクルのどの部分が拡張機能に公開されるかを指定します。Apigee Operator for Kubernetes は、次のイベントをサポートしています。

  • RequestHeaders
  • RequestBody
  • RequestTrailers
  • ResponseHeaders
  • ResponseBody
  • ResponseTrailers
リクエストまたはレスポンスの本文の検査あるいは変更が必要なポリシー(JSONThreatProtection など)の場合は、supportedEvents リストに RequestBodyResponseBody を含める必要があります。サポートされているイベントの詳細については、Cloud Load Balancing トラフィック拡張機能のドキュメントをご覧ください。

GCPTrafficExtension の作成方法:

  1. 次の内容で gcp-traffic-extension.yaml という名前の YAML ファイルを作成します。
    # gcp-traffic-extension.yaml
    kind: GCPTrafficExtension
    apiVersion: networking.gke.io/v1
    metadata:
      name: my-apigee-extension
    spec:
      targetRefs:
      - group: "gateway.networking.k8s.io"
        kind: Gateway
        name: GATEWAY_NAME  # Replace with your GKE Gateway name
      extensionChains:
      - name: EXTENSION_CHAIN_NAME
        matchCondition:
          celExpressions:
          - celMatcher: request.path.startsWith("/")
        extensions:
        - name: EXTENSION_NAME
          metadata:
            # This metadata label must match the name of the ApigeeBackendService
            apigee-extension-processor : APIGEE_BACKEND_SERVICE_NAME
          failOpen: false
          supportedEvents:
          - SUPPORTED_EVENT1
          - SUPPORTED_EVENT2
          timeout: 1s
          requestBodySendMode: FullDuplexStreamed
          backendRef: # References the ApigeeBackendService by kind and name
            kind: ApigeeBackendService
            name: APIGEE_BACKEND_SERVICE_NAME
            Port: 443

    ここで

    • GATEWAY_NAME は、拡張機能が適用される GKE Gateway の名前です。
    • EXTENSION_CHAIN_NAME は拡張機能チェーンの名前です。
    • EXTENSION_NAME は、トラフィック サービス拡張機能の名前です。
    • APIGEE_BACKEND_SERVICE_NAME は、以前に作成した ApigeeBackendService の名前です。extensions ブロック内のこのラベルは、先ほど作成した ApigeeBackendServicemetadata.name と一致している必要があります。
    • supportedEvents フィールドは、リクエストとレスポンスのライフサイクルのどの部分が拡張機能に公開されるかを指定します。Apigee Operator for Kubernetes は、次のイベントをサポートしています。
      • RequestHeaders
      • RequestBody
      • RequestTrailers
      • ResponseHeaders
      • ResponseBody
      • ResponseTrailers
      リクエストまたはレスポンスの本文の検査あるいは変更が必要なポリシー(JSONThreatProtection など)の場合は、supportedEvents リストに RequestBodyResponseBody を含める必要があります。 サポートされているイベントの詳細については、Cloud Load Balancing トラフィック拡張機能のドキュメントをご覧ください。
  2. YAML ファイルをクラスタに適用します。
    kubectl apply -f gcp-traffic-extension.yaml

次のステップ