解決航點問題

本指南說明在您將命名空間、服務或工作負載註冊到航點代理程式後,但未看到預期行為時該如何處理。

流量路由或安全原則的問題

若要透過來自 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 原則。

  1. 如果您的 L7 組態未應用,請先執行 istioctl analyze,檢查您的組態是否有驗證問題。

    $ istioctl analyze
    ✔ No validation issues found when analyzing namespace: default.
    
  2. 判斷哪個航點正在為您的服務或 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 而言,適用的值為 allworkload

  3. 透過 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
    ...
    
  4. 啟用 Envoy 的 存取日誌,並在傳送一些請求後檢查航點代理伺服器的日誌。

    $ kubectl logs deploy/waypoint
    

    如果資訊不足,您可以啟用航點代理伺服器的除錯日誌。

    $ istioctl pc log deploy/waypoint --level debug
    
  5. 透過 istioctl proxy-config 命令檢查航點的 Envoy 設定,這會顯示與航點相關的所有資訊,例如叢集、端點、監聽器、路由和密鑰。

    $ istioctl proxy-config all deploy/waypoint
    

請參考深入了解 Envoy 設定章節,以取得更多關於如何偵錯 Envoy 的資訊,因為航點代理伺服器是基於 Envoy 的。

這份資訊對您有幫助嗎?
您有任何改進的建議嗎?

感謝您的回饋!