解決航點問題
本指南說明在您將命名空間、服務或工作負載註冊到航點代理程式後,但未看到預期行為時該如何處理。
流量路由或安全原則的問題
若要透過來自 curl
Pod 的 productpage
服務傳送一些請求至 reviews
服務
$ kubectl exec deploy/curl -- curl -s http://productpage:9080/productpage
若要從 curl
Pod 傳送一些請求至 reviews
v2
Pod
$ export REVIEWS_V2_POD_IP=$(kubectl get pod -l version=v2,app=reviews -o jsonpath='{.items[0].status.podIP}')
$ kubectl exec deploy/curl -- curl -s http://$REVIEWS_V2_POD_IP:9080/reviews/1
對 reviews
服務的請求應由 reviews-svc-waypoint
強制執行任何 L7 原則。對 reviews
v2
Pod 的請求應由 reviews-v2-pod-waypoint
強制執行任何 L7 原則。
如果您的 L7 組態未應用,請先執行
istioctl analyze
,檢查您的組態是否有驗證問題。$ istioctl analyze ✔ No validation issues found when analyzing namespace: default.
判斷哪個航點正在為您的服務或 Pod 實作 L7 組態。
如果您的來源端使用服務的主機名稱或 IP 位址呼叫目的地,請使用
istioctl experimental ztunnel-config service
命令來確認您的航點 (waypoint) 是否被目的地服務使用。沿用先前的範例,reviews
服務應該使用reviews-svc-waypoint
,而default
命名空間中的所有其他服務則應該使用命名空間waypoint
。$ istioctl ztunnel-config service NAMESPACE SERVICE NAME SERVICE VIP WAYPOINT default bookinfo-gateway-istio 10.43.164.194 waypoint default bookinfo-gateway-istio 10.43.164.194 waypoint default bookinfo-gateway-istio 10.43.164.194 waypoint default bookinfo-gateway-istio 10.43.164.194 waypoint default details 10.43.160.119 waypoint default kubernetes 10.43.0.1 waypoint default productpage 10.43.172.254 waypoint default ratings 10.43.71.236 waypoint default reviews 10.43.162.105 reviews-svc-waypoint ...
如果您的來源端使用 Pod IP 位址呼叫目的地,請使用
istioctl ztunnel-config workload
命令來確認您的航點是否被目的地 Pod 使用。沿用先前的範例,reviews
v2
Pod 應該使用reviews-v2-pod-waypoint
,而default
命名空間中的所有其他 Pod 則不應該有任何航點,因為根據預設,航點只會處理指向服務的流量。$ istioctl ztunnel-config workload NAMESPACE POD NAME IP NODE WAYPOINT PROTOCOL default bookinfo-gateway-istio-7c57fc4647-wjqvm 10.42.2.8 k3d-k3s-default-server-0 None TCP default details-v1-698d88b-wwsnv 10.42.2.4 k3d-k3s-default-server-0 None HBONE default productpage-v1-675fc69cf-fp65z 10.42.2.6 k3d-k3s-default-server-0 None HBONE default ratings-v1-6484c4d9bb-crjtt 10.42.0.4 k3d-k3s-default-agent-0 None HBONE default reviews-svc-waypoint-c49f9f569-b492t 10.42.2.10 k3d-k3s-default-server-0 None TCP default reviews-v1-5b5d6494f4-nrvfx 10.42.2.5 k3d-k3s-default-server-0 None HBONE default reviews-v2-5b667bcbf8-gj7nz 10.42.0.5 k3d-k3s-default-agent-0 reviews-v2-pod-waypoint HBONE ...
如果 Pod 的航點欄位值不正確,請驗證您的 Pod 是否已標記
istio.io/use-waypoint
,且標籤的值是可以處理工作負載流量的航點名稱。例如,如果您的reviews
v2
Pod 使用只能處理服務流量的航點,您將不會看到該 Pod 使用任何航點。如果您的 Pod 上istio.io/use-waypoint
標籤看起來正確,請驗證您的航點的 Gateway 資源是否已標記相容的istio.io/waypoint-for
值。對於 Pod 而言,適用的值為all
或workload
。透過
istioctl proxy-status
命令檢查航點的代理伺服器狀態。$ istioctl proxy-status NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION bookinfo-gateway-istio-7c57fc4647-wjqvm.default Kubernetes SYNCED SYNCED SYNCED SYNCED NOT SENT istiod-795d55fc6d-vqtjx 1.23-alpha.75c6eafc5bc8d160b5643c3ea18acb9785855564 reviews-svc-waypoint-c49f9f569-b492t.default Kubernetes SYNCED SYNCED SYNCED NOT SENT NOT SENT istiod-795d55fc6d-vqtjx 1.23-alpha.75c6eafc5bc8d160b5643c3ea18acb9785855564 reviews-v2-pod-waypoint-7f5dbd597-7zzw7.default Kubernetes SYNCED SYNCED NOT SENT NOT SENT NOT SENT istiod-795d55fc6d-vqtjx 1.23-alpha.75c6eafc5bc8d160b5643c3ea18acb9785855564 waypoint-6f7b665c89-6hppr.default Kubernetes SYNCED SYNCED SYNCED NOT SENT NOT SENT istiod-795d55fc6d-vqtjx 1.23-alpha.75c6eafc5bc8d160b5643c3ea18acb9785855564 ...
啟用 Envoy 的 存取日誌,並在傳送一些請求後檢查航點代理伺服器的日誌。
$ kubectl logs deploy/waypoint
如果資訊不足,您可以啟用航點代理伺服器的除錯日誌。
$ istioctl pc log deploy/waypoint --level debug
透過
istioctl proxy-config
命令檢查航點的 Envoy 設定,這會顯示與航點相關的所有資訊,例如叢集、端點、監聽器、路由和密鑰。$ istioctl proxy-config all deploy/waypoint
請參考深入了解 Envoy 設定章節,以取得更多關於如何偵錯 Envoy 的資訊,因為航點代理伺服器是基於 Envoy 的。