侧边栏壁纸
博主头像
船长博主等级

专注于云原生运维,致敬每个爱学习的你

  • 累计撰写 35 篇文章
  • 累计创建 10 个标签
  • 累计收到 9 条评论

Istio Bookinfo示例应用

船长
2022-02-11 / 0 评论 / 1 点赞 / 462 阅读 / 3,164 字
温馨提示:
本文最后更新于 2022-02-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

概述

Bookinfo示例应用是模仿在线书店的一个分类,显示一本书的信息。页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。

Bookinfo 应用分为四个单独的微服务:

  • productpage:这个微服务会调用 detailsreviews 两个微服务,用来生成页面。
  • details:这个微服务中包含了书籍的信息。
  • reviews:这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。
  • ratings:这个微服务中包含了由书籍评价组成的评级信息。

reviews 微服务有 3 个版本:

  • v1 版本不会调用 ratings 服务。
  • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
  • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。

Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖,但是构成了一个有代表性的服务网格的例子:它由多个服务、多个语言构成,并且 reviews 服务具有多个版本。

部署示例

# 为命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车代理
[root@k8s-master01 istio-1.10.6]#  kubectl label namespace default istio-injection=enabled
namespace/default labeled
 
 
[root@k8s-master01 istio-1.10.6]#  kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
 
 
 
# 查看已创建的Service
[root@k8s-master01 istio-1.10.6]# kubectl get services     
NAME          TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.96.0.244   <none>        9080/TCP   3m49s
kubernetes    ClusterIP   10.96.0.1     <none>        443/TCP    51d
productpage   ClusterIP   10.96.2.236   <none>        9080/TCP   3m48s
ratings       ClusterIP   10.96.1.94    <none>        9080/TCP   3m49s
reviews       ClusterIP   10.96.2.113   <none>        9080/TCP   3m48s
 
 
# 查看已创建的Pod
[root@k8s-master01 istio-1.10.6]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-79f774bdb9-p8f9q       2/2     Running   0          3m55s
productpage-v1-6b746f74dc-x2cvz   2/2     Running   0          3m54s
ratings-v1-b6994bb9-trb6r         2/2     Running   0          3m53s
reviews-v1-545db77b95-242jm       2/2     Running   0          3m53s
reviews-v2-7bf8c9648f-vz8sq       2/2     Running   0          3m54s
reviews-v3-84779c7bbc-pk8lq       2/2     Running   0          3m54s
 
 
# 访问Demo检查是否异常
[root@k8s-master01 istio-1.10.6]# kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -s productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>

部署ISTIO-Gateway

示例部署完毕后,但是不能被外部访问,所以需要创建Istio-ingress-Gateway进行暴漏,它会在网格边缘把一个路径映射到路由。

[root@k8s-master01 istio-1.10.6]# cat samples/bookinfo/networking/bookinfo-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
  - "*"
  gateways:
  - bookinfo-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        prefix: /static
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage
        port:
          number: 9080
 
 
[root@k8s-master01 istio-1.10.6]# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
 
 
# 确保配置文件没有问题
[root@k8s-master01 istio-1.10.6]# istioctl analyze
✔ No validation issues found when analyzing namespace: default.

验证外部访问

http://192.168.1.101:30895/productpage

参考:https://istio.io/

1

评论区