ASM可以便捷地為部署在網格內的應用提供鏈路追蹤能力,但要實現網格內和網格外應用的一體化追蹤,需要使用可觀測鏈路OpenTelemetry版以形成調用鏈。本文介紹如何通過阿里雲可觀測鏈路OpenTelemetry版,使網格外部應用調用網格內部應用並形成一個完整的鏈路追蹤資訊。
前提條件
已建立一個ASM執行個體,並已將ACK叢集添加到ASM執行個體中。具體操作,請參見建立ASM執行個體和添加叢集到ASM執行個體。
ASM執行個體已部署入口網關,便於訪問網格內應用。具體操作,請參見建立入口網關。
已準備一個用於運行網格外樣本應用的環境,並安裝Python 2.7。
已啟用阿里雲可觀測鏈路OpenTelemetry版。具體操作,請參見將鏈路追蹤資料擷取到阿里雲可觀測鏈路OpenTelemetry版。
使用說明
本樣本將部署一個用Python編寫的應用ExternalProxy。該應用會啟用一個HTTP Server,當ExternalProxy的根路徑被訪問時,會調用網格內應用BookInfo的Productpage應用。
本樣本將使用XTrace為追蹤系統進行示範。若您使用自行部署的Zipkin相容的追蹤系統,可以將該系統上報地址暴露於網格外應用可以訪問的地址,可以跳過步驟二:擷取可觀測鏈路OpenTelemetry版的存取點地址,直接參照步驟三:部署網格外應用ExternalProxy使用該地址作為上報地址即可。
步驟一:部署網格內應用BookInfo
執行以下命令,將Bookinfo應用部署到ASM執行個體的叢集中。
BookInfo應用的YAML檔案,請從GitHub下載。
kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml
執行以下命令,部署Bookinfo應用的VirtualService。
VirtualService的YAML檔案,請從GitHub下載。
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f virtual-service-all-v1.yaml
執行以下命令,部署Bookinfo應用的DestinationRule。
DestinationRule的YAML檔案,請從Github下載。
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f destination-rule-all.yaml
執行以下命令,部署Bookinfo應用的Gateway。
Gateway的YAML檔案,請從GitHub下載。
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f bookinfo-gateway.yaml
步驟二:擷取可觀測鏈路OpenTelemetry版的存取點地址
登入可觀測鏈路OpenTelemetry版,在左側導覽列,單擊概覽。
在概覽頁面,單擊接入流程頁簽,然後單擊查看存取點資訊。
查看存取點地址。
在頁面上方,選擇目標地區。
請選擇BookInfo應用部署的ACK叢集所在地區來上報資料,否則追蹤資訊無法關聯。
在存取點資訊頁簽,開啟顯示Token開關,並根據您的ExternalProxy部署位置決定選擇公網或私網存取點地址。
因為ExternalProxy通過Zipkin V1 API進行資料上報,因此選用V1版本的存取點地址。
步驟三:部署網格外應用ExternalProxy
Sidecar代理會將接收到的請求中的所有內容(包括HTTP頭部、請求體等)轉寄給上遊服務,因此鏈路追蹤相關的Header也會被轉寄至上遊。
為了完成鏈路追蹤資訊的透傳,應用需要按照社區規範將鏈路追蹤相關的請求Header透傳至上遊的請求。
將下面的代碼儲存至網格外應用運行環境,命名為ExternalProxy.py。
將
{XTRACE_ZIPKIN_V1_ENDPOINT}
替換為上一步擷取到的存取點地址。如果您希望上報於自行部署的追蹤系統,這裡請替換為其上報地址。將
{INGRESS_GATE_WAY_IP}
替換為ACK叢集Ingress Gateway的地址。
執行下面的命令,啟動ExternalProxy。
python ExternalProxy.py
* Serving Flask app "main" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 317-792-686
執行以下命令,調用ExternalProxy。
curl localhost:5000
預期輸出:
OK
步驟四:查看鏈路追蹤資訊
在左側導覽列,單擊應用列表,然後在上方選擇地區,單擊下方列表中的ExternalProxy。
在左側導覽列,單擊應用詳情,單擊調用鏈路頁簽,單擊相應的traceId查看鏈路追蹤資訊。
可以看到,網格外部應用ExternalProxy與內部應用BookInfo之間已形成完整的調用鏈路。