前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《istio实战指南》第4章 Bookinfo应用

《istio实战指南》第4章 Bookinfo应用

作者头像
yeedomliu
发布2020-07-14 14:45:29
2K0
发布2020-07-14 14:45:29
举报
文章被收录于专栏:yeedomliuyeedomliu

第4章 Bookinfo应用


什么是Bookinfo应用

  • Bookinfo是一个模拟的在线书店应用,只有一个页面,由图书列表、图书详细信息、评论和评分4个部分组成,这些部分分别由对应的微服务来实现。Bookinfo应用是一个异构应用,不同的服务使用不同的程序语言编写,共同组成了一个微服务系统

服务

功能

实现

productpage

图书列表

Python

details

图书详细信息

Ruby

reviews

评论

Java

ratings

评分

Node.js

  • 另外,reviews服务有3个版本,可以用来测试流量控制的相关功能。各版本对应的特性下表所示
代码语言:javascript
复制
不会调用ratings服务
  • 应用的服务结构
  • 想要通过Istio来管理这个应用的网络通信,需要把SidecarIstio架构中的Envoy代理)注入每个服务中,并把网络流量托管给Envoy代理。这对服务是无侵入的,不需要修改微服务,只需要配置和运行一些命令

部署Bookinfo应用

安装和部署

  • 进入Istio安装目录
  • 使用自动注入的方式,为default命名空间打上标签istio-injection=enabled
代码语言:javascript
复制
kubectl label namespace default istio-injection=enabled
  • 自动注入是在Kubernetes1.9版本后引入的新功能,本质上是通过Kubernetes中的admission webhook实现的。开启自动注入会给部署在当前命名空间的服务都自动添加一个Sidecar代理
  • default命名空间已经打上了istio-injection的标签
  • istio安装包里的samples目录下获取bookinfo的清单文件,并使用命令部署,文件在samples/bookinfo/platform/kube/bookinfo.yaml
  • 分别为4个微服务定义了自己的ServiceDeployment。每个服务都能够从Istio官方提供的地址拉取相应的容器镜像。其中不太一样的是,reviews服务有3个版本,并启动了3个Deployment
  • 运行命令安装bookinfo
代码语言:javascript
复制
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service/details unchanged
serviceaccount/bookinfo-details unchanged
deployment.apps/details-v1 unchanged
service/ratings unchanged
serviceaccount/bookinfo-ratings unchanged
deployment.apps/ratings-v1 unchanged
service/reviews unchanged
serviceaccount/bookinfo-reviews unchanged
deployment.apps/reviews-v1 unchanged
deployment.apps/reviews-v2 unchanged
deployment.apps/reviews-v3 unchanged
service/productpage unchanged
serviceaccount/bookinfo-productpage unchanged
deployment.apps/productpage-v1 unchanged
  • 安装好后的容器列表
  • 接下来给应用定义入口网关(Ingress Gateway)。因为需要从外部(如浏览器)来访问Kubernetes集群里的服务,所以要通过网关实现请求的转发
代码语言:javascript
复制
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
  • 定义名为bookinfo-gateway的网关,使用Istio默认的ingressgateway,并对外提供HTTP请求进行访问。第二部分定义了VirtualService,它是一种配置资源,主要负责定义路由规则,将请求路由到对应的服务上
代码语言:javascript
复制
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
  • 通过下面的命令确认网关是否创建完成
代码语言:javascript
复制
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
  • 定义名为bookinfo-gateway的网关,使用Istio默认的ingressgateway,并对外提供HTTP请求进行访问。第二部分定义了VirtualService,它是一种配置资源,主要负责定义路由规则,并将请求路由到对应的服务上
代码语言:javascript
复制
$ kubectl get gateway
NAME               AGE
bookinfo-gateway   48s
  • 确认所有服务都已经启动
代码语言:javascript
复制
$ kubectl get svc
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.101.254.33    <none>        9080/TCP   76m
kubernetes    ClusterIP   10.96.0.1        <none>        443/TCP    5d23h
productpage   ClusterIP   10.109.69.236    <none>        9080/TCP   76m
ratings       ClusterIP   10.96.172.219    <none>        9080/TCP   76m
reviews       ClusterIP   10.111.140.121   <none>        9080/TCP   76m
  • 确保pod都正常运行
代码语言:javascript
复制
$ kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-74f858558f-j2nkq       2/2     Running   0          76m
productpage-v1-8554d58bff-jj4k9   2/2     Running   0          76m
ratings-v1-7855f5bcb9-crv8g       2/2     Running   0          76m
reviews-v1-59fd8b965b-glfks       2/2     Running   0          76m
reviews-v2-d6cfdb7d6-cl6d9        2/2     Running   0          76m
reviews-v3-75699b5cfb-fpqwk       2/2     Running   0          76m
  • 当服务启动完成后,就可以用浏览器打开网址http://localhost/productpage,来浏览应用的Web页面
  • 打开Kiali系统(http://localhost:20001/)选择命名空间为default,查看服务之间调用链

默认目标规则

代码语言:javascript
复制
$ kubectl apply -f 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
  • 上面命令中的清单是没有开启mTLS的版本,即服务间的通信不需要安全验证。可以使用下面的命令查看目标规则,-o代表-output,后面输出格式
代码语言:javascript
复制
$ kubectl get destinationrules -o yaml
apiVersion: v1
items:
- apiVersion: networking.istio.io/v1alpha3
  kind: DestinationRule
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"networking.istio.io/v1alpha3","kind":"DestinationRule","metadata":{"annotations":{},"name":"details","namespace":"default"},"spec":{"host":"details","subsets":[{"labels":{"version":"v1"},"name":"v1"},{"labels":{"version":"v2"},"name":"v2"}]}}
    creationTimestamp: "2020-02-26T12:59:22Z"
    generation: 1
    name: details
    namespace: default
  • 需要注意的一点是,Bookinfo的页面中会调用jquery文件,需要网络环境可以访问ajax.googleapis.com地址
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yeedomliu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第4章 Bookinfo应用
    • 什么是Bookinfo应用
      • 部署Bookinfo应用
        • 安装和部署
        • 默认目标规则
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档