通过定义Istio资源,可以实现服务网格ASM的流量治理、鉴权以及安全保护等功能。本文介绍如何定义虚拟服务、服务网关、目标规则这三种Istio资源,以实现相应的流量路由策略。
步骤一:定义Gateway资源
在新建页面中,按以下步骤定义服务网关,然后单击确定。
- 选择相应的命名空间。
本文以选择default命名空间为例。
- 在文本框中,定义服务网关。可参考以下YAML定义,详情请参见Istio官方示例。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
在服务网关页签可以看到新建的bookinfo-gateway网关。
步骤二:定义虚拟服务
- 登录ASM控制台。
- 在左侧导航栏,选择。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在控制平面区域,单击VirtualService页签,然后单击新建。
- 在新建页面,按以下步骤定义虚拟服务,然后单击确定。
- 选择相应的命名空间。
本文以选择default命名空间为例。
- 在文本框中,定义Istio虚拟服务。可参考以下YAML定义,详情请参见Istio官方示例。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
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
在虚拟服务页签可以看到新建的bookinfo服务。
步骤三:访问入口网关
- 既可以从ASM控制台查看入口网关服务的IP地址,也可以按照如下步骤从容器服务控制台进行查看。
- 登录容器服务控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的应用管理。
- 在集群管理页左侧导航栏中,单击服务。
- 在服务页面,在命名空间下拉列表中选择istio-system,查看名为istio-ingressgateway服务所对应的外部端点信息,即是入口网关服务的IP地址。
说明 您也可以通过kubectl客户端查询入口网关服务的IP地址。关于如何连接集群,请参见
通过kubectl连接Kubernetes集群。在对应部署入口网关的集群的环境下,执行以下命令。
kubectl get service istio-ingressgateway -n istio-system -o jsonpath="{.status.loadBalancer.ingress[*].ip}"
- 在浏览器地址栏输入http://{入口网关服务的IP地址}/productpage,验证路由策略。
在虚拟服务中未定义Reviews微服务路由策略的情况下,3个版本之间默认的流量路由策略是轮询。因此持续刷新页面可以依次看到以下3个版本:
- v1版本不会调用Ratings服务。
- v2版本会调用Ratings服务,并使用1到5个黑色星形图标来显示评分信息。
- v3版本会调用Ratings服务,并使用1到5个红色星形图标来显示评分信息。

步骤四:定义目标规则
通过定义目标规则,可以指定微服务在多个节点间的负载均衡策略。
- 在控制平面区域,单击DestinationRule页签,然后单击新建。
- 在新建页面中,按以下步骤定义目标规则,然后单击确定。
- 选择相应的命名空间。
本文以选择default命名空间为例。
- 在文本框中,定义目标规则。可参考以下YAML定义,详情请参见Istio官方示例。
示例说明:定义Reviews的三个版本微服务的负载均衡策略分别为,轮询(ROUND ROBIN,未定义时的默认策略)、最少连接数(LEAST_CONN)和随机(RANDOM)。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
- name: v3
labels:
version: v3
trafficPolicy:
loadBalancer:
simple: RANDOM
在目标规则页签可以看到新建的reviews目标规则。
步骤五:增加新的虚拟服务
增加虚拟服务,定义新的流量路由策略,从而实现在微服务的指定版本之间按照不同的权重分发流量。
- 在控制平面区域,单击VirtualService页签,然后单击新建。
- 在新建页面中,按以下步骤定义虚拟服务,然后单击确定。
- 选择相应的命名空间。
本文以选择default命名空间为例。
- 在文本框中,定义虚拟服务。可参考以下YAML定义,详情请参见Istio官方示例。
示例说明:将Reviews微服务的流量按照50%的权重分别指向v2和v3版本。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
在虚拟服务页签可以看到新建的reviews虚拟服务。
执行结果
在浏览器地址栏输入http://{入口网关服务的IP地址}/productpage,持续刷新,可以看到Bookinfo应用页面在v2和v3之间等权重地轮流切换,显示为黑色星形图标或者红色星形图标。
在文档使用中是否遇到以下问题
更多建议
匿名提交