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

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

问题

通过403 Forbidden 适用于 Envoy 的 Apigee Adapter

错误消息

系统会显示以下错误消息:

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 代理无法通信 使用适用于 Envoy 的 Apigee Adapter Envoy 代理无法与适用于 Envoy 的 Apigee Adapter 通信 Edge 公有云和私有云用户

准备工作

  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. 启用调试日志:

    请确保您已在适用于 Envoy 的 Apigee Adapter 中启用调试日志,以捕获有关 错误。如果不是,请停止 Apigee Adapter for Envoy 并重新启动,然后启用调试日志 创建 Deployment

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

原因:未启用 API 产品

如果未启用 Envoy Proxy 使用的特定 API 产品, 调用 API 调用的特定环境。

诊断

请按照以下步骤诊断问题:

  1. 按照上述第 2 步中的说明启用调试日志。
  2. 检查适用于 Envoy 的 Apigee Adapter 日志,并验证是否显示了以下消息 在 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: 适用于 Envoy 的 Apigee Adapter。

    如需详细了解适用于 Envoy 日志记录的 Apigee Adapter,请参阅 日志记录

  3. 如果您在授权 API 请求时看到了此消息,则很可能表示 没有为您所在的特定环境启用特定的 API 产品, 进行 API 调用
  4. 请执行以下步骤来验证这一点: <ph type="x-smartling-placeholder">
      </ph>
    1. 登录 Edge 界面
    2. 发布 >API 产品页面上,点击您创建的特定 API 产品, 用于配置适用于 Envoy 的 Apigee Adapter。
    3. 验证您发出 API 请求的特定环境是否为 已在 API 产品中启用
    4. 如果未在 API 产品中启用特定环境,那就是 来解决此问题。
  5. 如果特定环境已启用,请转到 <ph type="x-smartling-placeholder"></ph> 原因:API 产品中缺少目标服务 URI 路径

分辨率

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

  1. 登录 Edge 界面
  2. 发布 >API 产品页面中,点击您使用的具体 API 产品 ,了解如何配置适用于 Envoy 的 Apigee Adapter。
  3. API 产品 >产品名称页面中,点击修改
  4. 选择您想在其中发出 API 请求的特定环境, 选中相关环境对应的复选框
  5. 点击保存

原因:API 产品中缺少目标服务 URI 路径

如果未在所使用的特定 API 产品中指定目标的 URI 路径,就会出现此错误 由 Envoy Proxy 提供。

诊断

请按照以下步骤诊断问题:

  1. 按照上述第 2 步中的说明启用调试日志。
  2. 检查适用于 Envoy 的 Apigee Adapter 日志,并验证以下消息是否正常 在 部分下,为与特定目标关联的特定 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
    

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

  3. 如果您在no path: REQUEST_URI_PATH Apigee Adapter for Envoy 调试日志,则正是造成此问题的原因。如果没有,请前往 原因:API 产品中缺少主机名

分辨率

如果没有将特定请求 URI 添加到特定目标的 API 产品,则 请执行以下步骤解决此问题:

  1. 登录 Edge 界面
  2. 发布 >API 产品页面上,点击您创建的特定 API 产品, 用于配置适用于 Envoy 的 Apigee Adapter。
  3. API 产品 >产品名称页面中,点击修改
  4. API 资源窗格中,将 API 请求 URI 添加到 API 产品。
  5. 监控适用于 Envoy 的 Apigee Adapter 日志并等待 Apigee Adapter for Envoy 获取更新后的 API 产品。然后,再发送一个 API 请求以验证修正情况。

原因:API 产品中缺少主机名

如果目标主机名和端口组合未添加到 Envoy 代理使用的 API 产品。

诊断

请按照以下步骤诊断问题:

  1. 按照上述第 2 步中的说明启用调试日志。
  2. 检查适用于 Envoy 的 Apigee Adapter 日志,并验证以下消息是否正常 在 部分下,为与特定目标关联的特定 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. 如果适用于 Envoy 的 Apigee Adapter 日志在授权请求时包含带有消息 no targets: HOSTNAME:PORT 的条目,则这是 问题的起因。如果没有,请前往 原因:请求标头中缺少 API 密钥。

分辨率

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

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

    如果您在界面中没有看到 Apigee 远程服务目标部分, 为 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": []
    }
    
    <ph type="x-smartling-placeholder">
  5. 完成上述任务后,监控 Apigee Adapter for Envoy 日志并等待 Apigee Adapter for Envoy 会提取更新后的 API 产品。然后,发送另一个 API 以验证问题是否已解决。

原因:请求标头中缺少 API 密钥

如果 API 密钥未作为请求标头的一部分进行传递,就会出现此错误。

诊断

请按照以下步骤诊断问题:

  1. 按照上述第 2 步中的说明启用调试日志。
  2. 检查适用于 Envoy 的 Apigee Adapter 日志,并验证您是否看到 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. 如果适用于 Envoy 的 Apigee Adapter 日志在 Authenticate error 部分下包含显示消息 [missing authentication] 的日志条目,则这是 问题发生的原因。如果没有,请前往 原因:API 密钥无效

分辨率

如果错误 [missing authentication] 显示在 Apigee Adapter for Envoy 日志,请执行以下步骤解决此问题:

  1. 检查客户端是否已使用 HTTP 标头x-api-key发送 API 密钥, API 请求。否则,请求客户端在 HTTP 标头中发送 API 密钥 x-api-key
  2. 检查适用于 Envoy 的 Apigee Adapter 配置文件,并验证默认的 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. 检查适用于 Envoy 的 Apigee Adapter 日志,并验证您是否看到相应消息 [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. 如果适用于 Envoy 的 Apigee Adapter 日志在 Authenticate error 部分下包含带有 [permission denied] 的日志条目,则表示: 随请求传递的 API 密钥无效,这是导致问题的原因。 如果没有,请前往 原因:适用于 Envoy 的 Apigee Adapter 无法与远程服务 API 代理通信

分辨率

如果在适用于 Envoy 的 Apigee Adapter 日志的 Authenticate error 部分下观察到消息 [permission denied],请执行以下步骤 来解决该问题:

  1. 请对照在 应用已关联到 API 产品。
  2. 如果客户端使用的 API 密钥无效,则请求客户端发送有效的 API 密钥。
  3. 如果客户端使用的 API 密钥有效,并且您仍看到 HTTP 403 错误,请与 Apigee Edge 支持团队联系,以进一步调查。

原因:Apigee Adapter for Envoy 无法与远程服务 API 代理通信

如果适用于 Envoy 的 Apigee Adapter 无法与远程设备通信,则会出现此错误 Service API 代理。

诊断

请按照以下步骤诊断问题:

  1. 按照上述第 2 步中的说明启用调试日志。
  2. 检查适用于 Envoy 的 Apigee Adapter 日志,并验证您是否看到以下消息:

    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
    

    在此示例中,适用于 Envoy 的 Apigee Adapter 无法与 远程服务 API 代理,因为远程服务器 API 代理中提供的主机名 错误 no such host 表明网址无效。

  3. 如果 Apigee Adapter for Envoy 日志包含带有消息 no such host 的日志条目,那么这就是导致此问题的原因。如果没有,请前往 <ph type="x-smartling-placeholder"></ph> 原因:Envoy 代理无法与 Apigee Adapter for Envoy 通信

分辨率

如果适用于 Envoy 的 Apigee Adapter 日志中显示上述错误,请执行以下操作: 解决此问题的步骤:

  1. 检查适用于 Envoy 的 Apigee Adapter 配置文件,并验证指定的 远程服务 API 代理网址有效。

    如果不是,请停止 Apigee Adapter for Envoy,并修复 启动适用于 Envoy 的 Apigee Adapter,然后发送另一个 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. 验证适用于 Envoy 的 Apigee Adapter 与 remote-service API 代理端点。如有任何网络连接 请与您的网络团队联系,并尝试解决问题。

原因:Envoy 代理无法与适用于 Envoy 的 Apigee Adapter 通信

诊断

请按照以下步骤诊断问题:

  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. 检查适用于 Envoy 的 Apigee Adapter 日志,并验证是否存在包含以下消息的日志条目:
    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 原因,适用于 Envoy 的 Apigee Adapter。

  3. connection failure可能是由多种原因造成的。 我们来看一下每种情况。

场景 1:适配器进程未运行

如果适用于 Envoy 的 Apigee Adapter 进程未运行,则可能会发生此错误。

  1. 通过执行以下命令,验证适用于 Envoy 的 Apigee Adapter 进程是否正在运行 命令。如果适用于 Envoy 的 Apigee Adapter 进程正在运行,则会出现以下结果: 命令应该会列出来
    ps -ef | grep apigee-remote-service-envoy
    
  2. 如果它没有运行,这就是问题的原因所在。

分辨率

  1. 如果适用于 Envoy 的 Apigee Adapter 进程未运行,请启动 适用于 Envoy 的 Apigee Adapter。
  2. 请再次发出 API 请求,并验证问题是否已解决。

场景 2:适配器进程未在特定端口上进行监听

如果适用于 Envoy 的 Apigee Adapter 进程未在特定端口上进行监听, 就会发生此错误

如果适用于 Envoy 的 Apigee Adapter 进程正在运行,请验证是否存在监听套接字的套接字 端口 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. 停止适用于 Envoy 的 Apigee Adapter,然后重新启动。
  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. 使用remote-service Apigee Edge 界面。请重现此问题并共享 Trace 会话 XML 文件。

    参考 使用跟踪工具 |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 命令(完整的 curl 命令的输出):
    curl -v TARGET_SERVICE_ENDPOINT