疑難排解

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

Istio 404 (找不到) 錯誤

在 Istio 上偵錯 404 (找不到) 錯誤可能會讓人感到挫折。希望這能讓您開始追蹤可能發生錯誤的地方。

萬用字元閘道衝突

只有一個閘道定義可以使用萬用字元「*」主機值。如果您部署了任何含有萬用字元 Gateway 的其他內容,用戶端呼叫將失敗,並顯示 404 狀態。

範例:

$ istioctl get gateways
GATEWAY NAME         HOSTS     NAMESPACE   AGE
bookinfo-gateway     *         default     20s
httpbin-gateway      *         default     3s

如果是這樣,您必須刪除或變更其中一個衝突的閘道。

搜尋路線失敗的位置

Istio 就像洋蔥 (或許也可以說是食人魔),有許多層。如要以系統化方式偵錯 404 錯誤,請從目標開始往外找。

後端工作負載

確認您可以從附加程式存取工作負載:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers

後端 Sidecar

設定服務地址,並取得工作負載 Pod 的 IP 位址。

SERVICE=httpbin.default.svc.cluster.local:80
  POD_IP=$(kubectl get pod $WORKLOAD_POD -o jsonpath='{.status.podIP}')

透過附加工作負載存取工作負載:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v http://$SERVICE/headers --resolve "$SERVICE:$POD_IP"

或者,如果已啟用 Istio mTLS:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v https://$SERVICE/headers --resolve "$SERVICE:$POD_IP" --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

閘道 (或前端附加元件)

透過閘道存取服務:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v http://$SERVICE/header

或者,如果已啟用 Istio mTLS:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v https://$SERVICE/headers --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

缺少數據分析

如果 Analytics 使用者介面中沒有顯示數據,請考慮以下可能原因:

  • Apigee 的資料收集作業可能會延遲幾分鐘
  • Envoy gRPC 存取記錄設定有誤
  • Envoy 無法連上遠端服務
  • 無法上傳遠端服務

系統未拒絕缺少或錯誤的 API 金鑰

如果 API 金鑰驗證功能無法正常運作,請考慮以下可能原因:

直接 Proxy

檢查 ext-authz 設定。

Sidecar
  • 請確認事件監聽器已設定為攔截。
  • 檢查 ext-authz 設定。

檢查並允許無效的要求

  • 已設定為在發生錯誤時保持啟用的遠端服務
  • Envoy 未設定 RBAC 檢查

如要瞭解如何解決這些問題,請參閱下列 Envoy 說明文件主題:外部授權,並參閱 failure_mode_allow 屬性相關資訊。這個屬性可讓您變更篩選器在發生錯誤時的行為。

系統未拒絕缺少或錯誤的 JWT

可能的原因是未設定 Envoy JWT 篩選器。

有效的 API 金鑰失敗

可能的原因

  • Envoy 無法連線至遠端服務
  • 憑證無效
  • Apigee API 產品未針對目標和環境進行設定

疑難排解步驟

在 Apigee 上查看 API 產品

  • 是否已為您的環境 (測試環境或正式環境) 啟用?

    產品必須與遠端服務綁定至相同的環境。

  • 是否已綁定至您要存取的目標?

    請查看「Apigee 遠端服務目標」部分。請注意,服務名稱必須是完整的主機名稱。如果是 Istio 服務,名稱會類似 helloworld.default.svc.cluster.localcode>,代表 default 命名空間中的 helloworld 服務。

  • 資源路徑是否與要求相符?

    請注意,//** 等路徑會與任何路徑相符。您也可以使用「*」或「**」萬用字元進行比對。

  • 您是否有開發人員應用程式?

    API 產品必須綁定至開發人員應用程式,才能檢查金鑰。

查看要求

  • 您是否在 x-api-key header 中傳遞 Consumer Key

    範例:

    curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
  • 您是否使用有效的消費者金鑰?

    確認您使用的應用程式憑證已獲准使用 API 產品。

檢查遠端服務記錄

  • debug level 中啟動記錄遠端服務

    在指令列中使用 -l debug 選項。

  • 嘗試存取目標並檢查記錄檔

    請檢查記錄檔,找出類似以下的內容:

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]