网站可视化编辑,上海网站排名前十,必应搜索推广,做动漫短视频网站Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖#xff0c;但是构成了一个有代表性的服务网格的例子#xff1a;它由多个服务、多个语言构成#xff0c;并且 reviews 服务具有多个版本。
该应用由四个单独的微服务构成。 这个应用模仿在线书…Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖但是构成了一个有代表性的服务网格的例子它由多个服务、多个语言构成并且 reviews 服务具有多个版本。
该应用由四个单独的微服务构成。 这个应用模仿在线书店的一个分类显示一本书的信息。 页面上会显示一本书的描述书籍的细节ISBN、页数等以及关于这本书的一些评论。
Bookinfo 应用分为四个单独的微服务
productpage. 这个微服务会调用 details 和 reviews 两个微服务用来生成页面。details. 这个微服务中包含了书籍的信息。reviews. 这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。ratings. 这个微服务中包含了由书籍评价组成的评级信息。
reviews 微服务有 3 个版本
v1 版本不会调用 ratings 服务。v2 版本会调用 ratings 服务并使用 1 到 5 个黑色星形图标来显示评分信息。v3 版本会调用 ratings 服务并使用 1 到 5 个红色星形图标来显示评分信息。
下图展示了这个应用的端到端架构。 Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖但是构成了一个有代表性的服务网格的例子它由多个服务、多个语言构成并且 reviews 服务具有多个版本。 官方示例
部署应用
要在 Istio 中运行这一应用无需对应用自身做出任何改变。 您只要简单的在 Istio 环境中对服务进行配置和运行具体一点说就是把 Envoy Sidecar 注入到每个服务之中。 最终的部署结果将如下图所示 所有的微服务都和 Envoy Sidecar 集成在一起被集成服务所有的出入流量都被 Sidecar 所劫持 这样就为外部控制准备了所需的 Hook然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。
启动应用服务
使用手动注入Sidecar
kubectl apply -f (istioctl kube-inject -f /usr/local/istio-1.10.4/samples/bookinfo/platform/kube/bookinfo.yaml)查看svc
[rootk8s-master addons]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
details ClusterIP 10.1.104.71 none 9080/TCP 27s
httpd-svc NodePort 10.1.216.8 none 8080:31000/TCP 53d
kindly-robin-mychart NodePort 10.1.185.211 none 80:32000/TCP 46d
kubernetes ClusterIP 10.1.0.1 none 443/TCP 62d
myapp ClusterIP 10.1.164.12 none 80/TCP 45d
productpage ClusterIP 10.1.235.14 none 9080/TCP 27s
ratings ClusterIP 10.1.7.106 none 9080/TCP 27s
reviews ClusterIP 10.1.55.208 none 9080/TCP 27s
tomcat ClusterIP 10.1.137.187 none 8080/TCP,8009/TCP 45d查看pod
[rootk8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
busybox-7c84546778-9jzpx 1/1 Running 27 62d
busybox-7c84546778-rs5d9 1/1 Running 28 62d
details-v1-6486db986c-8w4m9 2/2 Running 0 16m
kindly-robin-mychart-fb68878c8-dlzw8 1/1 Running 0 53m
productpage-v1-76ddd6867b-l2sll 2/2 Running 0 18m
ratings-v1-54bf9bb699-7sssb 2/2 Running 0 16m
reviews-v1-76d5495769-xs4gx 2/2 Running 0 16m
reviews-v2-5ff5f7dd8b-jw6wm 2/2 Running 0 18m
reviews-v3-7f8467c6ff-wnt6d 2/2 Running 0 16m
耐心等待几分钟状态就会转换为Running。
要确认 Bookinfo 应用是否正在运行请在某个 Pod 中用 curl 命令对应用发送请求例如 ratings
[rootk8s-master ~]# kubectl exec -it $(kubectl get pod -l appratings -o jsonpath{.items[0].metadata.name}) -c ratings -- curl productpage:9080/productpage | grep -o title.*/title
titleSimple Bookstore App/title创建Istio Ingress Gateway并与应用程序关联
[rootk8s-master ~]# kubectl apply -f /usr/local/istio-1.10.4/samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created查看网关
[rootk8s-master ~]# kubectl get gateway
NAME AGE
bookinfo-gateway 55s根据文档设置访问网关的 INGRESS_HOST 和 INGRESS_PORT 变量。确认并设置。 在Istio 的安装文档中我已经通过NodePort 方式来暴露istio-ingressgateway 服务现在根据如下命令来获取 ingress ports
export INGRESS_PORT$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath{.spec.ports[?(.namehttp2)].nodePort})
export SECURE_INGRESS_PORT$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath{.spec.ports[?(.namehttps)].nodePort})获取 ingress IP 地址
export INGRESS_HOST$(kubectl get po -l istioingressgateway -n istio-system -o jsonpath{.items[0].status.hostIP})设置并获取GATEWAY_URL
[rootk8s-master ~]# export INGRESS_HOST$(kubectl get po -l istioingressgateway -n istio-system -o jsonpath{.items[0].status.hostIP})
[rootk8s-master ~]# export GATEWAY_URL$INGRESS_HOST:$INGRESS_PORT
[rootk8s-master ~]# echo $GATEWAY_URL
192.168.200.129:31743浏览器访问http://192.168.200.129:31743/productpage 如果刷新几次应用的页面就会看到页面中会随机展示 reviews 服务的不同版本的效果红色、黑色的星形或者没有显示。reviews 服务出现这种情况是因为我们还没有使用 Istio 来控制版本的路由。
应用默认目标规则
[rootk8s-master ~]# kubectl apply -f /usr/local/istio-1.10.4/samples/bookinfo/networking/destination-rule-all.yaml
destinationrule.networking.istio.io/productpage created
destinationrule.networking.istio.io/reviews created
destinationrule.networking.istio.io/ratings created
destinationrule.networking.istio.io/details created查看目标规则
kubectl get destinationrules -o yaml