目標規則
更新時間 2024-09-09 19:35:01
最近更新時間: 2024-09-09 19:35:01
分享文章
本章節介紹目標規則功能
概述
目標規則(DestinationRule)定義了服務分組以及請求選定了路由之后,sidecar對上游服務請求的行為,例如負載均衡、連接池大小、故障節點剔除等策略,本文說明如何創建、修改、刪除目標規則。
創建目標規則
- 登錄服務網格控制臺,選擇流量管理中心 > 目標規則菜單,選擇相應的命名空間。
- 頁面左上角選擇使用YAML創建,當前提供了不同的場景配置模板。

- 可以基于模板修改,或者根據自己的需求編輯配置。
修改目標規則
- 進入服務網格控制臺,選擇流量管理中心 -> 目標規則菜單,選擇相應的命名空間。
- 頁面會展示當前所選命名空間下的目標規則列表,右側操作欄選擇編輯操作。

- 修改完成后提交即可。
刪除目標規則
- 進入服務網格控制臺,選擇流量管理中心 -> 目標規則菜單,選擇相應的命名空間。
- 頁面會展示當前所選命名空間下的目標規則列表,右側操作欄選擇刪除操作。

目標規則資源配置示例及關鍵字段說明
下面目標規則定義了bookinfo ratings服務的默認負載均衡策略為LEAST_REQUEST,同時定義了一個版本子集testversion,對應服務的標簽是version: v3,對于testversion版本定義了獨立的負載均衡策略是ROUND_ROBIN。
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
上面的例子可以看到目標規則可以定義服務的負載均衡策略、版本分組策略等,具體的配置說明如下:
DestinationRule
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| host | string | Yes | 該目標規則應用的服務名稱。 |
| trafficPolicy | TrafficPolicy | No | 流量策略(負載均衡、連接池、故障節點剔除等)。 |
| subsets | Subset | No | 服務子集(流量策略可以在服務子集粒度定義,并覆蓋全局策略)。 |
| exportTo | string | No | 定義了當前目標規則暴露給哪些命名空間,用于控制目標規則的可見性,默認所有命名空間可見。 |
| workloadSelector | WorkloadSelector | No | 選擇當前目標規則應用的工作負載。 |
TrafficPolicy
定義了請求后端服務具體的流量策略(服務級或者端口級策略)。
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| loadBalancer | LoadBalancerSettings | No | 負載均衡算法。 |
| connectionPool | ConnectionPoolSettings | No | 對上游服務的連接池配置。 |
| outlierDetection | OutlierDetection | No | 故障節點剔除策略。 |
| tls | ClientTLSSettings | No | 請求上游服務的tls策略。 |
| portLevelSettings | PortTrafficPolicy | No | 端口級流量策略。 |
| tunnel | TunnelSettings | No | 請求目標服務的隧道配置;只能應用在TCP和TLS路由場景,不能用于HTTP。 |
Subset
服務子集通過標簽選擇器在服務內選定一個子集,目標規則內可以定義多個子集;通過再虛擬服務中根據匹配規則引用不同的子集,可以實現AB實驗、灰度發布等功能。子集內可以定義獨立的流量策略(覆蓋服務級策略),子集配置說明如下:
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| name | string | Yes | 子集名稱,在虛擬服務里通過名稱引用指定子集。 |
| labels | map<string, string> | No | 子集標簽過濾規則,匹配這些標簽的服務節點才會被納入當前子集。 |
| trafficPolicy | TrafficPolicy | No | 子集的流量策略集成自服務級策略,子集內定義的流量策略將覆蓋服務級策略。 |
LoadBalancerSettings
定義了請求后端服務的負載均衡策略,字段說明如下:
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| simple | SimpleLB(枚舉) | No | 可選值為UNSPECIFIED,RANDOM,PASSTHROUGH,ROUND_ROBIN,LEAST_REQUEST,LEAST_CONN。 |
| consistentHash | ConsistentHashLB(枚舉) | No | 基于HTTP頭部、Cookie等屬性提供親和性負載均衡配置。 |
| localityLbSetting | LocalityLoadBalancerSetting | No | 基于請求源和目標的地域的調度策略。 |
| warmupDurationSecs | Duration | No | 服務預熱時間配置,用于新的節點加入并且需要預熱的場景;當前只支持ROUND_ROBIN和LEAST_REQUEST負載均衡策略。 |
ConnectionPoolSettings
對上游服務的連接池設置,應用在上游服務的每個節點;配置說明如下:
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| tcp | TCPSettings | No | 定義了TCP的最大連接數,連接超時時間,TCPKeepAlive等配置。 |
| http | HTTPSettings | No | 定義了HTTP連接池相關配置。 |
OutlierDetection
該配置實現了剔除上游故障節點(熔斷)的功能,支持對TCP和HTTP服務進行熔斷,主要基于連接超時、失敗,HTTP狀態碼等統計失敗情況進行熔斷,具體配置如下:
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| splitExternalLocalOriginErrors | bool | No | 是否將本次檢測到的錯誤納入熔斷統計,默認為false; 設置為true時,consecutive_local_origin_failure值將被納入錯誤統計。 |
| consecutiveLocalOriginFailures | UInt32Value | No | 剔除異常節點前本地檢測到的連續錯誤次數。 |
| consecutiveGatewayErrors | UInt32Value | No | 剔除異常節點前檢測到的連續網關錯誤次數(HTTP 502、503、504)。 |
| consecutive5xxErrors | UInt32Value | No | 剔除異常節點前檢測到的連續5XX次數。 |
| interval | Duration | No | 異常情況統計時間窗口(必須大于1ms,默認為10s)。 |
| baseEjectionTime | Duration | No | 故障節點被剔除的最短時間,默認為30s。 |
| maxEjectionPercent | int32 | No | 上游所有節點中最大可以剔除多少比例的節點。 |
| minHealthPercent | int32 | No | 故障節點剔除策略生效的最低健康節點比例,監控節點比例低于該值時,故障剔除策略將失效。 |