bookinfo介绍

在这个指南中我们展示了一个简单的应用,它展示一本书的信息,类似于在线书店的单个目录条目。页面展示书的描述,细节(ISBN,页数等),还有一些书评。

Bookinfo应用被分为四个分离的微服务:

  • productpage。微服务productpage调用details和reviews 填充页面。
  • details。 微服务details包含书的信息。
  • reviews。 微服务reviews 包含书评,同时调用ratings 。 ratings。
  • 微服务ratings包含带有书评的书籍排名信息。

reviews 有三个版本:

  • Version v1 不调用ratings
  • Version v2 调用ratings,展示1到5颗黑星
  • Version v3 调用ratings,展示1到5颗红星

应用的端到端架构如下

1 启动istio自动注入

Istio 默认自动注入 Sidecar. 为命名空间打上标签 istio-injection=enabled:

kubectl label namespace ctt istio-injection=enabled

查看label是否添加成功

kc describe ns ctt

2 部署bookinfo应用

进入istio文件夹,使用 kubectl 部署应用
-n xxx 指定命名空间

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n ctt

查看正在运行的svc和pod

可以注意到ready为2/2,说明sidecar被自动注入了;如果之前namespace的label配置错误会显示为1/1。

也可以查看pod,可以看到sidecar被注入:

如果发现没有自动注入sidecar,可以再确保label配置正确后delete所有pod重新启动。

3 内网访问

要确认 Bookinfo 应用是否正在运行,可以某个 Pod 中用 curl 命令对应用发送请求,例如 ratings:

kc exec -it ratings-v1-f849dc6d-nhl29 -n ctt -- /bin/bashcurl productpage:9080/productpage | grep -o "<title>.*</title>"

4 外网访问

现在 Bookinfo 服务启动并运行中需要使应用程序可以从外部访问 Kubernetes 集群,例如使用浏览器。可以使用网关实现这个目标。
可以看到,bookinfo的服务都是clusterip类型的,所有默认是无法通过外网访问的(对比另一个springboot_service-dome1中的nodeport类型)

4.1 为 Bookinfo 应用程序定义一个网关

同样的,我这里还是指定了命名空间

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n ctt# 确认网关创建完成
kubectl get gateway -n ctt

4.2 确定 Ingress IP 和端口

执行如下指令,确定您的 Kubernetes 集群是否运行在支持外部负载均衡的环境中

kubectl get svc istio-ingressgateway -n istio-system

如果 EXTERNAL-IP 值已设置,说明环境正在使用外部负载均衡,可以用其为 Ingress Gateway 提供服务。如果 EXTERNAL-IP 值为 (或持续显示 ),说明环境没有为 Ingress Gateway 提供外部负载均衡,无法使用 Ingress Gateway。在这种情况下,可以使用服务的 Node Port 访问网关。
可以看到这个集群没有额外配置负载均衡。
istio-ingressgateway将服务的80端口映射为机器的30232端口
这里为什么是80,我的理解是可以bookinfo-gateway将内部的80和外部的30232端口映射,而virtualservice中绑定了这个gateway并且配置了路由规则number: 9080再一次转发到服务的9080端口,即从外部访问时30232=>80=>9080。

4.4 查看gateway.yml配置

可以通过gateway的配置发现gateway绑定了80端口的服务,并在下面用virtualservice为这个其配置了路由规则。
因此,我的理解是,bookinfo-gateway会将访问bookinfo的请求统一从30232进入,再转发到具体的服务端口(具体服务使用clusterip类型防止直接被外网访问)

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:name: bookinfo-gateway
spec:selector:istio: ingressgateway # use istio default controllerservers:- port:number: 80name: httpprotocol: HTTPhosts:- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: bookinfo
spec:hosts:- "*"gateways:- bookinfo-gatewayhttp:- match:- uri:exact: /productpage- uri:prefix: /static- uri:exact: /login- uri:exact: /logout- uri:prefix: /api/v1/productsroute:- destination:host: productpageport:number: 9080

尝试用外网访问

curl localhost:30232/productpage | grep -o "<title>.*</title>"# curl 10.xx.xxx.xxx:30232/productpage | grep -o "<title>.*</title>"


通过浏览器访问

5 NodePort

可以对比Service类型为NodePort的springboot项目,就可以不需要网关直接通过外网访问

其他

在尝试istio官网对于istio其他功能的示例时,发现官网的教程缺少对reviews的DestinationRule配置文件。
可以手动apply一下。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: reviews
spec:host: reviewssubsets:- name: v1labels:version: v1- name: v2labels:version: v2- name: v3labels:version: v3

参考

https://preliminary.istio.io/latest/zh/docs/examples/bookinfo/
https://preliminary.istio.io/latest/zh/docs/tasks/traffic-management/ingress/ingress-control/#determining-the-ingress-ip-and-ports
https://preliminary.istio.io/latest/zh/docs/examples/bookinfo/

istio部署bookinfo相关推荐

  1. kubesphere服务网格servicemesh(Istio)示例:部署 Bookinfo 和管理流量

    Istio,作为一种开源服务网格解决方案,为微服务提供了强大的流量管理功能.以下是 Istio 官方网站上关于流量管理的简介: Istio 的流量路由规则可以让您很容易的控制服务之间的流量和 API ...

  2. Istio服务网格进阶②:在Istio服务网格中部署Bookinfo在线书店微服务项目

    在Istio服务网格中部署Bookinfo在线书店微服务项目 文章目录 在Istio服务网格中部署Bookinfo在线书店微服务项目 1.在线书店微服务项目介绍 2.在线书店微服务系统架构图 3.部署 ...

  3. Istio灰度发布:部署Bookinfo微服务项目

    对于istio流量管理我们通过灰度发布将流量转移到不同的服务上面,你可以去任意的配置.比如10%流量到新版本,90%到旧版本,这些是都可以去配置的. 1.创建命名空间并开启自动注入 [root@mas ...

  4. OpenShift 4 之运行Istio的BookInfo微服务应用

    <OpenShift 4.x HOL教程汇总> 本文部署Istio的实例BookInfo应用并配置访问路由等功能.在进行操作前,需先完成<OpenShift 4 之通过命令创建Ser ...

  5. Traffic Shifting

    这个课题向你展示如何将一个服务的老版本流量逐渐迁移到新版本上.使用Istio,我们可以通过使用每次流量迁移权重低于100的一系列规则.逐渐完成流量的迁移,例如10,20,30,- 100%.这个课题简 ...

  6. Setting up Basic Access Control

    这个task展示如何使用k8s labels控制访问服务. Before you begin 在k8s集群上安装Istio 部署 Bookinfo 初始化应用版本,路由来自 reviews 服务v2版 ...

  7. OpenShift 4 之脚本化部署Istio的HelloWorld和BookInfo示例

    <OpenShift 4.x HOL教程汇总> 本文采用全脚本实现<OpenShift 4 之通过命令创建Service Mesh环境>+<OpenShift 4 之运行 ...

  8. Istio 1.2.4 最新版安装 官方Bookinfo例子部署 踩坑

    一.安装步骤: 1.下载所需文件及镜像 wget https://github.com/istio/istio/releases/download/1.0.0/istio-1.0.0-linux.ta ...

  9. 如何使用 Istio 进行多集群部署管理:单控制平面 Gateway 连接拓扑

    作者 | 王夕宁  阿里巴巴高级技术专家 **导读:**本文摘自于由阿里云高级技术专家王夕宁撰写的<Istio 服务网格技术解析与实践>一书,讲述了如何使用 Istio 进行多集群部署管理 ...

最新文章

  1. LTE MIBSIB1
  2. 难搞的偏向锁终于要被Java移除了
  3. Ubuntu 配置大数据平台hadoop hive数据仓库之完整踩坑
  4. U盘快速​安装Ubuntu系统
  5. Office 365开发者的前端必备课程
  6. mysql常驻内存_MySQL的内存和相关问题排查
  7. Java之设计模式详解 (转)
  8. solidity数据位置
  9. linux如何检查进程,如何在Linux中检查进程的执行时间
  10. R_ggplot2基础(一)
  11. 模板的实例化和具体化
  12. 概率dp(A - Scout YYF I POJ - 3744 )
  13. 服务器系统怎么添加网络打印机,如何添加网络打印机
  14. 2020美化一款PHP版三合一收款码_附50多款模板源码
  15. 苏州大学计算机论文多少字,苏州大学毕业论文格式要求
  16. 【学习笔记】市场分析报告的基本框架
  17. 时域OCT(TD-OCT) 我的理解
  18. 网络打印机计算机服务,如何把局域网中的所有计算机及打印机设置共享?
  19. Android蓝牙系统框架和代码结构
  20. 101. Symmetric Tree (C语言)

热门文章

  1. 一文读懂K均值(K-Means)聚类算法
  2. C#获取CPU温度(OpenHardwareMonitorLib.dll库)
  3. 有效打造你的个人品牌
  4. MLAA的实现与分析
  5. Windows arp静态绑定
  6. 企业衡量求职者简历的标准
  7. 血管里上班的「纳米机器人」有了原型
  8. qcy教你下载你在CSDN上写过的文章
  9. 使用 Opencv 创建类似 Instagram 的滤镜!
  10. conda安装tensorflow