本頁內容適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
Istio 404 (找不到) 錯誤
在 Istio 上偵錯 404 (找不到) 錯誤可能會令人沮喪。希望這能協助您找出問題所在。
萬用閘道衝突
使用萬用字元「*」主機值的閘道定義只能有一個。如果您部署了其他包含萬用字元閘道的項目,用戶端呼叫就會失敗,並顯示 404 狀態。
範例:
$ istioctl get gateways GATEWAY NAME HOSTS NAMESPACE AGE bookinfo-gateway * default 20s httpbin-gateway * default 3s
如果是這樣,您需要刪除或變更其中一個衝突的閘道。
搜尋路線失敗的位置
Istio 就像洋蔥 (或食人魔),具有多個層級。如要有系統地偵錯 404 錯誤,請從目標向外排查。
後端工作負載
確認您可以從 Sidecar 存取工作負載:
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}')
透過 Sidecar 存取工作負載:
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 無法連線至遠端服務
- Remote Service 無法上傳檔案
缺少或無效的 API 金鑰未遭拒絕
如果 API 金鑰驗證無法正常運作,請考慮下列可能原因:
直接 Proxy
檢查 ext-authz
設定。
- 請確認已設定攔截的接聽程式。
- 檢查
ext-authz
設定。
系統正在檢查並允許無效的要求
- 為「失敗時開放」設定的遠端服務
- Envoy 未設定 RBAC 檢查
如要瞭解如何解決這些問題,請參閱下列 Envoy 說明文件主題:外部授權,並參閱 failure_mode_allow
屬性的相關資訊。這個屬性可讓您變更篩選器在發生錯誤時的行為。
缺少或無效的 JWT 未遭拒絕
可能的原因是 Envoy JWT 篩選器未設定。
有效的 API 金鑰失敗
可能原因
- Envoy 無法連線至遠端服務
- 您的憑證無效
- 未針對目標和環境設定 Apigee API 產品
疑難排解步驟
在 Apigee 中檢查 API 產品
- 是否已為您的環境 (測試與正式環境) 啟用?
產品必須繫結至與遠端服務相同的環境。
- 是否與您存取的目標相關?
檢查「Apigee 遠端服務目標」部分。請注意,服務名稱必須是完整主機名稱。如果是 Istio 服務,名稱會類似
helloworld.default.svc.cluster.local
code>,代表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]