為 TCP 服務收集指標
此任務示範如何設定 Istio 以自動收集網格中 TCP 服務的遙測資料。在此任務結束時,您可以查詢網格的預設 TCP 指標。
整個此任務中,Bookinfo 範例應用程式將用作範例。
開始之前
在您的叢集中安裝 Istio並部署應用程式。您還必須安裝 Prometheus。
此任務假設 Bookinfo 範例將部署在
default
命名空間中。如果您使用不同的命名空間,請更新範例設定和命令。
收集新的遙測資料
設定 Bookinfo 以使用 MongoDB。
安裝
ratings
服務的v2
版本。$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml@ serviceaccount/bookinfo-ratings-v2 created deployment.apps/ratings-v2 created
安裝
mongodb
服務$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-db.yaml@ service/mongodb created deployment.apps/mongodb-v1 created
Bookinfo 範例部署了每個微服務的多個版本,因此首先要建立目標規則,定義與每個版本對應的服務子集,以及每個子集的負載平衡策略。
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@
如果您啟用了相互 TLS,請改為執行以下命令
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all-mtls.yaml@
若要顯示目標規則,請執行以下命令
$ kubectl get destinationrules -o yaml
在加入參照這些子集的虛擬服務之前,請等待幾秒鐘讓目標規則傳播,因為虛擬服務中的子集參照依賴於目標規則。
建立
ratings
和reviews
虛擬服務$ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-db.yaml@ virtualservice.networking.istio.io/reviews created virtualservice.networking.istio.io/ratings created
將流量傳送到範例應用程式。
對於 Bookinfo 範例,請在您的網頁瀏覽器中造訪
http://$GATEWAY_URL/productpage
,或使用以下命令$ curl http://"$GATEWAY_URL/productpage"
驗證 TCP 指標值是否正在產生和收集。
在 Kubernetes 環境中,使用以下命令設定 Prometheus 的連接埠轉發
$ istioctl dashboard prometheus
在 Prometheus 瀏覽器視窗中檢視 TCP 指標的值。選取「Graph」。輸入
istio_tcp_connections_opened_total
指標或istio_tcp_connections_closed_total
,然後選取「Execute」。在「Console」索引標籤中顯示的表格會包含類似以下的項目istio_tcp_connections_opened_total{ destination_version="v1", instance="172.17.0.18:42422", job="istio-mesh", canonical_service_name="ratings-v2", canonical_service_revision="v2"}
istio_tcp_connections_closed_total{ destination_version="v1", instance="172.17.0.18:42422", job="istio-mesh", canonical_service_name="ratings-v2", canonical_service_revision="v2"}
了解 TCP 遙測收集
在本任務中,您使用 Istio 設定自動產生並報告網格內所有 TCP 服務的流量指標。預設情況下,所有活動連線的 TCP 指標每 15s
記錄一次,此計時器可透過 tcpReportingDuration
設定。連線的指標也會在連線結束時記錄。
TCP 屬性
數個 TCP 專屬屬性可在 Istio 中啟用 TCP 原則和控制。這些屬性由 Envoy Proxy 產生,並使用 Envoy 的節點中繼資料從 Istio 取得。Envoy 使用基於 ALPN 的通道和基於前綴的協定將節點中繼資料轉送至對等 Envoy。我們定義了一個新的協定 istio-peer-exchange
,該協定由網格中的用戶端和伺服器邊車通告並優先處理。ALPN 交涉會將協定解析為 Istio 啟用 Proxy 之間的連線的 istio-peer-exchange
,但不會解析為 Istio 啟用 Proxy 與任何其他 Proxy 之間的連線。此協定將 TCP 擴展如下
- TCP 用戶端作為第一個位元組序列,傳送一個魔術位元組字串和一個帶長度前綴的酬載。
- TCP 伺服器作為第一個位元組序列,傳送一個魔術位元組序列和一個帶長度前綴的酬載。這些酬載是 protobuf 編碼的序列化中繼資料。
- 用戶端和伺服器可以同時且無序地寫入。Envoy 中的擴展篩選器然後會在下游和上游進行進一步處理,直到魔術位元組序列不匹配或讀取整個酬載為止。
清理
移除
port-forward
程序$ killall istioctl
如果您不打算探索任何後續任務,請參閱 Bookinfo 清理指示來關閉應用程式。