Tls路由(TLSRoute)
在 VirtualService 中,tls 是一种 TLSRoute 类型的路由集合,用于处理非终结的 TLS和HTTPS的流量,使用SNI(Server Name Indication,客户端在TLS握手阶段建立连接使用的服务Hostname)做路由选择。TLSRoute被应用于以下场景中。
◎ 服务的端口协议是HTTPS和TLS。即在服务的端口名中包含https-、tls-等。
◎ Gateway的端口是非终结的 HTTPS和 TLS。
◎ ServiceEntry的端口是HTTPS和TLS。
1.TLSRoute配置示例
简单配置如下:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: total-weather-tls
namespace: weather
spec:
hosts:
- "*.weather.com"
gateways:
- ingress-gateway
tls:
- match:
- port: 443
sniHosts:
- frontend.weather.com
route:
- destination:
host: frontend
- match:
- port: 443
sniHosts:
- recommendation.weather.com
route:
- destination:
host: recommendation
在以上示例中,可以通过HTTPS方式从外面访问weather应用内部的两个HTTPS服务frontend和recommendation,访问目标端口是443并且SNI是“frontend.weather.com”的请求会被转发到 frontend 服务上,访问目标端口是 443 并且 SNI 是“recommendation.weather.com”的请求会被转发到recommendation服务上。
2.TLSRoute规则解析
TLSRoute的规则定义如图3-38所示。
图3-38 TLSRoute的规则定义
可以看出,TLSRoute的规则定义比HTTPRoute要简单很多,规则逻辑也是将满足一定条件的流量转发到对应的后端。在以上规则定义中,匹配条件是 TLSMatchAttributes,路由规则目标是RouteDestination。
◎ sniHosts:一个重要的属性,为必选字段,用来匹配TLS请求的SNI。SNI的值必须是VirtualService的hosts的子集。
◎ destinationSubnets:目标IP地址匹配的IP子网。
◎ port:访问的目标端口。
◎ sourceLabels:是一个map类型的键值对,匹配来源负载的标签。
◎ gateways:表示规则适用的Gateway名字。覆盖VirtualService上的gateways定义。和 HTTPMatchRequest中gateways的意思相同。
可以看到,sniHosts 和 destinationSubnets 属性是 TLS 特有的,port、sourceLabels 和gateways属性同HTTP的条件定义。一般的用法是匹配port和sniHosts,配置如下:
tls:
- match:
- port: 443
sinHosts:
- frontend.weather.com
3.四层路由目标RouteDestination
TLS 的路由目标通过 RouteDestination 来描述转发的目的地址,这是一个四层路由转发地址,包含两个必选属性destination和weight。
◎ destination:表示满足条件的流量的目标。
◎ weight:表示切分的流量比例。
RouteDestination 上的这两个字段在使用上有较多注意点。用法和约束同HTTPRouteDestination的对应字段,参见对应描述和配置示例。
TCP路由(TCPRoute)
所有不满足以上HTTP和TLS条件的流量都会应用本节要介绍的TCP流量规则。
1.TLSRoute配置示例
如下所示是一个简单的TCP路由规则,将来自forecast服务23003端口的流量转发到inner-forecast服务的3003端口:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: forecast
namespace: weather
spec:
hosts:
- forecast
tcp:
- match:
- port: 23003
route:
- destination:
host: inner-forecast
port:
number: 3003
2.TCPRoute规则解析
与HTTP和TLS类似,如图3-39所示,TCPRoute的规则描述的也是将满足一定条件的流量转发到对应的目标后端,其目标后端的定义和 TLS 相同,也是四层的RouteDestination。本节重点关注TCP特有的4层匹配规则L4MatchAttributes。
图3-39 TCPRoute的规则定义
3.四层匹配规则L4MatchAttributes
在 TCPRoute 中,match 字段也是一个数组,元素类型是 L4MatchAttributes,支持以下匹配属性。
◎ destinationSubnets:目标IP地址匹配的IP子网。
◎ sourceLabels:源工作负载标签。
◎ gateways:Gateway的名称。
◎ port:访问的目标端口。
这几个参数和TLSMatchAttributes对应字段的意义相同,如下所示为基于端口和源工作负载标签描述TCP流量的典型示例:
tcp:
- match:
- sourceLabels:
group: beta
- port: 23003