istio 的转发功能使用方法
示例拆解中的 Bookinfo Application 包含了转发功能,这里简单复述下。
转发策略通过 VirtualService 设置,设置 hostname、uri 和目标服务的对应关系,目标服务可以是域名或 IP,对于同一个 namespace 内的服务,可以使用服务名称。
匹配条件中的 hosts,可以是应用的对外域名,实现对外域名到集群内服务的映射。也可以是目标服务自身,实现服务到自身的映射。
下面操作在 Bookinfo Application 的基础上进行。
外部域名到集群内服务的映射
外部域名到集群内服务的映射:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
- "bookinfo.xxx.com"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
集群内 Service 到自身的映射
集群内 Service 到自身的映射,下面的 hosts 和 host 的值都是 reviews:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
这样可以为 reviews 设置负载均衡策略,上面的 v1 来自于 reivews 服务的 Destination:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
VirtualService 支持的匹配规则
VirtualService 支持以下匹配规则:
譬如匹配 headers:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1