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

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

問題

叫用以下程式碼時,Envoy Proxy 發生 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 Proxy 將引發 HTTP 403 錯誤 出現:

原因 說明 適用的疑難排解操作說明
未啟用 API 產品 特定環境未啟用 API 產品。 邊緣公有雲和私有雲使用者
API 產品中缺少目標服務 URI 路徑 目標服務的 URI 路徑缺少或未新增至 API 的 API 產品 再複習一下,機構節點 是所有 Google Cloud Platform 資源的根節點 邊緣公有雲和私有雲使用者
API 產品中缺少主機名稱 Apigee 中的 API 產品缺少用戶端 API 要求中指定的主機名稱 遠端服務目標 邊緣公有雲和私有雲使用者
要求標頭中缺少 API 金鑰 API 金鑰不會透過 x-api-key HTTP 標頭傳遞。 邊緣公有雲和私有雲使用者
API 金鑰無效 從要求中傳遞的 API 金鑰無效。 邊緣公有雲和私有雲使用者
Apigee Adapter for Envoy 無法 與遠端服務 API Proxy 通訊 Apigee Adapter for Envoy 無法與遠端服務 API Proxy 通訊。 邊緣公有雲和私有雲使用者
Envoy Proxy 無法通訊 搭配使用 Apigee Adapter for Envoy Envoy Proxy 無法與 Envoy 適用的 Apigee Adapter 通訊 邊緣公有雲和私有雲使用者

事前準備

  1. 驗證是否收到403 Forbidden Envoy Proxy。例如:
    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
    

    上例顯示,找不到 API 產品 ENVOY-PRODUCT-1 Envoy 專用 Apigee Adapter。

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

  3. 如果您在授權 API 要求時看到這則訊息, 您無法在您所在的特定環境中啟用該 API 產品 發出 API 呼叫
  4. 請按照下列步驟確認無誤:
    1. 登入 Edge UI
    2. 在 [發布] > [API 產品頁面,按一下您 用於設定 Envoy 的 Apigee Adapter
    3. 驗證您提出 API 要求的特定環境為 在 API 產品中啟用
    4. 如果 API 產品未啟用特定環境,就表示 。
  5. 如果特定環境已啟用,請前往 原因:API 產品中缺少目標服務 URI 路徑

解析度

如未在 API 產品中啟用特定環境,請執行下列步驟, 解決問題:

  1. 登入 Edge UI
  2. 在 [發布] > [API 產品頁面,按一下您目前使用的特定 API 產品。 來設定 Envoy 適用的 Apigee Adapter
  3. 在「API 產品」中 > 產品名稱,按一下編輯
  4. 若要啟用要提出 API 要求的特定環境,請選取 選取相關的環境核取方塊
  5. 按一下 [儲存]

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

如未在所用特定 API 產品中指定目標的 URI 路徑,就會發生這個錯誤 透過 Envoy Proxy 執行

診斷

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

  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 產品中找不到路徑 /echo1 ENVOY-PRODUCT-1

  3. 如果 no path: REQUEST_URI_PATH 中 Apigee Adapter for Envoy 偵錯記錄檔,這就是造成這個問題的原因。如果沒有,請前往 原因:API 產品中缺少主機名稱

解析度

如果沒有為特定要求 URI 加入特定目標的 API 產品, 請按照下列步驟解決問題:

  1. 登入 Edge UI
  2. 在 [發布] > [API 產品頁面,按一下您 用於設定 Envoy 的 Apigee Adapter
  3. 在「API 產品」中 > 產品名稱,按一下編輯
  4. 在「API 資源」窗格中,將 API 要求 URI 新增至 API 產品。
  5. 監控 Apigee Adapter for Envoy 記錄檔,並等待 Envoy 適用的 Apigee Adapter 擷取更新後的 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)

    上述範例顯示主機名稱和通訊埠的組合 httpbin1:8080 在 API 產品 ENVOY-PRODUCT-1 中找不到。

  3. 如果 Apigee Adapter for Envoy 記錄包含在授權要求時含有 no targets: HOSTNAME:PORT 訊息的項目,則以下情形為 可能的原因。如果沒有,請前往 原因:要求標頭中缺少 API 金鑰

解析度

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

  1. 登入 Edge UI
  2. 在 [發布] > [API 產品頁面,按一下您 用於設定 Envoy 的 Apigee Adapter
  3. 在「API 產品」中 > 產品名稱,按一下編輯
  4. 在「Apigee 遠端服務目標」窗格中,新增目標主機名稱並 通訊埠,然後按一下「儲存」

    如果 UI 中未顯示「Apigee 遠端服務目標」部分, 使用 將名稱設為 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 金鑰無效

解析度

如果 [missing authentication] 錯誤顯示在 Apigee Adapter for Envoy 記錄檔,執行下列步驟以解決問題:

  1. 檢查用戶端是否已使用 HTTP 標頭 x-api-key 傳送 API 金鑰: 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部分底下。 這個 ID 通常在轉接器擷取 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 金鑰無效,因此造成問題。 如果沒有,請前往 原因:Envoy 適用的 Apigee Adapter 無法與 Remote-服務 API Proxy 通訊

解析度

如果在 Apigee Adapter for Envoy 記錄中的 Authenticate error 部分偵測到 [permission denied] 訊息,請執行下列步驟, 以解決問題:

  1. 檢查 API 要求中傳送的 API 金鑰,並與 連結至 API 產品的應用程式。
  2. 如果用戶端使用的 API 金鑰無效,請要求用戶端傳送有效的 API 金鑰。
  3. 如果用戶端使用的 API 金鑰有效,且您仍看到 發生「403」錯誤,請與 Apigee Edge 支援團隊聯絡,進一步調查這個問題。

原因:Envoy 的 Apigee Adapter 無法與遠端服務 API Proxy 通訊

如果 Apigee Adapter for Envoy 無法與遠端通訊,就會發生這個錯誤 service 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,因為遠端伺服器 API Proxy 中提供的主機名稱 根據錯誤 no such host 的說明,網址無效。

  3. 如果 Apigee Adapter for Envoy 記錄檔包含的記錄項目含有 no such host 訊息,這就是問題的原因。如果沒有,請前往 原因:Envoy Proxy 無法與 Envoy 專用 Apigee Adapter 通訊。

解析度

如果上述錯誤顯示在 Apigee Adapter for Envoy 記錄檔中,請執行下列步驟: 解決問題的步驟:

  1. 檢查 Apigee Adapter for Envoy 設定檔,並確認為 Remote-service API Proxy 網址有效。

    如果不支援,請停止 Apigee Adapter for Envoy,請修正 設定檔、啟動 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. 驗證 Envoy 專用 Apigee Adapter 與 remote-service API Proxy 端點。如果有網路連線 發現問題,請聯絡網路團隊並嘗試解決問題。

原因:Envoy Proxy 無法與 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. 查看 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 程序未執行,請啟動 Envoy 專用 Apigee Adapter。
  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 可以建立 TCP 連線至 Envoy 適用的 Apigee Adapter 系統會顯示類似以下的輸出內容:

    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 API Proxy 中啟動追蹤記錄工作階段: Apigee Edge UI。重現這個問題,並提供追蹤工作階段 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