Istio
istio快速开始
安装istion
下载istio
安装crd
安装一个istio demo
确认部署结果
Bookinfo应用示例
为命名空间开启自动注入功能
部署Bookinfo应用
确认Bookinfo的Service与Pod都已正常
验证从内部能访问应用
从外部访问应用
为应用定义入口网关
使用NodePort从外部访问
智能路由示例
设置默认目标规则
配置路由策略,只访问
reviews-v1配置路由策略,特定用户的流量导向
卸载
安装istio
1、下载istio
这里我们下载最新版本istio-1.1.7-linux.tar.gz,解压后结构如下:
2、安装crd
3、安装一个demo
4、确认部署结果
确认下列服务(除jaeger-agent外)已经部署并都具有各自的CLUSTER-IP
如果你的集群在一个没有外部负载均衡器支持的环境中运行,istio-ingressgateway 的 EXTERNAL-IP 会是
<pending>。要访问这个网关,只能通过服务的 NodePort 或者使用端口转发来进行访问
确认必要的 Kubernetes Pod 都已经创建并且其STATUS的值是Running
Bookinfo应用示例
Bookinfo应用的架构图如下,它包含四个微服务:productpage、reviews、details及ratings,微服务之间的调用关系如图。
其中reviews服务有三个版本v1、v2和v3:
v1不会调用rating服务v2会调用rating服务,并且会将评分以黑色的1到5颗星展示出来v3会调用rating服务,并且会将评分以红色的1到5颗星展示出来

1、为命名空间开启自动注入功能
由于我们的Bookinfo是部署在default命名空间下,我们为default命名空间打上如下标签
2、部署Bookinfo应用
bookinfo已经在istio的tar包中了
上面的命令会启动全部的四个服务,其中也包括了reviews服务的三个版本(三个Deployment、一个Service)
3、确认Bookinfo的Service与Pod都已正常
4、验证从内部能访问应用
从集群的某个台主机上使用ClusterIP访问productpage这个服务,ClusterIP在上面的kubectl get service中可以查到
5、从外部能访问应用
现在Bookinfo这个应用已经起来了,我们需要让它能够从集群外部访问,比如浏览器。为了达到这个目标,我们需要使用Istio Gateway
5.1 为应用定义入口网关
确认gateway与virtualservice已创建好
5.2 使用NodePort访问应用
通过如下的命令获取istio-ingressgateway服务的http2协议的NodePort
然后在浏览器中使用URLhttp://<IP>:<NodePort>/productpage来访问应用;其中IP是任意一个工作节点的IP。多刷新几次,我们会发现productpage会调用reviews服务的不同版本
如果productpage调用了reviews-v1,界面如下,没有星

如果productpage调用了reviews-v2,界面如下,有黑色的星

如果productpage调用了reviews-v3,界面如下,有红色的星

6、智能路由示例
6.1 设置目标规则
验证创建成功
6.2 配置一个路由策略
接下来我们配置一个路由策略,让所有的访问都导向reviews的v1版本。执行如下命令创建virtual service
确认部署结果
然后从浏览器访问应用,多刷几次发现永远都是v1版本
6.3 配置另一个路由策略
我们在上面的基础上,再增加一种路由策略:基于用户的路由。在这种策略下,所有用户名为Jason的请求都会路由到服务reviews:v2上去。
注意,istio并没有内置的用户身份,该效果主要是通过在productpage的请求头的添加了一个end-user字段。
执行以下的创建基于用户的路由策略
然后在/productpage页面,用jason登录,多刷几次
卸载
1、删除Bookinfo示例的所有资源
在istio的根目录下执行
2、去掉命名空间的label
3、卸载istio
Reference
https://istio.io/docs/setup/kubernetes/install/kubernetes/https://istio.io/docs/examples/bookinfo/*
https://istio.io/docs/tasks/traffic-management/ingress/#determining-the-ingress-ip-and-ports-when-using-a-node-porthttps://istio.io/docs/tasks/traffic-management/request-routing/
Last updated
Was this helpful?