您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
Istio 404 (找不到) 錯誤
在 Istio 上對 404 (找不到) 錯誤進行偵錯可能會很讓人困擾,希望以上說明有助您快速掌握可能情況。
萬用字元閘道衝突
只有一項閘道定義使用萬用字元「*」主機值。如果您部署了其他包含萬用字元閘道的網址,用戶端呼叫就會失敗,並處於 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
後端補充資訊
設定服務位址,並取得工作負載 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
設定。
- 確認監聽器已設定攔截。
- 請檢查
ext-authz
設定。
檢查並允許無效請求
- 遠端服務設定為無法開啟
- 未設定 RBAC 檢查的 Envoy
如要瞭解如何解決這些問題,請參閱下列 Envoy 說明文件主題:「外部授權」,並參閱 failure_mode_allow
屬性的相關資訊。這個屬性可讓您變更篩選器發生錯誤時的行為。
無法拒絕 JWT 或不良的 JWT
可能的原因是未設定 Envoy JWT 篩選器。
有效的 API 金鑰失敗
可能原因
- Envoy 無法連線至遠端服務
- 您的憑證無效
- 未針對目標和環境設定 Apigee API 產品
疑難排解步驟
在 Apigee 上查看 API 產品
- 您的環境是否已啟用這項服務 (測試版和正式版)?
產品必須繫結至與遠端服務相同的環境。
- 是否繫結了您正在存取的目標?
查看「Apigee 遠端服務目標」一節。請注意,服務名稱必須是完整的主機名稱。如果 Istio 服務,名稱會是
helloworld.default.svc.cluster.local
code> 之類的文字,代表default
命名空間中的helloworld
服務。 - 資源路徑是否符合您的要求?
請注意,
/
或/**
等路徑會比對任何路徑。您也可以使用「*」或「**」萬用字元進行比對。 - 您有開發人員應用程式嗎?
API 產品必須繫結至開發人員應用程式,才能查看金鑰。
查看您的請求
- 您是否透過
x-api-key header
傳遞用戶端金鑰?示例:
curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
- 您是否使用良好的用戶端金鑰?
請確認您所用應用程式的憑證已獲準用於 API 產品。
查看遠端服務記錄檔
- 在
debug level
使用記錄功能啟動遠端服務。請參閱設定遠端服務記錄層級。在指令列中使用
-l debug
選項。例如:apigee-remote-service-envoy -l debug
- 嘗試存取目標並檢查記錄檔
請檢查記錄中是否有如下所示的行:
Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: [] Selected: [helloworld] Eliminated: [helloworld2 doesn't match path: /hello]
debug
:是最詳細的記錄模式,info
:此為預設值。warn
error
- 最小詳細記錄模式。
設定遠端服務記錄層級
您可以使用指令列旗標,按照下列任一偵錯模式啟動遠端服務,其中 debug
最詳細,且 error
最少:
舉例來說,如要在 debug
層級啟動服務,請執行下列步驟:
apigee-remote-service-envoy -l debug