Envoy 代理失败,并且适用于 Envoy 的 Apigee Adapter 中出现 HTTP 403 Forbidden 错误

您正在查看的是 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 公有云和私有云用户
API 产品中缺少目标服务 URI 路径 目标服务的 URI 路径缺失或未添加到 API 产品中的 API 资源下。 Edge 公有云和私有云用户
API 产品中缺少主机名 Apigee 远程服务目标下的 API 产品中缺少客户端 API 请求中提供的主机名。 Edge 公有云和私有云用户
请求标头中缺少 API 密钥 API 密钥不会在 x-api-key HTTP 标头中传递。 Edge 公有云和私有云用户
API 密钥无效 作为请求的一部分传递的 API 密钥无效。 Edge 公有云和私有云用户
Apigee Adapter for Envoy 无法与远程服务 API 代理通信 Apigee Adapter for Envoy 无法与远程服务 API 代理通信。 Edge 公有云和私有云用户
Envoy 代理无法与 Apigee Adapter for Envoy 通信 Envoy 代理无法与 Apigee Adapter for Envoy 通信 Edge 公有云和私有云用户

准备工作

  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
    

    上例表明,未在 Apigee Adapter for Envoy 中找到 API 产品 ENVOY-PRODUCT-1

    如需详细了解 Apigee Adapter for Envoy 日志记录,请参阅 Logging

  3. 如果您在向 API 请求授权时看到此消息,很可能是因为您调用 API 的特定环境未启用特定的 API 产品。
  4. 请执行以下步骤来验证这一点:
    1. 登录 Edge 界面
    2. 发布 > API 产品页面上,点击用于配置 Apigee Adapter for Envoy 的特定 API 产品。
    3. 验证您发出 API 请求的特定环境在 API 产品中是否处于启用状态。
    4. 如果 API 产品中未启用特定环境,这就是导致此问题的原因。
  5. 如果特定环境已启用,请参阅 原因:API 产品中缺少目标服务 URI 路径

分辨率

如果 API 产品中未启用特定环境,请执行以下步骤来解决问题:

  1. 登录 Edge 界面
  2. 发布 > API 产品页面上,点击您用于配置 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
    

    这表示在 API 产品 ENVOY-PRODUCT-1 中找不到路径 /echo1

  3. 如果您在适用于 Envoy 的 Apigee Adapter 调试日志中看到消息 no path: REQUEST_URI_PATH,这就是导致此问题的原因。如果不正确,请参阅原因:API 产品中缺少主机名

分辨率

如果特定请求 URI 未添加到特定目标的 API 产品中,请执行以下步骤来解决问题:

  1. 登录 Edge 界面
  2. 发布 > API 产品页面上,点击用于配置 Apigee Adapter for Envoy 的特定 API 产品。
  3. API 产品 > 产品名称页面上,点击修改
  4. API 资源窗格中,将 API 请求 URI 添加到 API 产品。
  5. 监控 Apigee Adapter for Envoy 日志,并等待适用于 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)

    以上示例显示,在 API 产品 ENVOY-PRODUCT-1 中找不到主机名和端口组合 httpbin1:8080

  3. 如果 Apigee Adapter for Envoy 日志在授权请求时包含带有消息 no targets: HOSTNAME:PORT 的条目,则这就是问题的原因。如果不是,请转到原因:请求标头中缺少 API 密钥

分辨率

如果目标主机名和端口组合未添加到 API 产品中,请执行以下步骤来解决问题:

  1. 登录 Edge 界面
  2. 发布 > API 产品页面上,点击用于配置 Apigee Adapter for Envoy 的特定 API 产品。
  3. API 产品 > 产品名称页面上,点击修改
  4. Apigee 远程服务目标窗格中,添加目标主机名和端口,然后点击保存

    如果您在界面中没有看到 Apigee 远程服务目标部分,请使用 Edge API 为 API 产品添加名为 apigee-remote-service-targets 的自定义属性并添加 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. 完成上述任务后,监控适用于 Envoy 的 Apigee Adapter 日志,并等待适用于 Envoy 的 Apigee Adapter 提取更新后的 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 密钥无效

分辨率

如果适用于 Envoy 的 Apigee Adapter 日志中显示错误 [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 日志,并验证 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
    

    在此示例中,Apigee Adapter for Envoy 无法与远程服务 API 代理通信,因为远程服务器 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 代理网址是否有效。

    如果不是,请停止 Apigee Adapter for Envoy,修复配置文件中的远程服务 API 代理网址,启动 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'

    上面的示例显示,由于 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 hybrid、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 界面在 remote-service API 代理中启动跟踪会话。重现此问题并分享跟踪会话 XML 文件。

    参考 使用跟踪工具 | Apigee Edge

  5. 适用于 Envoy 的 Apigee Adapter 日志(与给定时间段相关的完整日志)

    独立部署

    # 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