通过管理 Istio 资源定义,可以实现 ASM 服务网格的流量治理、鉴权以及安全保护等能力。本文介绍如何定义虚拟服务和目标规则这两种 Istio 资源。
- 阿里云服务网格ASM公测来袭系列之一:快速了解什么是ASM
- 阿里云服务网格ASM公测来袭系列之二:快速创建一个服务网格ASM实例
- 阿里云服务网格ASM公测来袭系列之三:添加一个ACK集群到服务网格ASM实例
- 阿里云服务网格ASM公测来袭系列之四:添加入口网关
- 阿里云服务网格ASM公测来袭系列之五:部署应用到ASM的数据面集群中
- 阿里云服务网格ASM公测来袭系列之六:在ASM中为应用定义路由规则
欢迎扫码入群进一步交流:
定义虚拟服务
- 在控制平面区域,选择虚拟服务页签,然后单击新建。
- 在新建页面,定义虚拟服务,单击确定。
- 选择相应的命名空间。本例中选择的命名空间为 default。
- 在文本框中,定义 Istio 虚拟服务。可参考如下 YAML 定义:
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 服务。
定义 Istio 网关
- 在控制平面区域,选择Istio网关页签,然后单击新建。
- 在新建页面中,定义虚拟服务,单击确定。
- 选择相应的命名空间。本例中选择的命名空间为 default。
- 在文本框中,定义 Istio 网关。可参考如下 YAML 定义:
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:
- "*"
- 在Istio服务网关页面可以看到新建的 bookinfo-gateway 网关。
执行结果
在浏览器地址栏输入 http://{入口网关服务的IP地址}/productpage,可以看到 Bookinfo 应用的页面。按照如下步骤查看入口网关服务的 IP 地址:
- 登录容器服务控制台,选择路由与负载均衡 > 服务。
- 在服务(Service)页面,在集群和命名空间下拉列表中分别选择部署入口网关的集群和 istio-system。
- 查看名为 istio-ingressgateway 服务所对应的外部端点信息,即是入口网关服务的 IP 地址。
- 也可以通过 kubectl 客户端查询入口网关服务的 IP 地址。在对应部署入口网关的集群的环境下,执行以下命令查询:
kubectl get service istio-ingressgateway -n istio-system -o jsonpath="{.status.loadBalancer.ingress[*].ip}"
由于 Reviews 微服务有 3 个版本,因此刷新页面可以看到 3 种不同的显示内容:
- v1 版本不会调用 Ratings 服务。
- v2 版本会调用 Ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
- v3 版本会调用 Ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。
当然,可以继续定义目标规则或者修改虚拟服务,使用Istio的其他更多功能。