流量治理
Istio的流量路由規(guī)則使運維人員可以輕松控制服務之間的流量和API調(diào)用
- Istio簡化了諸如斷路器,超時和重試之類的服務級別屬性的配置,并使其易于設置重要任務(A/B測試,canary部署和基于百分比的流量拆分的分段部署)
- 它還提供了開箱即用的故障恢復功能,有助于使應用程序更強大,以防止相關服務或網(wǎng)絡的故障
- 使用Istio進行流量管理從本質(zhì)上是將流量與底層基礎架構的伸縮機制相解耦,從而讓運維工程師能夠通過Pilot指定它們希望流量自身需要遵循那些規(guī)則,而非僅僅只能定義由那些特定的pod/vm接收流量,并在這些pod/vm之間以受限于數(shù)量比例的方式分配流量;
- Pilot和Envoy proxy負責實現(xiàn)流量規(guī)則中定義的流量傳輸機制
- 例如,可以通過pilot指定到希望特定服務的5%流量到canary版本,而與canary部署的大小無關,或者根據(jù)請求的內(nèi)容將流量發(fā)送到特定版本
- Istio的所有路由規(guī)則和控制策略都基于kubernetes CRD實現(xiàn),這包括網(wǎng)絡功能相關的VirtualService、DestinationRule、Gateway、ServiceEntry和EnvoyFilter等;
Istio流量治理的關鍵配置
Istio通過Ingress Gateway為網(wǎng)格引入外部流量;
- Gateway中運行的主程序為Envoy,它同樣從控制平面接收配置,并負責完成相關的流量傳輸;
- 換言之,Gateway資源對象用于將外部訪問映射到內(nèi)部服務,它自身值負責通信子網(wǎng)的相關功能,例如套接字,而七層路由功能則由VirtualService實現(xiàn);
stio基于ServiceEntry資源對象將外部服務注冊到網(wǎng)格內(nèi),從而將外部服務以類同內(nèi)部服務一樣的方式進行訪問治理;
- 對于外部服務,網(wǎng)格內(nèi)Sidecar方式運行的Envoy即能執(zhí)行治理;
- 若需要將外出流量收束于特定幾個節(jié)點時則需要使用專用的Egress Gateway完成,并基于此Egress Gateway執(zhí)行相應的流量治理;

VirtualService和DestinationRules
VirtualService和DestinationRules是Istio流量路由功能的核心組件
VirtualService用于將分類流量并將其路由到指定的目的地(Destination),而Destination Rules則用于配置那個指定Destination如何處理流量
VirtualService
用于在Istio及其底層平臺(例如kubernetes)的基礎上配置如何將請求路由到網(wǎng)格的各Service之上。通常由一組路由規(guī)則(routing rules)組成,這些路由規(guī)則按順序進行評估,從而使Istio能夠將那些對VirtualService的每個給定請求匹配到網(wǎng)格內(nèi)特定的目標之上,事實上,其定義的是分發(fā)給網(wǎng)格內(nèi)個Envoy的VirtualService和Route的相關配置
Destination Rules
定義流量在目標內(nèi)部的各端點之間的分發(fā)機制,例如將各端點進行分組,分組內(nèi)端點間的流量均衡機制,異常探測等;事實上,其定義的是分發(fā)給網(wǎng)絡內(nèi)各Envoy的Cluste的相關配置
-VirtualService定義虛擬主機及相關的路由規(guī)則,包括路由至哪個目標(集群或子集)
- DestinationRule定義集群或子集內(nèi)部的流量分發(fā)機制

VirtualService和DestinationRule

配置Istio流量治理
流量治理基礎
集群外部的入站流量會經(jīng)由Ingress Gateway到達集群內(nèi)部
- 需要經(jīng)由Gateway定義Ingress Gateway上的“虛擬主機”
- 包括目標流量訪問的“host”,以及虛擬主機監(jiān)聽的端口等
集群內(nèi)部的流量僅會在Sidecar之間流動
- VirtualService為Sidecar Envoy定義Listener(主要定義流量路由機制等)
- DestinationRule為Sidecar Envoy定義Cluster(包括發(fā)現(xiàn)端點等)

網(wǎng)格流量治理和服務發(fā)現(xiàn)
網(wǎng)格內(nèi)服務發(fā)送和接收的所有流量(Data Plan流量——都要經(jīng)由Envoy代理進行
* 綁定到服務的所有流量都會通過Sidecar Envoy自動進行重新路由
Istio借助于服務注冊中心完成服務發(fā)現(xiàn)
* Istio自身并不進行服務發(fā)現(xiàn)功能,它需要借助于服務注冊中心發(fā)現(xiàn)所有的Service及相應的各Endpoint
* Istio還假設服務的新實例會自動注冊到服務注冊表,并且會自動刪除不健康的實例
* kubernetes、Mesos等平臺能夠為基于容器的應用程序提供服務發(fā)現(xiàn)功能,另外也存在大量針對基于##VM的應用程序的解決方案

kubernetes系統(tǒng)上,Istio會將網(wǎng)格中的每個Service的端口創(chuàng)建為Listener,而其匹配到的Endpoint將組合成為一個Cluster
- 這些Endpoint和Cluster將配置在網(wǎng)格內(nèi)的每個sidecar Envoy之上
- 對于某個特定Sidecar Envoy來說,僅其自身所屬的Service生成的Listener為Inbound Listener,而所有Service生成Listener都將配置為其上的Outbound Listener
- Inbound Listener:接收其所屬Service的部分或全部流量
- Outbound Listener:代理本地應用訪問集群內(nèi)的其它服務
- 進出應用的所有流量都將被Sidecar Envoy攔截并基于重定向的方式進行處理

Istio網(wǎng)格中的默認配置
- 應用程序自身監(jiān)聽的端口相關的入站訪問流量,將被網(wǎng)絡名稱空間中的iptables規(guī)則實施攔截后,并統(tǒng)一轉發(fā)給Envoy Sidecar的15006/TCP端口,該端口也是Envoy上的Listener之一
- 應用程序作為客戶端發(fā)送的出站訪問流量,將被網(wǎng)絡名稱空間中的iptables規(guī)則實施攔截后,并統(tǒng)一轉發(fā)給Envoy Sidecar的15001/TCP端口,該端口也是Envoy上的Listener之一
- 對于網(wǎng)格應用所屬名稱空間中的每一個Service對象
- 其用于提供服務的每個端口,都將作為一個Egress Listener配置在網(wǎng)格中的Envoy實例之上,從而確保每個應用可訪問到該Service;
- 生成默認路由,將發(fā)往該Service生成的Listeners的流量,將被路由至同一Service生成Cluster之上;
- 獲取命令
istioctl proxy-config <clusters|listeners|routes|endpoints|bootstrap|log|secret> <pod-name[.namespace]>
Istio 虛擬服務 (Vistrual Service)
虛擬服務(Vistrual Service)是 Istio 重要的資源對象之一,作用是將流量路由到網(wǎng)格中的服務。支持基于權重、http header條件等優(yōu)先級的路由,比Kuberentes service對于流量的管控更加的豐富,顆粒度更加精細。
有了 Kubernetes Service,為什么還需要 Istio Vistrual Service
簡單來說,基于 Kubernetes Service,只可以實現(xiàn)簡單的流量負載均衡,如果想實現(xiàn)基于HTTP Header,負載百分比等等復雜的流量控制就無從下手了,Istio Vistrual Service在原本 Kubernetes Service 的功能之上,提供了更加豐富的路由控制。
概念及示例
VirtualService 描述了一個或多個用戶可尋址目標到網(wǎng)格內(nèi)實際工作負載之間的映射 。 虛擬服務讓您配置如何在服務網(wǎng)格內(nèi)將請求路由到服務,這基于 Istio 和平臺提供的基本的連通性和服務發(fā)現(xiàn)能力。每個虛擬服務包含一組路由規(guī)則,Istio 按順序評估它們,Istio 將每個給定的請求匹配到虛擬服務指定的實際目標地址。您的網(wǎng)格可以有多個虛擬服務,也可以沒有,取決于您的使用場景。
虛擬服務在增強 Istio 流量管理的靈活性和有效性方面,發(fā)揮著至關重要的作用,通過對客戶端請求的目標地址與真實響應請求的目標工作負載進行解耦來實現(xiàn)。虛擬服務同時提供了豐富的方式,為發(fā)送至這些工作負載的流量指定不同的路由規(guī)則。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
gateways:
- bookinfo-gateway
- mesh
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v3
gateways字段
通過將 VirtualService 綁定到同一 Host 的 Gateway 配置(如前一節(jié)所述 ),可向網(wǎng)格外部暴露這些 Host。
gateways:
- bookinfo-gateway
- mesh
網(wǎng)格內(nèi)部通信存在一個默認的mesh 保留字, mesh 用來指代網(wǎng)格中的所有 Sidecar。當這一字段被省略時,就會使用缺省值(mesh),也就是針對網(wǎng)格中的所有 Sidecar 生效。如果提供了 gateways 字段,這一規(guī)則就只會應用到聲明的 Gateway 之中。要讓規(guī)則同時對 Gateway 和網(wǎng)格內(nèi)服務生效,需要顯式的將 mesh 加入 gateways 列表。
Hosts字段
VirtualService 中 hosts 字段列舉虛擬服務的目標主機 ——即用戶指定的目標或是路由規(guī)則設定的目標。這是客戶端向服務發(fā)送請求時使用的一個或多個地址 。
hosts:
- bookinfo.com
虛擬服務目的地可以是 IP 地址、DNS 名稱,或者依賴于平臺的一個簡稱(例如 Kubernetes 服務的短名稱),隱式或顯式地指向一個完全限定域名(FQDN)。您也可以使用通配符(“*”)前綴,讓您創(chuàng)建一組匹配所有服務的路由規(guī)則。虛擬服務的 hosts 字段實際上不必是 Istio 服務注冊的一部分,它只是虛擬的目標地址。這讓您可以為沒有路由到網(wǎng)格內(nèi)部的虛擬主機建模。
路由規(guī)則
在 http 字段包含了虛擬服務的路由規(guī)則,用來描述匹配條件和路由行為,它們把 HTTP/1.1、HTTP2 和 gRPC 等流量發(fā)送到 hosts 字段指定的目標(您也可以用 tcp 和 tls 片段流量設置路由規(guī)則)。一個路由規(guī)則包含了指定的請求要流向哪個目標地址,具有 0 或多個匹配條件,取決于您的使用場景。
匹配條件
示例中的第一個路由規(guī)則有一個條件,因此以 match 字段開始。在本例中,您希望此路由應用于來自 ”jason“ 用戶的所有請求,所以使用 headers、end-user 和 exact 字段選擇適當?shù)恼埱蟆?/p>
- match:
- headers:
end-user:
exact: jason
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings-route
spec:
hosts:
- ratings.prod.svc.cluster.local
http:
- match:
- headers:
end-user:
exact: jason
uri:
prefix: "/ratings/v2/"
ignoreUriCase: true
route:
- destination:
host: ratings.prod.svc.cluster.local
Destination
route 部分的 destination 字段指定了符合此條件的流量的實際目標地址。與虛擬服務的 hosts 不同,destination 的 host 必須是存在于 Istio 服務注冊中心的實際目標地址,否則 Envoy 不知道該將請求發(fā)送到哪里??梢允且粋€有代理的服務網(wǎng)格,或者是一個通過服務入口被添加進來的非網(wǎng)格服務。本示例運行在 Kubernetes 環(huán)境中,host 名為一個 Kubernetes 中運行著Service 的名稱:
route:
- destination:
host: reviews
subset: v2
請注意,在該示例和本頁其它示例中,為了簡單,我們使用 Kubernetes Service的短名稱設置 destination 的 host。在評估此規(guī)則時,Istio 會添加一個基于虛擬服務命名空間的域后綴,這個虛擬服務包含要獲取主機的完全限定名的路由規(guī)則。在我們的示例中使用短名稱也意味著您可以復制并在任何喜歡的命名空間中嘗試它們。
只有在目標主機和虛擬服務位于相同的 Kubernetes 命名空間時才可以使用這樣的短名稱 , 建議您在生產(chǎn)環(huán)境中指定完全限定的主機名。
destination 片段還指定了 Kubernetes 服務的子集,將符合此規(guī)則條件的請求轉入其中。在本例中子集名稱是 v2。您可以在DestinationRule章節(jié)中看到如何定義服務子集。
Subset字段
subset 不屬于 Istio 創(chuàng)建的 CRD,但是它是一條重要的配置信息,有必要單獨說明下。subset 是服務端點的集合,可以用于 A/B 測試或者分版本路由等場景。另外在 subset 中可以覆蓋服務級別的即 VirtualService 中的定義的流量策略。
以下是subset 的配置信息。對于 Kubernetes 中的服務,一個 subset 相當于使用 label 的匹配條件選出來的 Service
| Field | Type | Description | Required |
|---|---|---|---|
| name | string | 服務名和 subset 名稱可以用于路由規(guī)則中的流量拆分 |
Yes |
| labels | map | 使用標簽對服務注冊表中的服務端點進行篩選 | No |
| trafficPolicy | TrafficPolicy | 應用到這一 subset 的流量策略。缺省情況下 subset 會繼承 DestinationRule 級別的策略,這一字段的定義則會覆蓋缺省的繼承策略 |
No |
路由規(guī)則優(yōu)先級
路由規(guī)則按從上到下的順序選擇,虛擬服務中定義的第一條規(guī)則有最高優(yōu)先級。本示例中,不滿足第一個路由規(guī)則的流量均流向一個默認的目標,該目標在第二條規(guī)則中指定。因此,第二條規(guī)則沒有 match 條件,直接將流量導向 v3 子集。 我們建議提供一個默認的“無條件”或基于權重的規(guī)則作為每一個虛擬服務的最后一條規(guī)則,從而確保流經(jīng)虛擬服務的流量至少能夠匹配一條路由規(guī)則。
VirtualService配置
| Field | Type | Description | Required |
|---|---|---|---|
| hosts | string[] | 流量的目標主機??梢允菐в型ㄅ浞熬Y的 DNS 名稱,也可以是 IP 地址。根據(jù)所在平臺情況,還可能使用短名稱來代替 FQDN。這種場景下,短名稱到 FQDN 的具體轉換過程是要靠下層平臺完成的。一個主機名只能在一個 VirtualService 中定義。同一個 VirtualService 中可以用于控制多個 HTTP 和 TCP 端口的流量屬性。Kubernetes 用戶注意:當使用服務的短名稱時(例如使用 reviews,而不是 reviews.default.svc.cluster.local),Istio 會根據(jù)規(guī)則所在的命名空間來處理這一名稱,而非服務所在的命名空間。假設 “default” 命名空間的一條規(guī)則中包含了一個 reviews 的 host 引用,就會被視為 reviews.default.svc.cluster.local,而不會考慮 reviews 服務所在的命名空間。為了避免可能的錯誤配置,建議使用 FQDN 來進行服務引用。 hosts 字段對 HTTP 和 TCP 服務都是有效的。網(wǎng)格中的服務也就是在服務注冊表中注冊的服務,必須使用他們的注冊名進行引用;只有 Gateway 定義的服務才可以使用 IP 地址。 |
Yes |
| gateways | string[] |
Gateway 名稱列表,Sidecar 會據(jù)此使用路由。VirtualService 對象可以用于網(wǎng)格中的 Sidecar,也可以用于一個或多個 Gateway。這里公開的選擇條件可以在協(xié)議相關的路由過濾條件中進行覆蓋。保留字 mesh 用來指代網(wǎng)格中的所有 Sidecar。當這一字段被省略時,就會使用缺省值(mesh),也就是針對網(wǎng)格中的所有 Sidecar 生效。如果提供了 gateways 字段,這一規(guī)則就只會應用到聲明的 Gateway 之中。要讓規(guī)則同時對 Gateway 和網(wǎng)格內(nèi)服務生效,需要顯式的將 mesh 加入 gateways 列表。 |
No |
| http | HTTPRoute[] | HTTP 流量規(guī)則的有序列表。這個列表對名稱前綴為 http-、http2-、grpc- 的服務端口,或者協(xié)議為 HTTP、HTTP2、GRPC 以及終結的 TLS,另外還有使用 HTTP、HTTP2 以及 GRPC 協(xié)議的 ServiceEntry 都是有效的。進入流量會使用匹配到的第一條規(guī)則。 |
No |
| tls | TLSRoute[] | 一個有序列表,對應的是透傳 TLS 和 HTTPS 流量。路由過程通常利用 ClientHello 消息中的 SNI 來完成。TLS 路由通常應用在 https-、tls- 前綴的平臺服務端口,或者經(jīng) Gateway 透傳的 HTTPS、TLS 協(xié)議端口,以及使用 HTTPS 或者 TLS 協(xié)議的 ServiceEntry 端口上。注意:沒有關聯(lián) VirtualService 的 https- 或者 tls- 端口流量會被視為透傳 TCP 流量。
|
No |
| tcp | TCPRoute[] | 一個針對透傳 TCP 流量的有序路由列表。TCP 路由對所有 HTTP 和 TLS 之外的端口生效。進入流量會使用匹配到的第一條規(guī)則。 | No |
| exportTo | string[] | 當前vritual service要導出的 namespace 列表。 應用于 vritual service 的解析發(fā)生在 namespace 層次結構的上下文中。 vritual service 的導出允許將其包含在其他 namespace 中的服務的解析層次結構中。 此功能為服務所有者和網(wǎng)格管理員提供了一種機制,用于控制跨 namespace 邊界的 vritual service 的可見性 |
如果未指定任何 namespace,則默認情況下將 vritual service rule 導出到所有 namespace
值. 被保留,用于定義導出到 vritual service 被聲明所在的相同 namespace 。類似的值*保留,用于定義導出到所有 namespaces
NOTE:在當前版本中,exportTo值被限制為.或*(即, 當前namespace或所有namespace) | |
HTTPRoute配置
| Field | Type | Description | Required |
|---|---|---|---|
| name | string | 為route分配給路由的名稱 | No |
| match | HTTPMatchRequest[] | 匹配要激活的規(guī)則要滿足的條件。單個匹配塊內(nèi)的所有條件都具有AND語義,而匹配塊列表具有OR語義。如果任何一個匹配塊成功,則匹配該規(guī)則。 | No |
| route | HTTPRouteDestination[] | http規(guī)則可以重定向或轉發(fā)(默認)流量 | No |
| redirect | HTTPRedirect | http規(guī)則可以重定向或轉發(fā)(默認)流量. 如果在規(guī)則中指定了流量通過選項,則將忽略路由/重定向。重定向原語可用于將HTTP 301重定向發(fā)送到其他URI或Authority。 | No |
| rewrite | HTTPRewrite | 重寫 HTTP URIs and Authority header. 重寫不能與重定向原語一起使用 | No |
| timeout | Duration | Timeout for HTTP requests. | No |
| retries | HTTPRetry | Retry policy for HTTP requests. | No |
| fault | HTTPFaultInjection | 故障注入策略,適用于客戶端的HTTP通信。請注意,如果在客戶端啟用了故障注入策略,則不會啟用超時或重試。 | No |
| mirror | Destination | 除了將請求轉發(fā)到預期目標之外,還可以將HTTP流量鏡像到另一個目標。 | No |
| mirrorPercent | UInt32Value |
mirror 字段是設置流量的百分比。如果不存在該字段,則將鏡像所有流量(100%)。最大值為100。 |
No |
| corsPolicy | CorsPolicy | 有關跨源資源共享的更多詳細信息,請參考 CORS | No |
| headers | Headers | Header 規(guī)則 | No |
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- bookinfo.com
http:
- match:
- uri:
prefix: /reviews
route:
- destination:
host: reviews
- match:
- uri:
prefix: /ratings
route:
- destination:
host: ratings
...
TCPRoute配置
| Field | Type | Description | Required |
|---|---|---|---|
| match | L4MatchAttributes[] | 匹配要激活的規(guī)則要滿足的條件。單個匹配塊內(nèi)的所有條件都具有AND語義,而匹配塊列表具有OR語義。如果任何一個匹配塊成功,則匹配該規(guī)則。 | No |
| route | RouteDestination[] | 連接應轉發(fā)到的目的地 | No |
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo-Mongo
spec:
hosts:
- mongo.prod.svc.cluster.local
tcp:
- match:
- port: 27017
route:
- destination:
host: mongo.backup.svc.cluster.local
port:
number: 5555
TLSRoute配置
| Type | Type | Description | Required |
|---|---|---|---|
| match | TLSMatchAttributes[] | 匹配要激活的規(guī)則要滿足的條件。單個匹配塊內(nèi)的所有條件都具有AND語義,而匹配塊列表具有OR語義。如果任何一個匹配塊成功,則匹配該規(guī)則。 | Yes |
| route | RouteDestination[] | 連接應轉發(fā)到的目的地 | No |
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo-sni
spec:
hosts:
- "*.bookinfo.com"
gateways:
- mygateway
tls:
- match:
- port: 443
sniHosts:
- login.bookinfo.com
route:
- destination:
host: login.prod.svc.cluster.local
- match:
- port: 443
sniHosts:
- reviews.bookinfo.com
route:
- destination:
host: reviews.prod.svc.cluster.local
具體細節(jié)的參數(shù)明細可查閱:https://preliminary.istio.io/zh/docs/reference/config/networking/virtual-service/#VirtualService
Istio DestinationRule 目標規(guī)則
概念及示例
與VirtualService一樣,DestinationRule也是 Istio 流量路由功能的關鍵部分。您可以將虛擬服務視為將流量如何路由到給定目標地址,然后使用目標規(guī)則來配置該目標的流量。在評估虛擬服務路由規(guī)則之后,目標規(guī)則將應用于流量的“真實”目標地址。
特別是,您可以使用目標規(guī)則來指定命名的服務子集,例如按版本為所有給定服務的實例分組。然后可以在虛擬服務的路由規(guī)則中使用這些服務子集來控制到服務不同實例的流量。
目標規(guī)則還允許您在調(diào)用整個目的地服務或特定服務子集時定制 Envoy 的流量策略,比如您喜歡的負載均衡模型、TLS 安全模式或熔斷器設置。在目標規(guī)則參考中可以看到目標規(guī)則選項的完整列表。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-destination-rule
spec:
host: my-svc
trafficPolicy:
loadBalancer:
simple: RANDOM
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
- name: v3
labels:
version: v3
每個子集都是基于一個或多個 labels 定義的,在 Kubernetes 中它是附加到像 Pod 這種對象上的鍵/值對。這些標簽應用于 Kubernetes 服務的 Deployment 并作為 metadata 來識別不同的版本。
除了定義子集之外,目標規(guī)則對于所有子集都有默認的流量策略,而對于該子集,則有特定于子集的策略覆蓋它。定義在 subsets 上的默認策略,為 v1 和 v3 子集設置了一個簡單的隨機負載均衡器。在 v2 策略中,輪詢負載均衡器被指定在相應的子集字段上。
host字段
使用 Kubernetes Service的短名稱。含義同VirtualService 中destination 的 host字段一致。服務 一定要存在于對應的服務注冊中心中,否則會被忽略。
loadBalancer字段
默認情況下,Istio 使用輪詢的負載均衡策略,實例池中的每個實例依次獲取請求。Istio 同時支持如下的負載均衡模型,可以在 DestinationRule 中為流向某個特定服務或服務子集的流量指定這些模型。
- 隨機:請求以隨機的方式轉到池中的實例。
- 權重:請求根據(jù)指定的百分比轉到實例。
- 最少請求:請求被轉到最少被訪問的實例。
subsets字段
subsets是服務端點的集合,可以用于 A/B 測試或者分版本路由等場景??梢詫⒁粋€服務的流量切分成N份供客戶端分場景使用。name字段定義后主要供 VirtualService 里destination 使用。 每個子集都是在host對應服務的基礎上基于一個或多個 labels 定義的,在 Kubernetes 中它是附加到像 Pod 這種對象上的鍵/值對。這些標簽應用于 Kubernetes 服務的 Deployment 并作為 metadata 來識別不同的版本。
DestinationRule配置
| Field | Type | Description | Required |
|---|---|---|---|
| host | string | 表示規(guī)則的適用對象,取值是在服務注冊中心注冊的服務名,可以是網(wǎng)格內(nèi)的服務,也可以是以 ServiceEnrty 方式注冊的網(wǎng)格外的服務。如果這個服務名在服務注冊中心不存在,則這個規(guī)則無效。host 如果取短域名,則會根據(jù)規(guī)則所在的命名空間進行解析。 | Yes |
| trafficPolicy | TrafficPolicy | 流量策略,包括負載均衡、連接池策略、異常點檢查等 | No |
| subsets | Subset[] | 是定義的一個服務的子集,經(jīng)常用來定義一個服務版本,結合 VirtualService 使用 | No |
| exportTo | string[] | 當前destination rule要導出的 namespace 列表。 應用于 service 的 destination rule 的解析發(fā)生在 namespace 層次結構的上下文中。 destination rule 的導出允許將其包含在其他 namespace 中的服務的解析層次結構中。 此功能為服務所有者和網(wǎng)格管理員提供了一種機制,用于控制跨 namespace 邊界的 destination rule 的可見性 |
如果未指定任何 namespace,則默認情況下將 destination rule 導出到所有 namespace
值. 被保留,用于定義導出到 destination rule 被聲明所在的相同 namespace 。類似的值*保留,用于定義導出到所有 namespaces
NOTE:在當前版本中,exportTo值被限制為.或*(即, 當前namespace或所有namespace) | No |
subsets配置
| Field | Type | Description | Required |
|---|---|---|---|
| name | string | 服務名和 subset 名稱可以用于路由規(guī)則中的流量拆分 |
Yes |
| labels | map | 使用標簽對服務注冊表中的服務端點進行篩選 | No |
| trafficPolicy | TrafficPolicy | 應用到這一 subset 的流量策略。缺省情況下 subset 會繼承 DestinationRule 級別的策略,這一字段的定義則會覆蓋缺省的繼承策略 |
No |
具體細節(jié)的參數(shù)明細可查閱:https://preliminary.istio.io/zh/docs/reference/config/networking/destination-rule/#DestinationRule