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

ここに表示されているのは Apigee Edge のドキュメントです。
Go to the Apigee X のドキュメントに移動します
info

症状

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 プロダクトが有効になっていない

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 のロギングの詳細については、 ロギングをご覧ください。

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

解決策

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

  1. Edge UI にログインします。
  2. [Publish > API products] ページで、Apigee Adapter for Envoy の構成に使用した特定の API プロダクトをクリックします。
  3. [API products > Product name] ページで、[Edit] をクリックします。
  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

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

  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 products > Product name] ページで、[Edit] をクリックします。
  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 プロダクトに対して次のメッセージが 表示されていることを確認します。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. [Publish > API products] ページで、Apigee Adapter for Envoy の構成に使用した特定の API プロダクトをクリックします。
  3. [API products > Product name] ページで、[Edit] をクリックします。
  4. [Apigee remote service targets] ペインで、ターゲット ホスト名と ポートを追加して [保存] をクリックします。

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

    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 のログを確認し、 [missing authentication] メッセージが Authenticate error セクションに表示されていることを確認します。

    デバッグログの出力例:

    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 キーをヘッダー 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 プロダクトに接続されている アプリケーションにある 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 で指定されたホスト名が無効であるため(エラー no such host で示されています)、Apigee Adapter for Envoy がリモート サービス API プロキシと通信できませんでした。

  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. remote-service API プロキシが関連する Edge 環境にデプロイされていることを確認します。デプロイされていない場合は、関連する 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'

    上記の例では、Envoy が connection failure という理由で 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:5000netstat コマンドを実行して確認できます。

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