您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
問題
透過 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 Public and Private Cloud 使用者 |
API 產品中缺少目標服務 URI 路徑 | API 資源下的 API 產品缺少目標服務的 URI 路徑,或是該路徑未新增至 API 產品。 | Edge Public and Private Cloud 使用者 |
API 產品缺少主機名稱 | 在 Apigee 遠端服務目標下的 API 產品中,缺少用戶端 API 要求提供的主機名稱。 | Edge Public and Private Cloud 使用者 |
要求標頭中缺少 API 金鑰 | API 金鑰不會傳入 x-api-key HTTP 標頭。 |
Edge Public and Private Cloud 使用者 |
API 金鑰無效 | 要求中傳送的 API 金鑰無效。 | Edge Public and Private Cloud 使用者 |
Apigee Adapter for Envoy 無法與遠端服務 API Proxy 通訊 | Apigee Adapter for Envoy 無法與遠端服務 API Proxy 通訊。 | Edge Public and Private Cloud 使用者 |
Envoy Proxy 無法與 Apigee Adapter for Envoy 通訊 | Envoy Proxy 無法與 Apigee Adapter for Envoy 通訊 | Edge Public and Private Cloud 使用者 |
事前準備
- 確認您收到來自 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
啟用偵錯記錄:
請確保您已在 Apigee Adapter for Envoy 中啟用偵錯記錄檔,以擷取更多關於錯誤的詳細資料。如果問題仍未解決,請停止 Apigee Adapter for Envoy 再重新啟動,並使用下列指令啟用偵錯記錄檔:
apigee-remote-service-envoy -c config.yaml -l debug
原因:未啟用 API 產品
如果在叫用 API 呼叫的特定環境未啟用 Envoy Proxy 使用的特定 API 產品,就會發生這個錯誤。
診斷
請按照下列步驟診斷問題:
- 按照上方步驟 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。
- 如果您在授權 API 要求時看到這則訊息,很有可能表示您在進行 API 呼叫的環境中並未啟用特定 API 產品。
- 請按照下列步驟確認是否發生上述情況:
- 登入 Edge UI。
- 在「發布」>「API 產品」頁面上,按一下用於設定 Apigee Adapter for Envoy 的特定 API 產品。
- 確認您提出 API 要求所在的特定環境已在 API 產品中啟用。
- 如果在 API 產品中未啟用特定環境,這就是這項問題的原因。
- 如果特定環境已啟用,請前往 原因:API 產品中缺少目標服務 URI 路徑。
解析度
如果 API 產品未啟用特定環境,請按照下列步驟解決問題:
- 登入 Edge UI。
- 在「發布」>「API 產品」頁面上,按一下用於設定 Apigee Adapter for Envoy 的特定 API 產品。
- 在「API 產品」>「產品名稱」頁面中,按一下「編輯」。
- 啟用您要提出 API 要求的特定環境,方法是勾選相關的環境核取方塊。
- 點按「儲存」。
原因:API 產品中缺少目標服務 URI 路徑
如果 Envoy Proxy 使用的特定 API 產品中未指定目標的 URI 路徑,就會發生這個錯誤。
診斷
請按照下列步驟診斷問題:
- 按照上方步驟 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
路徑。 - 如果您在 Apigee Adapter for Envoy 偵錯記錄檔中看見「
no path: REQUEST_URI_PATH
」訊息,就是這項問題的原因。如果沒有,請參閱原因:API 產品缺少主機名稱。
解析度
如果未將特定要求 URI 新增至特定目標的 API 產品,請按照下列步驟解決問題:
- 登入 Edge UI。
- 在「發布」>「API 產品」頁面上,按一下用於設定 Apigee Adapter for Envoy 的特定 API 產品。
- 在「API 產品」>「產品名稱」頁面中,按一下「編輯」。
- 在「API 資源」窗格中,將 API 要求 URI 新增至 API 產品。
- 監控 Apigee Adapter for Envoy 記錄檔,並等待 Apigee Adapter for Envoy 擷取更新後的 API 產品。之後,請傳送另一個 API 要求來驗證修正結果。
原因:API 產品缺少主機名稱
如果 Envoy Proxy 使用的特定 API 產品未加入目標主機名稱和通訊埠組合,就會發生這個錯誤。
診斷
請按照下列步驟診斷問題:
- 按照上方步驟 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
。- 如果 Apigee Adapter for Envoy 記錄檔在授權要求時,含有包含
no targets: HOSTNAME:PORT
訊息的項目,這就是問題的原因。如果不支援,請參閱原因:要求標頭中缺少 API 金鑰。
解析度
如果目標主機名稱和通訊埠組合未新增至 API 產品,請按照下列步驟解決問題:
- 登入 Edge UI。
- 在「發布」>「API 產品」頁面上,按一下用於設定 Apigee Adapter for Envoy 的特定 API 產品。
- 在「API 產品」>「產品名稱」頁面中,按一下「編輯」。
在「Apigee 遠端服務目標」窗格中,新增目標主機名稱和通訊埠,然後按一下「儲存」。
如果在 UI 中找不到 Apigee 遠端服務目標區段,請在 API 產品中新增名為
apigee-remote-service-targets
的自訂屬性,並使用 Edge API 新增 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": [] }
- 完成上述工作後,請監控 Apigee Adapter for Envoy 記錄檔,並等待 Apigee Adapter for Envoy 擷取更新後的 API 產品。之後,請傳送另一個 API 要求來驗證修正結果。
原因:要求標頭中缺少 API 金鑰
如果沒有在要求標頭中傳送 API 金鑰,就會發生這個錯誤。
診斷
請按照下列步驟診斷問題:
- 按照上方步驟 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 金鑰不會做為要求標頭的一部分傳送。 - 如果 Apigee Adapter for Envoy 記錄包含
Authenticate error
區段下方有[missing authentication]
訊息的記錄項目,這就是問題的原因。如果沒有,請參閱「原因:無效的 API 金鑰」。
解析度
如果 Apigee Adapter for Envoy 記錄檔中顯示了 [missing authentication]
錯誤,請按照下列步驟解決問題:
- 檢查用戶端是否已在 API 要求中使用 HTTP 標頭
x-api-key
傳送 API 金鑰。如果沒有,請要求用戶端透過 HTTP 標頭x-api-key
傳送 API 金鑰。 - 檢查 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
標頭的一部分。 - 如果預設的 API 金鑰標頭名稱已變更,請要求用戶端使用更新後的 API 金鑰標頭名稱,並傳送其他 API 要求,確認問題是否已經解決。
原因:API 金鑰無效
如果在要求標頭中傳遞無效的 API 金鑰,就會發生這個錯誤。
診斷
請按照下列步驟診斷問題:
- 按照上方步驟 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 金鑰無效。
- 如果 Apigee Adapter for Envoy 記錄包含
Authenticate error
區段下方含有[permission denied]
的記錄項目,表示在要求中傳遞的 API 金鑰無效,因此造成問題。如果不允許,請參閱「原因:Envoy 的 Apigee Adapter for Envoy 無法與遠端服務 API Proxy 通訊」。
解析度
如果 Apigee Adapter for Envoy 記錄檔的 Authenticate
error
區段下方顯示了 [permission denied]
訊息,請按照下列步驟解決問題:
- 根據連結至 API 產品的應用程式中顯示的 API 金鑰值,檢查 API 要求中傳送的 API 金鑰。
- 如果用戶端使用的 API 金鑰無效,請要求用戶端傳送有效的 API 金鑰。
- 如果用戶端使用的 API 金鑰有效,且您仍看到 HTTP
403
錯誤,請聯絡 Apigee Edge 支援團隊進一步調查這個問題。
原因:Apigee Adapter for Envoy 無法與遠端服務 API Proxy 通訊
如果遠端服務主機設定的遠端服務主機無效,當 Apigee Adapter for Envoy 無法與遠端服務 API Proxy 通訊,就會發生這個錯誤。
診斷
請按照下列步驟診斷問題:
- 按照上方步驟 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 Proxy 通訊,因為遠端伺服器 API Proxy 網址中提供的主機名稱 (如錯誤
no such host
所示) 無效。 - 如果 Apigee Adapter for Envoy 記錄包含顯示
no such host
訊息的記錄項目,這就是問題的原因。如果問題未解決,請參閱 原因:Envoy Proxy 無法與 Apigee Adapter for Envoy 通訊。
解析度
如果 Apigee Adapter for Envoy 記錄檔中顯示上述錯誤,請按照下列步驟解決問題:
檢查 Apigee Adapter for Envoy 設定檔,並確認指定的遠端服務 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
- 確認
remote-service
API Proxy 已部署在相關的 Edge 環境中。如未顯示,請在相關的 Edge 環境中部署remote-service
API Proxy,然後再試一次。 - 驗證 Apigee Adapter for Envoy 和
remote-service
API Proxy 端點之間的網路連線。如果發現任何網路連線問題,請與您的網路團隊聯絡,並嘗試解決問題。
原因:Envoy Proxy 無法與 Apigee Adapter for Envoy 通訊
診斷
請按照下列步驟診斷問題:
確認您已啟用 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
- 檢查 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 通訊。 connection failure
可能有許多原因。以下逐一介紹不同的情境。
情境 #1:轉接器程序未執行
如果 Apigee Adapter for Envoy 程序未執行,就可能會發生這個錯誤。
- 執行下列指令,確認 Apigee Adapter for Envoy 程序正在執行。如果 Apigee Adapter for Envoy 程序正在運作,下方指令的結果應會列出該程序。
ps -ef | grep apigee-remote-service-envoy
- 如果伺服器沒有執行,這就是問題的原因。
解析度
- 如果 Apigee Adapter for Envoy 程序未執行,請啟動 Apigee Adapter for Envoy。
- 請再次提出 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 沒有監聽通訊端,這可能是問題的原因。
解析度
- 停止 Apigee Adapter for Envoy,然後重新開啟。
- 請再次提出 API 要求,並確認問題是否已解決。
情境 #3:Envoy 和 Apigee Adapter for Envoy 之間的網路連線
- 確認 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 '^]'.
- 如果您在 telnet 中發現
Connection timed out
錯誤,表示 Envoy 和 Apigee Adapter for Envoy 之間發生網路連線問題。
解析度
如果您在 Envoy 和 Apigee Adapter for Envoy 之間發現任何網路連線問題,請與網路團隊聯絡並嘗試解決問題。
如果問題仍未解決,請參閱「必須收集診斷資訊」。
必須收集診斷資訊
如果按照上述說明操作後問題仍未解決,請收集下列診斷資訊,然後與 Apigee Edge 支援團隊聯絡:
-
使用的 Apigee 產品:
範例:Apigee Edge Cloud、Apigee OPDK、Apigee Hybrid、Apigee X
- Apigee 機構和環境
使用 Edge API 讀取的 API 產品定義:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
參考資料: Apigee Edge API
使用 Apigee Edge UI 在
remote-service
API Proxy 中啟動追蹤記錄工作階段。重現這個問題,並提供追蹤工作階段 XML 檔案。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
- 使用
curl
指令 (curl
指令的完整輸出內容) 傳送至 Envoy Proxy 的 API 要求:curl -v ENVOY_PROXY_ENDPOINT
- 使用
curl
指令 (curl
指令的完整輸出內容) 傳送至目標服務的 API 要求:curl -v TARGET_SERVICE_ENDPOINT