istio-bookinfo示例

istio: 0.7.1

该指南部署了一个由四个单独的微服务组成的示例应用程序,其将用于演示ISTIO服务网格的各种特征。

概述

在本指南中,我们将部署一个简单的应用程序,它显示关于图书的信息,类似于在线书店的目录。在页面上显示书籍的描述、详细细节(ISBN,页数...)和书评。

BookInfo应用程序分为四个独立的微服务:

productpage:(产品页面)微服务,调用 details 和 reviews 微服务来填充页面。
details:微服务包含书籍的详细信息。
reviews:微服务包含书籍的点评。它也调用 ratings 微服务。

ratings:微服务包含随书评一起出现的评分信息。

有3个版本的 reviews 微服务:

版本v1不调用 ratings 服务。
版本v2调用 ratings ,并将每个评级显示为1到5个黑色星。
版本v3调用 ratings ,并将每个评级显示为1到5个红色星。

应用程序的端到端架构如下所示。


                  Bookinfo Application without Istio

该应用程序由多语言实现,即这些微服务使用不同的语言编写。值得注意的是,这些服务与 Istio 没有任何依赖关系。这是个有趣的 Service Mesh 示例,特别是对于评论服务,有多语言的版本。

开始之前

如果您还没有这样做,请按照 安装指南 对应的说明安装Istio。

部署应用程序

使用 Istio 运行应用程序示例不需要修改应用程序本身。相反,我们只需要在支持 Istio 的环境中配置和运行服务, Envoy sidecar 将会注入到每个服务中。所需的命令和配置根据运行时环境的不同而有所不同,但在所有情况下,生成的部署将下图所示:


                          Bookinfo Application

所有的微服务都将与一个 Envoy sidecar 一起打包,拦截这些服务的入站和出站的调用请求,提供通过 Istio 控制平面从外部控制整个应用的路由,遥测收集和策略执行所需的 hook。

要启动该应用程序,请按照以下对应于您的 Istio 运行时环境的说明进行操作。

在 Kubernetes 中运行

  1. 将目录更改为 Istio 安装目录的根目录。

  2. 构建应用程序容器:

    如果您使用 自动注入 sidecar 的方式部署的集群,那么只需要使用 kubectl 命令部署服务:

     kubectl apply -f samples/bookinfo/kube/bookinfo.yaml
    

    如果您使用 手动注入 sidecar 的方式部署的集群,清使用下面的命令:

     kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)
    

    请注意,该 istioctl kube-inject 命令用于在创建部署之前修改 bookinfo.yaml 文件。这将把 Envoy 注入到 Kubernetes 资源,如 这里 记载的。

    上述命令启动四个微服务并创建网关入口资源,如下图所示。3 个版本的评论的服务 v1、v2、v3 都已启动。

    请注意在实际部署中,随着时间的推移部署新版本的微服务,而不是同时部署所有版本。

  3. 确认所有服务和 pod 已正确定义并运行:

     kubectl get services
    

    这将产生以下输出:

     NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
     details                    10.0.0.31    <none>        9080/TCP             6m
     kubernetes                 10.0.0.1     <none>        443/TCP              7d
     productpage                10.0.0.120   <none>        9080/TCP             6m
     ratings                    10.0.0.15    <none>        9080/TCP             6m
     reviews                    10.0.0.170   <none>        9080/TCP             6m
    

    而且

     kubectl get pods
    

    将产生:

     NAME                                        READY     STATUS    RESTARTS   AGE
     details-v1-1520924117-48z17                 2/2       Running   0          6m
     productpage-v1-560495357-jk1lz              2/2       Running   0          6m
     ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
     reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
     reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
     reviews-v3-1813607990-8ch52                 2/2       Running   0          6m
    

    确定 ingress IP 和端口

  4. 如果您的 kubernetes 集群环境支持外部负载均衡器的话,可以使用下面的命令获取 ingress 的IP地址:

    kubectl get ingress -o wide
    

    输出如下所示:

    NAME      HOSTS     ADDRESS                 PORTS     AGE
    gateway   *         130.211.10.121          80        1d
    

    Ingress 服务的地址是:

    export GATEWAY_URL=130.211.10.121:80

      

下一步

使用以下 curl 命令确认 BookInfo 应用程序正在运行:

curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
200

你也可以通过在浏览器中打开 http://$GATEWAY_URL/productpage 页面访问 Bookinfo 网页。如果您多次刷新浏览器将在 productpage 中看到评论的不同的版本,它们会按照 round robin(红星、黑星、没有星星)的方式展现,因为我们还没有使用 Istio 来控制版本的路由。

现在,您可以使用此示例来尝试 Istio 的流量路由、故障注入、速率限制等功能。要继续的话,请参阅 Istio 指南,具体取决于您的兴趣。智能路由 是初学者入门的好方式。

清理

在完成 BookInfo 示例后,您可以卸载它,如下所示:

卸载 Kubernetes 环境

  1. 删除路由规则,终止应用程序 pod

    samples/bookinfo/kube/cleanup.sh
    
  2. 确认关闭

    istioctl get routerules   #-- there should be no more routing rules
    kubectl get pods          #-- the BookInfo pods should be deleted

参考:

https://istio.io/docs/guides/bookinfo.html

转自:http://istio.doczh.cn/docs/reference/commands/istioctl.md#istioctl-kube-inject


猜你喜欢

转载自blog.csdn.net/kozazyh/article/details/80516888