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

<ph type="x-smartling-placeholder"></ph> 現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント
詳細

症状

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

エラー メッセージ

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

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 ユーザーと Edge Private Cloud ユーザー
API プロダクトにターゲット サービスの URI パスがない ターゲット サービスの URI パスがないか、API で API プロダクトに追加されていません 説明します。 Edge Public Cloud ユーザーと Edge Private Cloud ユーザー
API プロダクトにホスト名がない クライアント API リクエストで指定されたホスト名が Apigee の API プロダクトにない リモートサービスターゲットを指定します Edge Public Cloud ユーザーと Edge Private Cloud ユーザー
リクエスト ヘッダーに API キーがない API キーが x-api-key HTTP ヘッダーで渡されていない。 Edge Public Cloud ユーザーと Edge Private Cloud ユーザー
API キーが無効です リクエストの一部として渡された API キーが無効です。 Edge Public Cloud ユーザーと Edge Private Cloud ユーザー
Apigee Adapter for Envoy は、 リモート サービスの API プロキシと通信する Apigee Adapter for Envoy がリモート サービスの API プロキシと通信できません。 Edge Public Cloud ユーザーと Edge Private Cloud ユーザー
Envoy プロキシが通信できない (Apigee Adapter for Envoy を使用) Envoy プロキシが Apigee Adapter for Envoy と通信できない Edge Public Cloud ユーザーと Edge Private Cloud ユーザー

始める前に

  1. 403 Forbidden レスポンス メッセージが Envoy プロキシ。次に例を示します。
    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 プロダクトが有効になっていない

このエラーは、Envoy プロキシで使用される特定の API プロダクトが 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 のロギングの詳細については、以下をご覧ください。 Logging

  3. API リクエストの承認中にこのメッセージが表示された場合、次の可能性が考えられます。 特定の API プロダクトが、使用している特定の環境で有効になっていないこと API 呼び出しを行います
  4. 次の手順でこれを確認します。 <ph type="x-smartling-placeholder">
      </ph>
    1. Edge UI にログインします。
    2. [公開 >API プロダクト ページで、対象の API プロダクトを Apigee Adapter for Envoy の構成に使用します。
    3. API リクエストを行っている特定の環境が API プロダクトで有効にする必要があります。
    4. 特定の環境が API プロダクトで有効になっていない場合は、それが原因です。 判断してください
  5. 特定の環境がすでに有効になっている場合は、[ <ph type="x-smartling-placeholder"></ph> 原因: API プロダクトにターゲット サービスの URI パスがありません

解決策

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

  1. Edge UI にログインします。
  2. [公開 >API プロダクト ページで、使用した特定の API プロダクトをクリックします。 Apigee Adapter for Envoy の構成方法を説明します。
  3. [API プロダクト >[プロダクト名] ページで [編集] をクリックします。
  4. API リクエストを行う特定の環境を有効にするには、 該当する環境のチェックボックスを選択します
  5. [保存] をクリックします。

原因: API プロダクトにターゲット サービスの URI パスがない

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

診断

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

  1. 上記のステップ 2 の説明に従ってデバッグログを有効にします。
  2. Apigee Adapter for Envoy のログで、次のメッセージを確認します。 特定のターゲットに関連付けられた特定の API プロダクトに対して表示されます。 Authorizing request:

    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. [no path: REQUEST_URI_PATH] というメッセージが表示された場合、 Apigee Adapter for Envoy デバッグログを使用している場合、これがこの問題の原因です。そうでない場合は、次に進みます。 原因: API プロダクトにホスト名がありません

解決策

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

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

原因: API プロダクトにホスト名がない

このエラーは、ターゲット ホスト名とポートの組み合わせが特定の Envoy プロキシで使用される API プロダクト。

診断

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

  1. 上記のステップ 2 の説明に従ってデバッグログを有効にします。
  2. Apigee Adapter for Envoy のログで、次のメッセージを確認します。 特定のターゲットに関連付けられた特定の API プロダクトに対して表示されます。 Authorizing request:

    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. Apigee Adapter for Envoy のログに、リクエストの承認中に no targets: HOSTNAME:PORT というメッセージを含むエントリが含まれている場合、これは 問題の原因を特定します。そうでない場合は、次に進みます。 原因: リクエスト ヘッダーに API キーがありません

解決策

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

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

    UI に [Apigee リモート サービス ターゲット] セクションが表示されない場合は、 API プロダクトにカスタム属性を 「apigee-remote-service-targets」という名前を付け、 Edge 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": []
    }
    
    <ph type="x-smartling-placeholder">
  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 キーが無効です

解決策

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

  1. クライアントが HTTP ヘッダー x-api-key を使用して API キーを送信しているかどうかを確認します。 作成されます。存在しない場合は、クライアントに HTTP ヘッダーで API キーを送信するようリクエストします。 x-api-key
  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 キーを渡す必要があります。 api-key

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

原因: API キーが無効

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

診断

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

  1. 上記のステップ 2 の説明に従ってデバッグログを有効にします。
  2. Apigee Adapter for Envoy のログを調べ、次のメッセージが表示されていることを確認します。 [permission denied] [Authenticate error] セクションに表示されます。 これは通常、アダプタが 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 プロダクトに接続されているアプリケーション。
  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
    

    この例では、Apigee Adapter for Envoy が VPC ネットワークと通信できず、 リモート サーバーの API プロキシに提供されているホスト名があるため、リモート サービスの API プロキシ エラー no such host に示されているように、URL は有効ではありません。

  3. Apigee Adapter for Envoy のログに no such host というメッセージを含むログエントリが含まれている場合は、これが問題の原因です。そうでない場合は、次に進みます。 <ph type="x-smartling-placeholder"></ph> 原因: 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 と VM 間のネットワーク接続を確認する 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'

    上記の例は、Envoy が外部 IP アドレスから Apigee Adapter for Envoy。理由 connection failure

  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. 次のコマンドを使用して、remote-service API プロキシでトレース セッションを開始します。 Apigee Edge UI。この問題を再現し、トレース セッション 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