Istio官方提供了一个非常好的实战项目,来使开发者能够更加快速上手Istio,以及通过示例来了解Istio的特性。
bookinfo介绍
这是Istio官方提供的一个bookinfo微服务项目,bookinfo使用了python、java、ruby、node四种语言开发了四个微服务,充分证明Istio可以在不受限于语言的环境下工作。
bookinfo微服务分为四个单独的微服务:
productpage:这个微服务主要调用details和reviews微服务,用来生成页面
details:包含书籍信息
reviews:书籍相关评论,调用ratings微服务
ratings:书籍评级信息
reviews微服务有3个版本:
v1版本不会调用ratings服务,也就是页面不会显示星级评分
v2版本调用ratings服务,使用黑色星级图标评分
v3版本调用ratings服务,使用红色星级图标评分
实行注入
我们这边来使用默认名称空间default来部署我们的bookinfo微服务,所以我们需要对default名称空间下的资源实行istio注入,我们就使用自动注入把,当然你也可以手工的注入这些资源。
kubectl label namespace default istio-injection=enabled |
部署bookinfo
在istio的安装目录下samples/bookinfo/platform/kube/bookinfo.yaml,我们需要使用kubectl部署应用
kubectl apply -f bookinfo.yaml |
等待一会,等pod和svc起来
kubectl get pods |
查看bookinfo微服务是否正在运行
kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>" |
部署ingress网关
在istio的安装目录下samples/bookinfo/networking/bookinfo-gateway.yaml,我们需要使用kubectl部署应用
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml |
确定NodePort端口
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') |
#查看端口 |
测试
通过k8s的一个node ip + INGRESS_PORT访问,例如http://192.168.1.110:31514/productpage
可以发现现在页面是正常轮询显示 review1、 review2、 review3的