Apigee Adapter for Envoy で HTTP 403 Forbidden エラーが返され Envoy プロキシが失敗する

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

内容

Apigee Adapter for Envoy を介して Envoy プロキシを呼び出すと、HTTP 403 Forbidden エラーで失敗する。

エラー メッセージ

次のエラー メッセージが表示されます。

HTTP/1.1 403 Forbidden
content-length: 19
content-type: text/plain
date: Tue, 03 Nov 2020 00:20:10 GMT
server: istio-envoy

考えられる原因

次のいずれかの条件が発生すると、Envoy プロキシは HTTP 403 エラーを発行します。

原因 説明 トラブルシューティングの実施対象
API プロダクトが有効になっていない 特定の環境で API プロダクトが有効になっていません。 Edge Public Cloud ユーザーと Private Cloud ユーザー
API プロダクトにターゲット サービスの URI パスがありません ターゲット サービスの URI パスがないか、API リソースの下の API プロダクトに追加されていません。 Edge Public Cloud ユーザーと Private Cloud ユーザー
API プロダクトにホスト名がありません クライアント API リクエストで指定されたホスト名が、Apigee リモート サービス ターゲットの API プロダクトにありません。 Edge Public Cloud ユーザーと Private Cloud ユーザー
リクエスト ヘッダーに API キーがない API キーは x-api-key HTTP ヘッダーで渡されません。 Edge Public Cloud ユーザーと Private Cloud ユーザー
無効な API キー リクエストで渡された API キーが無効です。 Edge Public Cloud ユーザーと Private Cloud ユーザー
Apigee Adapter for Envoy がリモート サービスの API プロキシと通信できない Apigee Adapter for Envoy がリモート サービス API プロキシと通信できません。 Edge Public Cloud ユーザーと Private Cloud ユーザー
Envoy プロキシが Apigee Adapter for Envoy と通信できない Envoy プロキシが Apigee Adapter for Envoy と通信できない Edge Public Cloud ユーザーと Private Cloud ユーザー

始める前に

  1. Envoy プロキシから 403 Forbidden レスポンス メッセージを取得していることを確認します。次に例を示します。
    curl -i -H "x-api-key: $API_KEY" http://httpbin:8080/echo
    
    HTTP/1.1 403 Forbidden
    content-length: 19
    content-type: text/plain
    date: Tue, 12 Jan 2021 08:18:08 GMT
    server: envoy
    RBAC: access denied
    
  2. デバッグログを有効にします。

    エラーの詳細をキャプチャするために、Apigee Adapter for Envoy でデバッグログが有効になっていることを確認してください。まだの場合は、次のコマンドを使用して Apigee Adapter for Envoy を停止してから再起動し、デバッグログを有効にします。

    apigee-remote-service-envoy -c config.yaml -l debug
    

原因: API プロダクトが有効になっていない

このエラーは、API 呼び出しが呼び出される特定の環境で、Envoy プロキシで使用される特定の API プロダクトが有効になっていない場合に発生します。

診断

次の手順で問題を診断します。

  1. 上記の手順 2 の説明に沿って、デバッグログを有効にします。
  2. Apigee Adapter for Envoy のログを調べて、Authorizing request セクションに次のメッセージが表示されていることを確認します。
    product: API_PRODUCT_NAME not found
    

    デバッグログ出力の例:

    2021-01-12T08:18:08.124Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:18:08.124Z        DEBUG   auth/verify_api_key.go:106      fetchToken fetching: 7mQIG...
    2021-01-12T08:18:08.589Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:18:08.589Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a0600), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746037188, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:18:08.589Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo
      target: httpbin:8080
      - product: ENVOY-PRODUCT-1
        not found
    

    上記の例は、API プロダクト ENVOY-PRODUCT-1 が Apigee Adapter for Envoy で見つからないことを示しています。

    Apigee Adapter for Envoy ロギングの詳細については、ロギングをご覧ください。

  3. API リクエストの承認中にこのメッセージが表示される場合は、API 呼び出しを行っている特定の環境で、その API プロダクトが有効になっていない可能性があります。
  4. これを確認するには、次の手順を行います。
    1. Edge UI にログインします。
    2. [Publish] > [API Products] ページで、Apigee Adapter for Envoy の構成に使用した API プロダクトをクリックします。
    3. API リクエストを行っている特定の環境が API プロダクトで有効になっていることを確認します。
    4. 特定の環境が API プロダクトで有効になっていない場合、それがこの問題の原因です。
  5. 特定の環境がすでに有効になっている場合は、 原因: API プロダクトにターゲット サービス URI パスがありませんに進みます。

解像度

API プロダクトで特定の環境が有効になっていない場合は、次の手順で問題を解決します。

  1. Edge UI にログインします。
  2. [Publish] > [API product] ページで、Apigee Adapter for Envoy の構成に使用した API プロダクトをクリックします。
  3. [API プロダクト] > [プロダクト名] ページで、[編集] をクリックします。
  4. 関連する環境のチェックボックスをオンにして、API リクエストを行う特定の環境を有効にします。
  5. [保存] をクリックします。

原因: API プロダクトにターゲット サービスの URI パスがありません

このエラーは、Envoy プロキシで使用される特定の API プロダクトでターゲットの URI パスが指定されていない場合に発生します。

診断

次の手順で問題を診断します。

  1. 上記の手順 2 の説明に沿って、デバッグログを有効にします。
  2. Apigee Adapter for Envoy ログをチェックし、Authorizing request セクションの特定のターゲットに関連付けられている特定の API プロダクトについて、次のメッセージが表示されていることを確認します。

    no path: REQUEST_URI_PATH
    

    デバッグログ出力の例:

    2021-01-12T08:09:02.604Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:09:02.605Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:09:02.605Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:09:02.605Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo1
      target: httpbin:8080
      - product: ENVOY-PRODUCT-1
        no path: /echo1
    2021-01-12T08:09:02.605Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)

    出力例に次のメッセージが表示されます。

    no path: /echo1
    

    これは、パス /echo1 が API プロダクト ENVOY-PRODUCT-1 で見つからなかったことを示します。

  3. Apigee Adapter for Envoy デバッグログに「no path: REQUEST_URI_PATH」というメッセージが表示された場合は、それがこの問題の原因です。ない場合は、原因: API プロダクトにホスト名がないをご覧ください。

解像度

特定のリクエスト URI が特定のターゲットの API プロダクトに追加されていない場合は、次の手順で問題を解決します。

  1. Edge UI にログインします。
  2. [Publish] > [API Products] ページで、Apigee Adapter for Envoy の構成に使用した API プロダクトをクリックします。
  3. [API プロダクト] > [プロダクト名] ページで、[編集] をクリックします。
  4. [API resources] ペインで、API リクエスト URI を API プロダクトに追加します。
  5. Apigee Adapter for Envoy ログをモニタリングし、Apigee Adapter for Envoy が更新された API プロダクトを取得するまで待ちます。その後、別の API リクエストを送信して修正を確認します。

原因: API プロダクトにホスト名がありません

このエラーは、Envoy プロキシで使用される特定の API プロダクトに、ターゲット ホスト名とポートの組み合わせが追加されていない場合に発生します。

診断

次の手順で問題を診断します。

  1. 上記の手順 2 の説明に沿って、デバッグログを有効にします。
  2. Apigee Adapter for Envoy ログをチェックし、Authorizing request セクションの特定のターゲットに関連付けられている特定の API プロダクトについて、次のメッセージが表示されていることを確認します。

    no targets: HOSTNAME:PORT
    

    デバッグログ出力の例:

    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:12:06.019Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo
      target: httpbin1:8080
      - product: ENVOY-PRODUCT-1
        no targets: httpbin1:8080
    2021-01-12T08:12:06.020Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)

    上記の例は、ホスト名とポートの組み合わせ httpbin1:8080 が API プロダクト ENVOY-PRODUCT-1 で見つからなかったことを示しています。

  3. リクエストの承認中に「no targets: HOSTNAME:PORT」というメッセージを含むエントリが Apigee Adapter for Envoy ログに含まれている場合は、これが問題の原因です。ない場合は、原因: リクエスト ヘッダーに API キーがないをご覧ください。

解像度

ターゲット ホスト名とポートの組み合わせが API プロダクトに追加されていない場合は、次の手順で問題を解決します。

  1. Edge UI にログインします。
  2. [Publish] > [API Products] ページで、Apigee Adapter for Envoy の構成に使用した API プロダクトをクリックします。
  3. [API プロダクト] > [プロダクト名] ページで、[編集] をクリックします。
  4. [Apigee リモート サービス ターゲット] ペインで、ターゲットのホスト名とポートを追加し、[Save] をクリックします。

    UI に [Apigee リモート サービス ターゲット] セクションが表示されない場合は、Edge API を使用して、apigee-remote-service-targets という名前のカスタム属性を API プロダクトに追加し、HOSTNAME:PORT 値を追加します。例:

    curl https://api.enterprise.apigee.com/v1/organizations/$ORG/apiproducts/$ENVOY_PRODUCT \
        -X GET \
        -H "Authorization: Bearer $ACCESS_TOKEN" \
        -H "Content-Type:application/json" \
        -d \
    {
        "apiResources": [
            "/echo",
            "/verifyApiKey"
        ],
        "approvalType": "auto",
        "attributes": [
            {
                "name": "access",
                "value": "public"
            },
            {
                "name": "apigee-remote-service-targets",
                "value": "localhost:8080"
            }
        ],
        "createdAt": 1610435989556,
        "createdBy": "---masked---",
        "description": "",
        "displayName": "ENVOY-PRODUCT-1",
        "environments": [
            "test"
        ],
        "lastModifiedAt": 1612234134060,
        "lastModifiedBy": "---masked---",
        "name": "ENVOY-PRODUCT-1",
        "proxies": [
            "remote-service"
        ],
        "scopes": []
    }
    
  5. 上記のタスクが完了したら、Apigee Adapter for Envoy ログをモニタリングし、Apigee Adapter for Envoy が更新された API プロダクトを取得するまで待ちます。その後、別の API リクエストを送信して修正を検証します。

原因: リクエスト ヘッダーに API キーがありません

このエラーは、API キーがリクエスト ヘッダーの一部として渡されていない場合に発生します。

診断

次の手順で問題を診断します。

  1. 上記の手順 2 の説明に沿って、デバッグログを有効にします。
  2. Apigee Adapter for Envoy ログで、Authenticate error セクションに [missing authentication] メッセージが表示されていることを確認します。

    デバッグログ出力の例:

    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:98 Authenticate: key: , claims: map[string]interface {}(nil)
    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:159
    Authenticate error: &auth.Context{Context:(*server.Handler)
    (0xc0001a0600), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0,
    loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [missing authentication]
    2021-01-12T08:20:31.461Z        DEBUG   server/authorization.go:205     sending denied: UNAUTHENTICATED
    2021-01-12T08:20:32.448Z        DEBUG   server/header_context.go:68     No context header x-apigee-api, using target header
    : :authority

    上記のサンプル出力にはメッセージ [missing authentication] が含まれています。このメッセージは、API キーがリクエスト ヘッダーの一部として渡されていないことを示します。

  3. Apigee Adapter for Envoy ログの Authenticate error セクションに「[missing authentication]」というログエントリが含まれている場合、これが問題の原因です。そうでない場合は、原因: 無効な API キーに進みます。

解像度

Apigee Adapter for Envoy ログにエラー [missing authentication] が表示されている場合は、次の手順で問題を解決します。

  1. クライアントが API リクエストの HTTP ヘッダー x-api-key を使用して API キーを送信したかどうかを確認します。そうでない場合、HTTP ヘッダー x-api-key で API キーを送信するようクライアントにリクエストします。
  2. Apigee Adapter for Envoy 構成ファイルを確認し、デフォルトの API キーヘッダー名 x-api-key が変更されていることを確認します。次に例を示します。
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        global:
          tls:
            ...
        tenant:
          ...
        auth:
          target_header: api-key
    

    上記の例では、デフォルトの API キーヘッダー名が api-key に変更されています。この場合は、ヘッダー api-key の一部として API キーを渡す必要があります。

  3. デフォルトの API キーヘッダー名が変更された場合は、更新された API キーヘッダー名を使用してクライアントにリクエストし、別の API リクエストを送信して問題が解決するかどうかを確認します。

原因: API キーが無効です

このエラーは、リクエスト ヘッダーの一部として無効な API キーが渡された場合に発生します。

診断

次の手順で問題を診断します。

  1. 上記の手順 2 の説明に沿って、デバッグログを有効にします。
  2. Apigee Adapter for Envoy ログを調べて、Authenticate error セクションに [permission denied] というメッセージが表示されていることを確認します。これは通常、アダプターが API キーを取得した後に表示されます。メッセージ fetchToken fetching: API_KEY で示されます。

    デバッグログ出力の例:

    2021-01-12T05:01:07.198Z        DEBUG   auth/auth.go:98 Authenticate: key: 123, claims: map[string]interface {}(nil)
    2021-01-12T05:01:07.198Z        DEBUG   auth/verify_api_key.go:106      fetchToken fetching: API_KEY
    2021-01-12T05:01:09.102Z        DEBUG   server/header_context.go:68     No context header x-apigee-api, using target header: :authority
    2021-01-12T05:01:09.831Z        DEBUG   auth/auth.go:159        Authenticate error: &auth.Context{Context:(*server.Handler)(0xc0001640c0), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [permission denied]
    2021-01-12T05:01:09.832Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)
    

    この例では、API リクエストで送信された API キーは有効ではありませんでした。

  3. Apigee Adapter for Envoy ログの Authenticate error セクションに [permission denied] を含むログエントリが含まれている場合、リクエストの一部として渡された API キーが無効であり、これが問題の原因であることを示しています。できない場合は、原因: Apigee Adapter for Envoy がリモート サービスの API プロキシと通信できないをご覧ください。

解像度

Apigee Adapter for Envoy ログの Authenticate error セクションに「[permission denied]」というメッセージが表示される場合は、次の手順で問題を解決します。

  1. API リクエストで送信された API キーと、API プロダクトに接続されているアプリケーション内の API キー値を確認します。
  2. クライアントで使用されている API キーが有効でない場合は、有効な API キーを送信するようクライアントに依頼します。
  3. クライアントで使用されている API キーが有効であるにもかかわらず、HTTP 403 エラーが表示される場合は、Apigee Edge サポートに連絡して調査を依頼してください。

原因: Apigee Adapter for Envoy がリモート サービス API プロキシと通信できない

このエラーは、構成されたリモート サービス ホストが無効な場合に、Apigee Adapter for Envoy がリモート サービス API プロキシと通信できない場合に発生します。

診断

次の手順で問題を診断します。

  1. 上記の手順 2 の説明に沿って、デバッグログを有効にします。
  2. Apigee Adapter for Envoy のログを調べて、次のメッセージが表示されていることを確認します。

    Error retrieving products: REQUEST_URI: no such host
    

    デバッグログ出力の例:

    2021-01-12T08:29:06.499Z        DEBUG   product/manager.go:188  retrieving products from: https://foo/remote-service/products
    2021-01-12T08:29:06.505Z        ERROR   product/manager.go:164  Error retrieving products: GET "https://foo/remote-service/pro
    ducts": dial tcp: lookup foo on 169.254.169.254:53: no such host
    github.com/apigee/apigee-remote-service-golib/product.(*manager).start.func1
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/product/manager.go:164
    github.com/apigee/apigee-remote-service-golib/util.(*Looper).Run
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:87
    github.com/apigee/apigee-remote-service-golib/util.(*Looper).Start.func1
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:59
    

    この例では、リモート サーバーの API プロキシ URL で指定されたホスト名が有効でないため、Apigee Adapter for Envoy がリモート サービス API プロキシと通信できませんでした(エラー no such host で示されています)。

  3. Apigee Adapter for Envoy ログに no such host というメッセージを含むログエントリが含まれている場合、これが問題の原因です。できない場合は、 原因: Envoy プロキシが Apigee Adapter for Envoy と通信できないをご覧ください。

解像度

上記のエラーが Apigee Adapter for Envoy ログに表示された場合は、次の手順で問題を解決します。

  1. Apigee Adapter for Envoy 構成ファイルを確認し、指定したリモート サービスの API プロキシ URL が有効であることを確認します。

    有効になっていない場合は、Apigee Adapter for Envoy を停止し、構成ファイルでリモート サービスの API プロキシ URL を修正します。Apigee Adapter for Envoy を起動して別の API リクエストを送信し、修正を確認します。

    構成の例:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          internal_api: https://istioservices.apigee.net/edgemicro
          remote_service_api: https://ORG-ENV.apigee.net/remote-service
          org_name: ORG
          env_name: ENV
          key: KEY
          secret: SECRET
          
  2. 関連する Edge 環境に remote-service API プロキシがデプロイされていることを確認します。存在しない場合は、関連する Edge 環境に remote-service API プロキシをデプロイしてから、もう一度お試しください。
  3. Apigee Adapter for Envoy と remote-service API プロキシ エンドポイント間のネットワーク接続を確認します。ネットワーク接続の問題が見つかった場合は、ネットワーク チームに連絡して問題の解決を試みてください。

原因: Envoy プロキシが Apigee Adapter for Envoy と通信できない

診断

次の手順で問題を診断します。

  1. Envoy でデバッグログが有効になっていることを確認します。まだの場合は、Envoy を停止して再起動し、デバッグログを有効にします。その後、別の API リクエストを送信します。

    スタンドアロン デプロイ:

    envoy -c envoy-config.yaml -l debug
    

    Kubernetes/Istio ベースのデプロイ:

    kubectl -n=istio-system get pods
    kubectl -n=istio-system exec -it INGRESS_GATEWAY_NAME bash -- curl -X POST localhost:15000/logging?connection=debug
    
  2. Apigee Adapter for Envoy ログを調べて、次のメッセージを含むログエントリがあることを確認します。
    connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
    

    その後に、次のようになります。

    upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
    

    デバッグログ出力の例:

    [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:769] [C4] connecting to 127.0.0.1:5000
    [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:785] [C4] connection in progress
    [2021-03-23 05:44:41.868][1303661][debug][http2] [external/envoy/source/common/http/http2/codec_impl.cc:1173] [C4] updating connection-level initial window size to 268435456
    [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:634] [C4] delayed connection error: 111
    [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:203] [C4] closing socket: 0
    [2021-03-23 05:44:41.869][1303661][debug][client] [external/envoy/source/common/http/codec_client.cc:96] [C4] disconnect. resetting 0 pending requests
    [2021-03-23 05:44:41.869][1303661][debug][pool] [external/envoy/source/common/conn_pool/conn_pool_base.cc:314] [C4] client disconnected, failure reason:
    [2021-03-23 05:44:41.869][1303661][debug][router] [external/envoy/source/common/router/router.cc:1031] [C0][S6149963213555558594] upstream reset: reset reason: connection failure, transport failure reason:
    [2021-03-23 05:44:41.869][1303661][debug][http] [external/envoy/source/common/http/async_client_impl.cc:100] async http request response headers (end_stream=true):
    ':status', '200'
    'content-type', 'application/grpc'
    'grpc-status', '14'
    'grpc-message', 'upstream connect error or disconnect/reset before headers. reset reason: connection failure'

    上記の例は、connection failure が原因で Envoy が Apigee Adapter for Envoy と通信できなかったことを示しています。

  3. connection failure の原因はいくつか考えられます。それぞれのシナリオを見ていきましょう。

シナリオ 1: アダプタ プロセスが実行されていない

Apigee Adapter for Envoy プロセスが実行されていない場合、このエラーが発生する可能性があります。

  1. 次のコマンドを実行して、Apigee Adapter for Envoy プロセスが実行されていることを確認します。Apigee Adapter for Envoy プロセスが実行されている場合は、次のコマンドの結果にそのプロセスが表示されます。
    ps -ef | grep apigee-remote-service-envoy
    
  2. 実行されていない場合は、これが問題の原因です。

解像度

  1. Apigee Adapter for Envoy プロセスが実行されていない場合は、Apigee Adapter for Envoy を起動します。
  2. もう一度 API リクエストを行い、問題が解決したかどうかを確認します。

シナリオ 2: アダプタ プロセスが特定のポートでリッスンしない

Apigee Adapter for Envoy プロセスが特定のポートでリッスンしていない場合、このエラーが発生する可能性があります。

Apigee Adapter for Envoy プロセスが実行されている場合は、ポート 5000 でリッスンするソケット APIGEE_ENVOY_ADAPTER_HOST:5000 があることを確認します。これを確認するには、netstat コマンドを実行します。

sudo netstat -lnp | grep 5000

出力例:

sudo netstat -lnp | grep 5000

tcp6       0      0 :::5000                 :::*                    LISTEN      1596530/./apigee-re

ポート 5000 でリッスンしているソケットがない場合、これが問題の原因である可能性があります。

解像度

  1. Apigee Adapter for Envoy を停止して再起動します。
  2. もう一度 API リクエストを行い、問題が解決したかどうかを確認します。

シナリオ 3: Envoy と Apigee Adapter for Envoy の間のネットワーク接続

  1. Envoy と Apigee Adapter for Envoy の間のネットワーク接続を確認します。
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

    telnet から Apigee Adapter for Envoy への TCP 接続が確立されている場合は、次のような出力が表示されます。

    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    
  2. telnet で Connection timed out エラーが表示された場合は、Envoy と Apigee Adapter for Envoy の間にネットワーク接続の問題があることを示します。

解像度

Envoy と Apigee Adapter for Envoy の間にネットワーク接続の問題が発生した場合は、ネットワーク チームにお問い合わせのうえ、問題の解決をお試しください。

問題が解決しない場合は、診断情報の収集が必要な場合に進みます。

診断情報の収集が必要な場合

上記の手順を行っても問題が解決しない場合は、次の診断情報を収集して Apigee Edge サポートに連絡してください。

  1. 使用する Apigee プロダクト:

    例: Apigee Edge Cloud、Apigee OPDK、Apigee ハイブリッド、Apigee X

  2. Apigee の組織と環境
  3. Edge API を使用した API プロダクト定義の読み取り:

    curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT

    リファレンス: Apigee Edge API

  4. Apigee Edge UI を使用して、remote-service API プロキシでトレース セッションを開始します。この問題を再現し、トレース セッションの XML ファイルを共有してください。

    リファレンス: Trace ツールの使用 | Apigee Edge

  5. Apigee Adapter for Envoy ログ(特定の期間に関連する完全なログ)

    スタンドアロン デプロイ:

    # by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
    

    Kubernetes/Istio ベースのデプロイ:

    kubectl -n=apigee get pods
    kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
  6. curl コマンドを使用して Envoy プロキシに送信された API リクエスト(curl コマンドの完全な出力):
    curl -v ENVOY_PROXY_ENDPOINT
  7. curl コマンドを使用してターゲット サービスに送信された API リクエスト(curl コマンドの完全な出力):
    curl -v TARGET_SERVICE_ENDPOINT