istio 官网有bookinfo的案例, 但是这个案例过于繁琐,直接就可以运行,但是有些原理不是很清楚。 本教程是k8s改造成istio一个案例。spring-petclinic-msa是网上找到的一个k8s的一个java案例,通过spring-petclinic-msa改造成istio,可以运行的案例。
目录
架构图
改造后截图
步骤
架构图
GitHub - spring2go/spring-petclinic-msa: 微服务版spring-petlinic,课程《Kubernetes微服务实践》
本教程只对vets做一个istio改造。
原始截图
改造后截图
v1
v2
改造后的截图分为v1版本和v2版本,可以通过VirtualService动态做流量转发,
可以做灰度发布
75%-> v1
25%-> v2
步骤
1 搭建k8s初始服务,也就是让微服务运行在k8s服务器上,我已上传好文件,一个命令就可以部署。
文件如下:云原生部署: 云原生 - Gitee.com
2 把所有文件都在下载到一个k8s集群的文件夹比如deploy 文件里,执行下面命令。
kubectl apply -f .
3 所有文件批量执行, 通过k8s 节点访问
http://192.168.3.103:31080/#!/vets
Note:192.168.3.103 是我的k8s master 节点的IP。
这样java 微服务成功部署到k8s集群里。
4 把Vet微服务改造成istio,需要四个相关文件。
地址如下:云原生部署: 云原生 - Gitee.com
kubectl apply -f .
以下是对服务文件说明。
部署Vet微服务
before
after
一张图说明一切。
总结一下 Vet微服务一开始是一个service ->deployment ,这样的结果是不行的。
改造后的是:service 对应两个deployment 一个是web-v1, 一个是web-v2. 并且做了负载均衡。
rule.xml 讲解
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: test-dr
spec:
host: web
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
这个非常好理解,DestinationRule 会定义规则。
比较重要的是host:web
这个一定一定要和web-v2 里面的servce 名称对应。让它找到host地址。
vs.xml 讲解
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: test-virtual-svc
spec:
hosts:
- web
http:
- route:
- destination:
host: web
subset: v1
weight: 75
- destination:
host: web
subset: v2
weight: 25
这个就是用虚拟服务做流量转发。
75%->v1
25%->v2
一个灰度发布就做很简单的做好了。