查看 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}')
透過補充 Proxy 存取工作負載:
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
設定。
檢查並允許無效的要求
- 遠端服務已設為失效開放
- 未設定 Envoy 檢查 RBAC
如要瞭解如何解決這些問題,請參閱下列 Envoy 說明文件
主題:外部授權,
,並參考 failure_mode_allow
屬性的相關資訊。這項資源
即可變更篩選器在錯誤時的行為。
缺少 JWT 或 JWT 未遭拒
可能的原因是未設定 Envoy JWT 篩選器。
有效的 API 金鑰失敗
可能原因
- Envoy 無法連線至遠端服務
- 憑證無效
- 未針對目標和環境設定 Apigee API 產品
疑難排解步驟
在 Apigee 上檢查 API 產品
- 是否已用於環境 (測試與實際工作環境)?
產品必須與遠端服務繫結的環境相同。
- 是否繫結至您所存取的目標?
查看 Apigee 遠端服務目標部分。請記住,服務名稱必須是 完整主機名稱。如果是 Istio 服務,名稱會類似如下:
helloworld.default.svc.cluster.local
code>- 代表helloworld
服務 在default
命名空間中。 - 資源路徑是否符合您的要求?
請注意,
/
或/**
等路徑會比對所有路徑。您也可以使用「*」或「**」萬用字元 以便進行比對 - 您有開發人員應用程式嗎?
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