使用寬松模式流量泳道實現全鏈路流量管理
寬松模式流量泳道搭配定制化路由資源如虛擬服務、目標規則等,可以實現全鏈路的流量統一接入、細粒度的路由管理以及插件式的流量處理。本文介紹如何使用寬松模式流量泳道實現全鏈路流量管理。
功能介紹
您可以通過使用寬松模式的流量泳道靈活地實現應用版本隔離。基于鏈路透傳請求頭和引流請求頭,將流量路由到不同泳道。泳道中服務相互調用時,若目標服務不存在當前泳道則轉發至基線泳道,保障鏈路完整性,簡化流量管理。
關于寬松模式的流量泳道,您需要了解以下內容。
調用鏈路上下文透傳方式
調用鏈路上下文透傳是應用程序可以使用寬松模式流量泳道的重要前提,這通常代表您的應用程序必須具備以下特征:對于同一調用鏈路上的所有請求來說,所有請求都具有一個相同的請求頭。
寬松模式的流量泳道適配了常見的應用程序調用鏈路上下文透傳方式,您需要根據您的應用程序實際情況,有針對的選擇相對應的場景來配置寬松模式流量泳道。
場景一: 透傳trace ID
trace ID是指具有以下特征的請求頭:
請求頭的內容能夠在整條調用鏈路中透傳。
請求頭內容對于每條調用鏈路都各不相同。
trace ID一般用于獨立標識一條完整調用鏈路,其內容多為隨機字符串。如果應用程序已經接入鏈路追蹤系統,您的應用程序可能已經具備了透傳trace ID的能力,一些常見的鏈路追蹤標準都有獨特的trace ID請求頭,如x-b3-trace-id、x-datadog-trace-id等。
場景二:透傳自定義請求頭
應用程序在代碼實現階段,可能已經做到了透傳某些具有業務意義的請求頭,如version、env等,這種請求頭常用來標識調用鏈路版本和環境。基于這種場景使用寬松模式流量泳道時,您只能同時將透傳的自定義請求頭作為引流請求頭使用。
場景三:透傳Baggage請求頭
Baggage是OpenTelemetry推出的一種標準化機制,旨在實現分布式系統調用鏈路中跨進程傳遞上下文信息。它通過在HTTP頭部增加名為“Baggage”的字段實現,字段值為鍵值對格式,可傳遞租戶ID、追蹤ID、安全憑證等上下文數據,支持鏈路追蹤、日志關聯等功能而無需修改代碼。例如:
baggage: userId=alice,serverNode=DF%2028,isProduction=false
Baggage是OpenTelemetry社區提出的調用鏈路上下文透傳標準化機制,因此我們也推薦您基于這種方式來配置寬松模式的流量泳道。
對于場景一和場景三:如果您的應用程序未接入鏈路追蹤系統或未通過代碼透傳baggage,可以參考自動插裝,使用OpenTelemetry Operator為應用程序注入自動插裝能力來實現對鏈路ID請求頭的透傳,而無需修改應用程序代碼。要完成自動插裝,您需要跟隨上述社區文檔完成OpenTelemetry Operator的安裝、自動插裝的配置,以及為應用Pod加入annotation的一系列步驟。OpenTelemetry自動插裝支持多種常見的分布式鏈路上下文透傳標準(如W3C Baggage、B3等),上述的自動插裝社區文檔提供了W3C TraceContext和W3C Baggage的透傳示例。
引流請求頭
通常情況下,寬松模式流量泳道使用引流請求頭為請求鏈路進行“打標”,您可以任意的指定請求頭,只要不與應用程序現有的業務相關請求頭沖突即可。基于您選擇的調用鏈路上下文透傳方式,寬松模式流量泳道將保證在調用鏈路上的每個環節都包含值為泳道名稱的引流請求頭。例如,如果您指定x-asm-prefer-tag
為引流請求頭,當請求發往名稱為s1
的泳道中的服務時,調用鏈路中后續的請求將始終帶有x-asm-prefer-tag: s1
的請求頭。基于請求頭中的泳道標簽信息,流量泳道可以實現應用不同版本之間的隔離環境。
如果您的調用鏈路上下文透傳方式選擇了透傳自定義請求頭,則引流請求頭必須指定為被透傳的自定義請求頭。
場景概述
基于寬松模式的流量泳道,您可以通過多種不同的方式來實現應用版本隔離。通過以下場景,您將了解如何通過三種不同的透傳請求頭方式將流量路由到泳道,以及如何配置、使用自定義虛擬服務為寬松模式的泳道引流。
相關文檔
流量泳道分為嚴格與寬松兩種模式。關于這兩種模式的說明和差異,請參見流量泳道概述。
如果您需要同時將鏈路透傳請求頭指定為引流請求頭,實現全鏈路流量管理,請參見場景二:在鏈路中透傳自定義請求頭。
您可以基于VirtualService和DestinationRule等流量規則實現流量泳道,同時通過配置流量降級,在某個版本(或者其他特征)的應用不可用時,將流量發往一個指定的降級版本(或其他特征)的應用。具體操作,請參見基于流量規則配置實現流量泳道和流量降級。
流量泳道的引流規則包含針對請求頭以及請求路徑的匹配規則,您可以通過自定義虛擬服務的方式來實現更復雜的匹配規則或者自定義請求路由的需求。具體配置方法,請參見通過自定義虛擬服務為寬松模式的泳道引流。
如果您需要詳細了解虛擬服務的詳細CRD定義,請參見虛擬服務(Virtual Service)CRD說明。