系列文章:
总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 前言
2 bookinfo 架构介绍
3 bookinfo 配置与部署
3.1 配置 istio 自动注入
3.2 部署 bookinfo 应用
3.3 验证 bookinfo 部署情况
4 设置 bookinfo 网关
4.1 定义 bookinfo 入口网关
4.2 确认网关已创建
5 访问 bookinfo 应用
5.1 获取 INGRESS_HOST
5.2 获取 INGRESS_PORT
5.3 通过浏览器访问 bookinfo 应用
6 卸载 bookinfo 应用
6.1 验证卸载
7 总结
1 前言
如果你对博客有任何疑问或者想更深入学习 istio,请加微信群,我们一起进步:
2 bookinfo 架构介绍
bookinfo 是 istio 的学习样例,通过 bookinfo 你可以对 istio 提供的路由、遥测等功能有更加深入的理解。
下图是 bookinfo 在没有嵌入 istio 前的物理架构图:
bookinfo 是一个在线书店应用,该应用由 4 个微服务组成,分别为 Product page、Reviews、Details 和 Ratings。为了表现 istio 的无侵入性,这 4 个微服务分别由 python、java、ruby 和 node 开发。下面分别说明如下:
Product page:聚合服务,内容由 Reviews 和 Details 内容聚合而成
Details:图书详情服务
Reviews:图书评价服务(多版本)。它也是一个聚合服务,聚合了 Ratings
Ratings:图书预订排名服务
下图是 bookinfo 嵌入 istio 后的物理架构图:
该架构图演示了嵌入 istio 后 bookinfo 的每个微服务都会新增一个 Envoy,这个 Envoy 就是所谓的 sidecar,它会接管跟它配对的微服务的所有网络进、出口流量。其实 Envoy(sidecar)的作用就像你的手机,它正在逐渐把你变成哑巴、聋子和植物人,它承接了你所有的信息入口和出口,某些别有用心的人和组织通过对手机进行监控、遥测、路由等控制,起到控制你的思维、舆论导向、审美爱好等目的。
3 bookinfo 配置与部署
3.1 配置 istio 自动注入
因为 bookinfo 会启动多个 pod,每次手动注入 sidecar 会特别繁琐,因此我们使用批注入的方式。如果你对 sidecar 注入不了解,请参考本人的上篇博客。
kubectl create ns jiuxi # 创建 jiuxi 命名空间
kubectl label ns jiuxi istio-injection=enabled
kubectl get ns jiuxi --show-labels
命令操作成功后截图如下:
3.2 部署 bookinfo 应用
在命名空间 jiuxi 中部署了 bookinfo 应用:
kubectl apply -f bookinfo/platform/kube/bookinfo.yaml -n jiuxi
部署过程截图如下:
执行如下命令查看 bookinfo 的 service 列表:
kubectl get svc -n jiuxi
服务列表截图如下:
执行如下命令查看 bookinfo 的 pod 列表:
kubectl get pod -n jiuxi
3.3 验证 bookinfo 部署情况
在服务列表中寻找 productpage 服务,然后使用 curl 命令验证服务是否发布成功。
kubectl get svc -n jiuxi
curl http://SVC_CLUSTER_IP:9080 | grep -o "<title>.*</title>"
执行成功的结果如下截图所示:
自此,整个 bookinfo 应用就已经成功部署了。
4 设置 bookinfo 网关
上面的步骤已经可以让你访问到 bookinfo 应用了。但是我知道有些同学依旧觉得寒碜,因为很多人还是通过浏览器来看世界的。
网关就相当于你房子的大门,每当你饥肠辘辘回到家,你可以通过全开、半开、开一条缝等动作控制隔壁大妈家饭菜的饭菜香味。后续课程会专门介绍网关更深层次的原理和运用。这里你先有个粗浅的理解就可以了。
4.1 定义 bookinfo 入口网关
kubectl apply -f istio-1.4.5/samples/bookinfo/networking/bookinfo-gateway.yaml -n jiuxi
4.2 确认网关已创建
kubectl get gateways.networking.istio.io -n jiuxi
5 访问 bookinfo 应用
5.1 获取 INGRESS_HOST
kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}'
5.2 获取 INGRESS_PORT
kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}'
5.3 通过浏览器访问 bookinfo 应用
根据 5.1 和 5.2 获取到 host 和 port 信息,如下截图所示:
根据此 host 和 port,打开浏览器进行访问:
多刷新几次页面,你会发现 bookinfo 应用使用到的多个 reviews 版本,如下所示:
正好可以对应到 pod 信息:
6 卸载 bookinfo 应用
你已经创建了 bookinfo,有了创建的快感。也许你有点怅然若失,因为你觉得你的技术人生不够圆满,你想亲身完爆你创建的一切,那么还等什么,执行下面的语句吧:
./istio-1.4.5/samples/bookinfo/platform/kube/cleanup.sh
命令执行成功后,会显示如下截图:
6.1 验证卸载
执行如下命令验证你是否成功卸载:
kubectl get virtualservices.networking.istio.io -n jiuxi
kubectl get destinationrules.networking.istio.io -n jiuxi
kubectl get gateways.networking.istio.io -n jiuxi
kubectl get pod -n jiuxi
但是假如你觉得破坏的感觉很爽,就像嚼了炫迈一下停不下来,你可以执行如下作死命令:
rm -rf / # 你要是真敢这么做,我就崇拜你
7 总结
自此,九析已经带你轻松完爆了 Bookinfo 应用。相信在操作的过程中,你还有很多不理解的地方,但是没关系,后续九析会为你庖丁解牛的。你需要做的,就是跟着九析操作一遍,熟悉一下整个流程,后续某天你一定会在某个瞬间大声尖叫:“我得到了”。