Apigee Adapter for Envoy 發生 HTTP 403 禁止錯誤錯誤

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

問題

透過 Apigee Adapter for Envoy 叫用時,Envoy Proxy 會失敗並顯示 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 Proxy 會引發 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 Proxy 通訊 Apigee Adapter for Envoy 無法與遠端服務 API Proxy 通訊。 Edge 公有和私有雲使用者
Envoy Proxy 無法與 Apigee Adapter for Envoy 通訊 Envoy Proxy 無法與 Apigee Adapter for Envoy 通訊 Edge 公有和私有雲使用者

事前準備

  1. 確認您從 Envoy Proxy 收到 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 Proxy 使用的特定 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

    上述範例顯示 Apigee Adapter for Envoy 中找不到 API 產品 ENVOY-PRODUCT-1

    如要進一步瞭解 Apigee Adapter for Envoy 記錄功能,請參閱「記錄」。

  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 UI
  2. 在「發布」>「API 產品」頁面中,點選您用於設定 Apigee Adapter for Envoy 的特定 API 產品。
  3. 在「API 產品」>「產品名稱」頁面上,按一下「編輯」
  4. 選取相關環境的核取方塊,啟用要發出 API 要求的特定環境。
  5. 按一下 [儲存]

原因:API 產品缺少目標服務 URI 路徑

如果 Envoy Proxy 使用的特定 API 產品未指定目標的 URI 路徑,就會發生這個錯誤。

診斷

請按照下列步驟診斷問題:

  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

    這表示 API 產品中找不到路徑 /echo1ENVOY-PRODUCT-1

  3. 如果在 Apigee Adapter for Envoy 偵錯記錄中看到 no path: REQUEST_URI_PATH 訊息,表示這是造成問題的原因。如果不是,請參閱「原因:API 產品中缺少主機名稱」。

解析度

如果特定要求 URI 未新增至特定目標的 API 產品,請按照下列步驟解決問題:

  1. 登入 Edge UI
  2. 在「發布」>「API 產品」頁面中,點選用於設定 Apigee Adapter for Envoy 的特定 API 產品。
  3. 在「API 產品」>「產品名稱」頁面上,按一下「編輯」
  4. 在「API 資源」窗格中,將 API 要求 URI 新增至 API 產品。
  5. 監控 Apigee Adapter for Envoy 記錄,並等待 Apigee Adapter for Envoy 擷取更新後的 API 產品。然後傳送另一項 API 要求,確認修正內容。

原因:API 產品中缺少主機名稱

如果目標主機名稱和通訊埠組合未新增至 Envoy Proxy 使用的特定 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)

    上述範例顯示,API 產品 ENVOY-PRODUCT-1 中找不到主機名稱和連接埠組合 httpbin1:8080

  3. 如果 Apigee Adapter for Envoy 記錄在授權要求時,包含訊息為 no targets: HOSTNAME:PORT 的項目,這就是問題的原因。如果不是,請參閱「原因:要求標頭中缺少 API 金鑰」。

解析度

如果目標主機名稱和通訊埠組合未新增至 API 產品,請按照下列步驟解決問題:

  1. 登入 Edge UI
  2. 在「發布」>「API 產品」頁面中,點選用於設定 Apigee Adapter for Envoy 的特定 API 產品。
  3. 在「API 產品」>「產品名稱」頁面上,按一下「編輯」
  4. 在「Apigee remote service targets」(Apigee 遠端服務目標) 窗格中,新增目標主機名稱和通訊埠,然後按一下「Save」(儲存)

    如果 UI 中未顯示「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. 完成上述工作後,請監控 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 記錄包含訊息為 [missing authentication] 的記錄項目 (位於 Authenticate error 區段下方),這就是問題的原因。如果不是,請參閱「原因:API 金鑰無效」。

解析度

如果 Apigee Adapter for Envoy 記錄中顯示 [missing authentication] 錯誤,請按照下列步驟解決問題:

  1. 檢查用戶端是否在 API 要求中使用 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 記錄,確認您在 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 無法與 remote-service API Proxy 通訊」。

解析度

如果在 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 Proxy 通訊

如果設定的遠端服務主機無效,Apigee Adapter for Envoy 無法與遠端服務 API Proxy 通訊,就會發生這項錯誤。

診斷

請按照下列步驟診斷問題:

  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 無法與 remote-service API Proxy 通訊,因為 remote server API Proxy URL 中提供的主機名稱無效 (如 no such host 錯誤所示)。

  3. 如果 Apigee Adapter for Envoy 記錄檔含有訊息為 no such host 的記錄項目,則表示這是問題的原因。如果不是,請參閱「 原因:Envoy Proxy 無法與 Apigee Adapter for Envoy 通訊」。

解析度

如果 Apigee Adapter for Envoy 記錄中顯示上述錯誤,請按照下列步驟解決問題:

  1. 檢查 Apigee Adapter for Envoy 設定檔,確認指定的 remote-service API Proxy 網址有效。

    如果沒有,請停止 Apigee Adapter for Envoy,修正設定檔中的遠端服務 API Proxy 網址,啟動 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 Proxy 已部署在相關的 Edge 環境中。如果沒有,請在相關 Edge 環境中部署 remote-service API Proxy,然後再試一次。
  3. 確認 Apigee Adapter for Envoy 與 remote-service API Proxy 端點之間的網路連線。如果發現任何網路連線問題,請與網路團隊聯絡,嘗試解決問題。

原因:Envoy Proxy 無法與 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 UI 在 remote-service API Proxy 中啟動追蹤工作階段。重現這個問題,並分享追蹤工作階段 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 Proxy 的 API 要求 (curl 指令的完整輸出內容):
    curl -v ENVOY_PROXY_ENDPOINT
  7. 使用 curl 指令傳送至目標服務的 API 要求 (curl 指令的完整輸出內容):
    curl -v TARGET_SERVICE_ENDPOINT