目標規則是服務網格ASM實現流量路由功能的關鍵資源之一。目標規則定義在路由發生后,發往目標服務的流量策略。目標規則指定了負載均衡、來自Sidecar的連接池大小以及異常檢測設置的相關配置,以便從負載均衡池中檢測并清除不健康的主機。本文介紹目標規則的配置示例和字段說明。
配置示例
示例一:簡單負載均衡策略
以下目標規則使用最少請求(LEAST_REQUEST)負載均衡算法。在將負載分配給端點時,優先考慮未完成請求最少的端點。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
simple: LEAST_REQUEST
示例二:針對端口進行自定義配置
流量策略可以針對特定端口進行定制。以下目標規則使用最少請求(LEAST_REQUEST)負載均衡策略處理所有到80端口的流量,同時將使用輪詢(ROUND_ROBIN)負載均衡設置處理到9080端口的流量。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-ratings-port
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy: # Apply to all ports.
portLevelSettings:
- port:
number: 80
loadBalancer:
simple: LEAST_REQUEST
- port:
number: 9080
loadBalancer:
simple: ROUND_ROBIN
示例三:針對特定工作負載進行自定義配置
以下示例使用workloadSelector
配置將目標規則應用于特定工作負載。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: configure-client-mtls-dr-with-workloadselector
spec:
host: example.com
workloadSelector:
matchLabels:
app: ratings
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
- port:
number: 31443
tls:
credentialName: client-credential
mode: MUTUAL
字段說明
DestinationRule
目標規則定義在路由發生后,發往目的服務的流量策略。
字段 | 類型 | 是否必選 | 說明 |
host | string | 是 | 服務注冊表中的服務名稱。服務名稱將在平臺的服務注冊表(例如Kubernetes服務、Consul服務等)和ServiceEntry聲明的主機中查找。對于服務注冊表中不存在服務定義的規則將被忽略。該字段適用于HTTP服務和TCP服務。 針對Kubernetes的說明如下:
|
trafficPolicy | 否 | 應用的流量策略(負載均衡策略、連接池大小、異常檢測)。 | |
subsets | 否 | 代表服務的各個版本的一個或多個子集。服務基本的流量策略可以被子集級別覆蓋。 | |
exportTo | string[] | 否 | 目標規則導出到的命名空間列表。將目標規則解析應用于服務時,會在命名空間層級的上下文中進行。導出的目標規則允許被包含在其他命名空間中的服務解析層次結構中。此功能提供了一種機制,使服務所有者和網格管理員可以控制跨命名空間邊界的目標規則的可見性。
|
workloadSelector | 否 | 選擇應用此目標規則的Pods的條件。
|
TrafficPolicy
應用到指定目的地的流量策略,作用于目的地的全部端口。
字段 | 類型 | 是否必選 | 說明 |
loadBalancer | 否 | 設置負載均衡算法。 | |
connectionPool | 否 | 設置上游服務的連接池。 | |
outlierDetection | 否 | 設置如何從負載平衡池中清除不健康主機。 | |
tls | 否 | 與上游服務連接的TLS相關設置。 | |
portLevelSettings | 否 | 端口級別的流量策略。端口級別的設置將覆蓋目的地級別的設置。當端口級別的流量策略覆蓋了目的地級別的設置時,目的地級別的其他字段的設置將不會被繼承,即在端口級別的流量策略中省略的字段將應用默認值。 | |
tunnel | 否 | 對于目標規則中指定的主機,將TCP使用其他傳輸層或者應用層協議進行隧道傳輸。TunnelSettings可應用于TCP或TLS路由,但不能應用于HTTP路由。 |
Subset
服務全部端點(endpoints)的一個子集。子集可用于A/B測試或路由到服務的特定版本等場景。服務級別定義的流量策略可以在子集級別被覆蓋。關于子集的更多信息,請參見虛擬服務(Virtual Service)CRD說明。
您可以使用目標規則指定命名的服務子集,例如按版本為所有給定服務的實例分組。在虛擬服務的路由規則中使用這些服務子集來控制到服務不同實例的流量。在子集中可以指定特定版本的策略并覆蓋在服務級別指定的設置。以下目標規則使用輪詢(ROUND_ROBIN)負載平衡策略,將所有流量發送到名為testversion
的子集。該子集由具有標簽version:v3
的Endpoints組成。
對子集指定的負載均衡策略,僅當目標規則將流量發送到該子集時生效。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
simple: LEAST_REQUEST
subsets:
- name: testversion
labels:
version: v3
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
通常需要一個或多個標簽來指定子集包含的目標。當目標規則代表的主機名支持多個SNI主機名時(例如出口網關),沒有標簽的子集可能有意義。在這種情況下,可以使用包含ClientTLSSettings的流量策略來識別與命名子集對應的特定SNI主機。
字段 | 類型 | 是否必選 | 說明 |
name | string | 是 | 子集的名稱。服務名稱和子集名稱可用于路由規則中的流量拆分。 |
labels | map<string, string> | 否 | 標簽用于創建過濾器,篩選服務注冊表中服務的端點。 |
trafficPolicy | 否 | 要應用到該子集的流量策略。子集繼承在DestinationRule級別指定的流量策略。在子集級別指定的設置將覆蓋在DestinationRule級別指定的相應設置。 |
LoadBalancerSettings
應用于特定目的地的負載平衡策略。更多信息,請參見Load Balancing。
以下目標規則對所有發往ratings服務的流量使用Robin負載平衡策略。
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: bookinfo-ratings spec: host: ratings.prod.svc.cluster.local trafficPolicy: loadBalancer: simple: ROUND_ROBIN
以下目標規則為ratings服務配置會話保持功能。使用基于哈希的負載均衡器并使用
httpCookie
字段user
作為哈希的Key。apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: bookinfo-ratings spec: host: ratings.prod.svc.cluster.local trafficPolicy: loadBalancer: consistentHash: httpCookie: name: user ttl: 0s
下表類型列的oneof表示該字段的取值有多個,但是您只能任選其一進行配置。
字段 | 類型 | 是否必選 | 說明 |
simple | 否 | 指定一種簡單負載平衡的算法。 | |
consistentHash | 否 | 指定一種一致性哈希負載均衡的算法。 | |
localityLbSetting | 否 | 本地負載均衡器設置。此配置將完全覆蓋網格范圍的設置。此對象和MeshConfig中的對象不會進行合并。 | |
warmupDurationSecs | 否 | 服務的預熱持續時間。如果設置了該字段,服務的新端點將在其創建時間開始保持預熱模式,持續該字段指定的時間。在此期間Istio將逐漸增加該端點的流量,而不是發送相應比例的流量。
|
ConnectionPoolSettings
連接到上游主機的連接池設置。這些設置適用于上游服務中的每個主機。更多信息,請參見Envoy的circuit breaker。連接池設置可應用于TCP級別和HTTP級別。
例如,以下規則對名為myredissrv的Redis服務設置100個連接的上限,并設置連接超時為30毫秒。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-redis
spec:
host: myredissrv.prod.svc.cluster.local
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
connectTimeout: 30ms
tcpKeepalive:
time: 7200s
interval: 75s
字段 | 類型 | 是否必選 | 說明 |
tcp | 否 | HTTP和TCP上游連接的通用設置。 | |
http | 否 | HTTP連接池設置。 |
OutlierDetection
跟蹤上游服務中主機的狀態的熔斷器,適用于HTTP和TCP服務。
對于HTTP服務,API調用不斷返回5xx錯誤的主機將在指定時間內從可用主機池中排除。
對于TCP服務,給定主機的連接超時或連接失敗在計算連續錯誤指標時都被視為錯誤。更多信息,請參見Envoy的outlier detection。
以下目標規則將連接池大小設置為100個HTTP1連接,發送到reviews服務的請求或連接不超過10個。為HTTP2請求設置1000并發的上限,并將上游主機配置為每5分鐘掃描一次。任何連續7次出現502、503或504錯誤代碼的主機將被熔斷15分鐘。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: reviews-cb-policy
spec:
host: reviews.prod.svc.cluster.local
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
http:
http2MaxRequests: 1000
maxRequestsPerConnection: 10
outlierDetection:
consecutive5xxErrors: 7
interval: 5m
baseEjectionTime: 15m
字段 | 類型 | 是否必選 | 說明 |
splitExternalLocalOriginErrors | bool | 否 | 指定是否區分本地源故障和外部錯誤。默認為false。設置為true,consecutiveLocalOriginFailures將被用于異常值檢測計算。 以下場景時,您可以使用此功能。
|
consecutiveLocalOriginFailures | 否 | 觸發排除需要的連續本地故障數。默認為5。該字段僅在splitExternalLocalOriginErrors設置為true時生效。 | |
consecutiveGatewayErrors | 否 | 將主機排除出連接池需要的網關錯誤數。當通過HTTP訪問上游主機時,502、503或504返回碼被視為網關錯誤。當通過不透明的TCP連接訪問上游主機時,連接超時和連接錯誤/失敗事件被視為網關錯誤。默認情況或設置值為0時,此功能關閉。 說明
| |
consecutive5xxErrors | 否 | 將主機排除出連接池需要的5xx錯誤數量。當通過不透明的TCP連接訪問上游主機時,連接超時、連接錯誤或失敗、請求失敗事件都被視為5xx錯誤。默認值為5。您可以通過將值設置為0來關閉此功能。 說明
| |
interval | 否 | 排除操作掃描的時間間隔。格式為1h/1m/1s/1ms。該值必須≥1毫秒。默認為10秒。 | |
baseEjectionTime | 否 | 最短排除時間。主機被排除出連接池的時間等于最短排除時間和主機被排除次數的乘積。該字段允許系統自動增加不健康的上游服務器的彈出時間。格式為1h/1m/1s/1ms。該值必須≥1毫秒。默認為30秒。 | |
maxEjectionPercent | int32 | 否 | 可以排除出負載均衡池的上游服務主機的最大百分比。默認為10%。 |
minHealthPercent | int32 | 否 | 當負載均衡池至少有min_health_percent比例的主機處于健康狀態時,啟用異常檢測。當負載均衡池中健康主機的百分比低于此閾值時,異常檢測將被禁用,代理將在池中的所有主機(健康和不健康)之間進行負載均衡。您可以通過將閾值設置為0%來禁用該閾值。默認值為0%,因為它通常不適用于每個服務只有幾個Pod的K8s環境。 |
ClientTLSSettings
上游連接的SSL/TLS相關設置。該配置適用于HTTP和TCP上游。更多信息,請參見Envoy的TLS context。
以下目標規則將客戶端配置為使用雙向TLS連接到上游數據庫集群。
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: db-mtls spec: host: mydbserver.prod.svc.cluster.local trafficPolicy: tls: mode: MUTUAL clientCertificate: /etc/certs/myclientcert.pem privateKey: /etc/certs/client_private_key.pem caCertificates: /etc/certs/rootcacerts.pem
以下目標規則將客戶端配置為在與域名
*.foo.com
匹配的外部服務對話時使用TLS。apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: tls-foo spec: host: "*.foo.com" trafficPolicy: tls: mode: SIMPLE
以下目標規則將客戶端配置為在與ratings服務通信時使用Istio雙向TLS。
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: ratings-istio-mtls spec: host: ratings.prod.svc.cluster.local trafficPolicy: tls: mode: ISTIO_MUTUAL
字段 | 類型 | 是否必選 | 說明 |
mode | 是 | 指定是使用TLS對此端口的連接進行安全保護。該字段的值決定TLS的應用方式。 | |
clientCertificate | string | 否 | 客戶端側TLS證書的文件路徑。
|
privateKey | string | 否 | 客戶端私鑰的文件路徑。
|
caCertificates | string | 否 | 用于驗證證書的CA證書的文件路徑。
|
credentialName | string | 否 | 保存包括CA證書在內的客戶端TLS證書的密鑰的名稱。密鑰必須存在于使用證書的代理所在的相同名稱空間中。 支持generic和tls兩種密鑰類型。
說明 只有DestinationRule中指定了工作負載的選擇器(workloadSelector)時,本字段才會對Sidecar生效。否則本字段僅適用于網關,Sidecar將繼續使用證書路徑。 |
subjectAltNames | string[] | 否 | 用于驗證證書中主體身份的備用名稱列表。
|
sni | string | 否 | 在TLS握手期間提供給服務器的SNI字符串。如果未指定,當將ENABLE_AUTO_SNI環境變量設置為true時,在簡單TLS和相互TLS模式下,會基于下游HTTP Host或者Authority Header自動設置SNI。 |
insecureSkipVerify | 否 | 此字段指定代理是否跳過驗證與主機對應的服務器證書的CA簽名和SAN。默認為false。 僅當啟用全局CA簽名驗證,并且將VerifyCertAtClient環境變量設置為true,但不希望對特定主機進行驗證時,才應設置此標志。如果啟用InsecureSkipVerify,無論是否啟用VerifyCertAtClient,都將跳過CA簽名和SAN的驗證。 |
LocalityLoadBalancerSetting
提供一個區域加權的負載均衡,使管理員能夠根據流量的源位置和終止位置來控制流量分配到端點的比例。區域信息可以使用任意標簽指定。這些標簽以{region}/{zone}/{sub-zone}
形式指定區域的層次結構。更多信息,請參見Locality Weight。
以下示例展示如何在整個網格中設置區域加權。假設有一個包含工作負載和服務的網格被部署到區域
hangzhou/zone1/
和hangzhou/zone2/
。本示例指定當訪問服務的流量源自hangzhou/zone1/
的工作負載時,80%的流量將被發送到hangzhou/zone1/
中的端點(即同一區域),剩下的20%將被發送到hangzhou/zone2/
中的端點。此設置優先將流量路由到相同本地性的終點。對于源自hangzhou/zone2/
的流量,也指定了類似的設置。distribute: - from: hangzhou/zone1/* to: "hangzhou/zone1/*": 80 "hangzhou/zone2/*": 20 - from: hangzhou/zone2/* to: "hangzhou/zone1/*": 20 "hangzhou/zone2/*": 80
如果您的目標不是跨區域或可用區分配負載,而是限制故障轉移的區域性,則可以設置
failover
策略而不是distribute
策略。以下示例設置區域故障轉移策略。假設服務駐留在杭州、北京和上海的區域中。此策略指定當杭州的端點變為不健康時,流量應轉移到北京區域或子區域中的端點。同理,當北京的端點變為不健康狀態時,流量應該轉移到上海的端點。
failover: - from: hangzhou to: beijing - from: beijing to: shanghai
字段 | 類型 | 是否必選 | 說明 |
distribute | 否 | 明確指定跨不同區域和地理位置的負載均衡權重。如果為空,則根據其中的端點數設置區域權重。更多信息,請參見Locality weighted load balancing。 說明 只能設置distribute、failover、failoverPriority三者中的任意一項。 | |
failover | Failover[] | 否 | 明確指定當本地區域中的端點變為不健康時,流量將轉移到哪個區域。該字段需要與OutlierDetection一起使用,以檢測不健康的端點。如果未指定OutlierDetection,此設置將不會生效。 說明 只能設置distribute、failover、failoverPriority三者中的任意一項。 |
failoverPriority | string[] | 否 | 一個有序的標簽列表,用于對端點進行排序以進行基于優先級的負載平衡。該字段用于支持跨不同端點組的流量故障轉移。該字段需要與OutlierDetection一起使用,以檢測不健康的端點。如果未指定OutlierDetection,此設置將不會生效。 假設一共指定了N個標簽:
此字段可以是在客戶端和服務端工作負載上指定的任何標簽,并支持以下具有特殊語義的標簽:
以下拓撲配置的優先級說明如下:
說明 只能設置distribute、failover、failoverPriority三者中的任意一項。 |
enabled | 否 | 啟用區域負載均衡。該配置為DestinationRule級別,將完全覆蓋網格級別的設置。例如,該字段配置為true表示無論網格級別是什么設置,都為此DestinationRule開啟區域負載均衡。 |
TrafficPolicy.PortTrafficPolicy
服務特定端口的流量策略。
字段 | 類型 | 是否必選 | 說明 |
port | 否 | 指定應用此策略的目標服務上的端口號。 | |
loadBalancer | 否 | 控制負載均衡器算法。 | |
connectionPool | 否 | 控制與上游服務的連接量。 | |
outlierDetection | 否 | 控制從負載平衡池中排除不健康主機。 | |
tls | 否 | 與上游服務連接的TLS相關設置。 |
LoadBalancerSettings.ConsistentHashLB
Consistent Hash-based load balancing可用于提供基于HTTP頭部、Cookie或其他屬性的軟會話保持。一致性哈希在會話保持方面弱于傳統的基于HostName的會話保持。當一個或多個主機被添加或刪除時,使用一致性哈希算法的負載均衡會導致一小部分請求的會話保持失效。基于HostName的會話保持通常在Cookie中編碼特定目標,確保只要后端保持不變就會維持關聯。
一致性哈希的優勢在于可以實現更好的負載均衡,對云上系統更加友好。
一致性哈希取決于每個代理擁有一致的端點視圖。當啟用區域負載平衡時,不保證每個代理擁有一致的端點視圖情況。區域負載平衡和一致性哈希只有在所有代理都在同一區域時才能一起生效,或者套一個更高層級的負載均衡去處理區域親和性。
字段 | 類型 | 是否必選 | 說明 |
httpHeaderName | string | 否 | 基于特定HTTP標頭的哈希。 httpHeaderName、httpCookie、useSourceIp、httpQueryParameterName這四個參數只能填一個。 |
httpCookie | 否 | 基于HTTP Cookie的哈希。 httpHeaderName、httpCookie、useSourceIp、httpQueryParameterName這四個參數只能填一個。 | |
useSourceIp | bool | 否 | 基于源IP地址的哈希,適用于TCP和HTTP連接。 httpHeaderName、httpCookie、useSourceIp、httpQueryParameterName這四個參數只能填一個。 |
httpQueryParameterName | string | 否 | 基于指定HTTP查詢參數的哈希。 httpHeaderName、httpCookie、useSourceIp、httpQueryParameterName這四個參數只能填一個。 |
ringHash | 否 | Ring或Modulo負載均衡器實現的對后端主機的一致性哈希。 ringHash和maglev這兩個參數只能填一個,都不填默認是ringHash。 | |
maglev | 否 | Maglev負載均衡器實現的對后端主機的一致性哈希。 ringHash和maglev這兩個參數只能填一個,都不填默認是ringHash。 ASM從1.16開始支持maglev算法。 | |
minimumRingSize | uint64 | 否 | 已棄用。請改用ringHash。 |
LoadBalancerSettings.ConsistentHashLB.RingHash
字段 | 類型 | 是否必選 | 說明 |
minimumRingSize | uint64 | 否 | Ring算法的最小虛擬節點數。默認為1024。較大的環會導致更細粒度的負載分布。如果負載均衡池中的主機數量大于環大小,則每臺主機將分配一個虛擬節點。 |
LoadBalancerSettings.ConsistentHashLB.MagLev
字段 | 類型 | 是否必選 | 說明 |
tableSize | uint64 | 否 | Maglev算法中散列表的大小,有助于控制當后端主機發生變化時的干擾。增加表格大小可以減少干擾的程度。 |
LoadBalancerSettings.ConsistentHashLB.HTTPCookie
指定將被用作一致性哈希負載均衡器的哈希鍵。如果該Cookie不存在,則將生成該Cookie。
字段 | 類型 | 是否必選 | 說明 |
name | string | 是 | 這個cookie的內容將會被用作Hash Key。如果這個cookie不存在并且下面的ttl沒有設置,將不會生成hash。 |
path | string | 否 | 如果指定了,在這個Cookie不存在時,將會生成一個帶有TTL的Cookie。如果TTL存在并且等于零,生成的Cookie將會作為Session Cookie。 |
ttl | 是 | Cookie的生命周期。 |
ConnectionPoolSettings.TCPSettings
HTTP和TCP上游連接通用的設置。
字段 | 類型 | 是否必選 | 說明 |
maxConnections | int32 | 否 | 到目標主機的最大HTTP1或TCP連接數。默認為2^32-1。 |
connectTimeout | 否 | TCP連接超時時長。格式:1h/1m/1s/1ms。必須≥1毫秒。默認為10秒。 | |
tcpKeepalive | 否 | 如果設置,則在Socket上設置SO_KEEPALIVE以啟用TCP Keepalive。 | |
maxConnectionDuration | 否 | 連接的最長持續時間。持續時間定義為自建立連接的時間間隔。如果未設置,則沒有最大持續時間。當達到maxConnectionDuration時,連接將被關閉。持續時間必須至少為1毫秒。 |
ConnectionPoolSettings.HTTPSettings
適用于HTTP1.1、HTTP2、GRPC連接的設置。
字段 | 類型 | 是否必選 | 說明 |
http1MaxPendingRequests | int32 | 否 | 隊列中等待連接就緒的最大請求數。默認為1024。此配置適用于HTTP/1.1和HTTP2。關于何時為HTTP2創建新連接,請參見circuit_breaking。 |
http2MaxRequests | int32 | 否 | 發往一個目的地的最大活躍請求數。默認為1024。此配置適用于HTTP/1.1和HTTP2。 |
maxRequestsPerConnection | int32 | 否 | 每個連接的最大請求數。此參數設置為1,將禁用HTTP Keepalive。默認為0,表示無限制,最大為2^29。 |
maxRetries | int32 | 否 | 在給定時間對集群中所有主機可以進行的最大重試次數。默認為2^32-1。 |
idleTimeout | 否 | 上游連接池連接的空閑超時時間。空閑超時時間指沒有活動請求的時間段。如果未設置,則默認為1小時。當達到空閑超時時間時,連接將被關閉。如果連接是HTTP/2連接,則在關閉連接之前將發送Drain Sequence。 基于請求的超時表明HTTP/2 PING不會使連接保持活動狀態。該配置適用于HTTP1.1和HTTP2連接。 | |
h2UpgradePolicy | 否 | 指定是否將連接到相應目的地的HTTP1.1連接升級為HTTP2連接。 | |
useClientProtocol | bool | 否 | 如果設置為true,則在向后端發起連接時將保留客戶端使用的協議,Ah2UpgradePolicy將會無效,即客戶端連接不會升級到HTTP2。 |
ConnectionPoolSettings.TCPSettings.TcpKeepalive
TCP Keepalive的相關設置。
字段 | 類型 | 是否必選 | 說明 |
probes | uint32 | 否 | 在確定連接已死之前要發送而沒有響應的最大保活探測數。默認使用操作系統級別的配置(除非被覆蓋)。Linux默認為9。 |
time | 否 | 在開始發送保活探測之前連接需要空閑的持續時間。默認使用操作系統級別的配置(除非被覆蓋)。Linux默認為7200秒,即兩小時。 | |
interval | 否 | 保活探測之間的間隔時間。默認使用操作系統級別的配置(除非被覆蓋)。Linux默認為75秒。 |
google.protobuf.UInt32Value
uint32的包裝信息。
字段 | 類型 | 是否必選 | 說明 |
value | uint32 | 否 | uint32值。在JSON中UInt32Value需要表示成一個JSON數字值。 |
LoadBalancerSettings.SimpleLB
標準負載平衡算法。
字段 | 說明 |
UNSPECIFIED | 不指定負載均衡算法。Istio將選擇一個合適的默認值。 |
RANDOM | 隨機負載均衡算法隨機選擇一個健康的主機。如果沒有配置健康檢查策略,隨機負載均衡器通常比輪詢性能好。 |
PASSTHROUGH | 此選項會將連接轉發到調用者請求的原始IP地址,而不進行任何形式的負載均衡。此項屬于高級用法,請謹慎使用。更多信息,請參見Original destination。 |
ROUND_ROBIN | 基本的輪詢循環負載均衡策略。在許多場景(例如使用端點加權時)不太安全,因為它會使端點負擔過重。通常情況下,最好使用LEAST_REQUEST作為ROUND_ROBIN的替代方案。 |
LEAST_REQUEST | 最少請求負載均衡在將負載分配給端點時,會優先考慮未完成請求最少的端點。通常更加安全,幾乎在所有情況下都優于ROUND_ROBIN。建議使用LEAST_REQUEST作為ROUND_ROBIN的替代方案。 |
LEAST_CONN | 已棄用。請改用LEAST_REQUEST。 |
ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy
將HTTP1.1連接升級到HTTP2的策略。
字段 | 說明 |
DEFAULT | 使用全局默認值。 |
DO_NOT_UPGRADE | 不將連接升級到HTTP2。 |
UPGRADE | 將連接升級到HTTP2。 |
ClientTLSSettings.TLSmode
TLS連接模式。
字段 | 說明 |
DISABLE | 不建立與上游端點的TLS連接。 |
SIMPLE | 建立與上游端點的TLS連接。 |
MUTUAL | 通過提供客戶端證書進行身份驗證,使用雙向TLS保護與上游的連接。 |
ISTIO_MUTUAL | 通過提供客戶端證書進行身份驗證,使用雙向TLS保護與上游的連接。與Mutual模式相比,該模式使用Istio自動生成的證書進行mTLS身份驗證。使用此模式時,ClientTLSSettings中所有其他字段都應為空。 |