使用KubeSphere轻松部署Bookinfo应用

Bookinfo 应用

这个示例部署了一个用于演示多种 Istio 特性的应用,该应用由四个单独的微服务构成。

如安装了 Istio,说明已安装 Bookinfo。

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

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

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

reviews 微服务有 3 个版本:

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

应用的端到端架构(Bookinfo Application without Istio):

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

2 开始之前

Istio 包括了对 Kubernetes Gateway API 的 Beta 支持, 打算未来使其成为流量管理的默认 API。 以下说明指导您在网格中配置流量管理时如何选择使用 Gateway API 或 Istio 配置 API。 请按照您的首选项遵循 Gateway APIIstio APIs 页签中的指示说明。

Kubernetes Gateway API CRD 不会默认安装在大多数 Kubernetes 集群, 请确保在使用 Gateway API 之前已安装好这些 CRD:

$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
  { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.0.0" | kubectl apply -f -; }

3 原生部署(可忽略)

要在 Istio 中运行这一应用,无需对应用自身做出任何改变。 只要简单的在 Istio 环境中对服务进行配置和运行,具体一点说就是把 Envoy Sidecar 注入到每个服务之中。 最终部署结果:Bookinfo Application

所有的微服务都和 Envoy Sidecar 集成在一起,被集成服务所有的出入流量都被 Sidecar 所劫持, 这样就为外部控制准备了所需的 Hook,然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。

3.1 启动应用服务

  1. 进入 Istio 安装目录

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

    $ kubectl label namespace default istio-injection=enabled
  3. 使用 kubectl 部署应用:

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

    如果您在安装过程中禁用了 Sidecar 自动注入功能而选择手动注入 Sidecar, 请在部署应用之前使用 istioctl kube-inject 命令修改 bookinfo.yaml 文件。

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

上面的命令会启动全部的四个服务,其中也包括了 reviews 服务的三个版本(v1、v2 以及 v3)。

在实际部署中,微服务版本的启动过程需要持续一段时间,并不是同时完成的。

  1. 确认所有的服务和 Pod 都已经正确的定义和启动:

    $ kubectl get services
    
    NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
    details       ClusterIP   10.0.0.31    <none>        9080/TCP   6m
    kubernetes    ClusterIP   10.0.0.1     <none>        443/TCP    7d
    productpage   ClusterIP   10.0.0.120   <none>        9080/TCP   6m
    ratings       ClusterIP   10.0.0.15    <none>        9080/TCP   6m
    reviews       ClusterIP   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
  1. 要确认 Bookinfo 应用是否正在运行,请在某个 Pod 中用 curl 命令对应用发送请求,例如 ratings

    $ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
    
    <title>Simple Bookstore App</title>

3.2 确定 Ingress 的 IP 和端口

现在 Bookinfo 服务启动并运行中,您需要使应用程序可以从外部访问 Kubernetes 集群, 例如使用浏览器。可以使用网关实现这个目标。

  1. 为 Bookinfo 应用程序定义一个网关:

    Istio APIsGateway API

这些说明假定您的 Kubernetes 集群支持外部负载均衡器(即 LoadBalancer 类型的服务)。 请参考 Ingress 控制了解详情。

使用以下命令创建 Kubernetes Gateway:

   $ kubectl apply -f samples/bookinfo/gateway-api/bookinfo-gateway.yaml

   gateway.gateway.networking.k8s.io/bookinfo-gateway created
   httproute.gateway.networking.k8s.io/bookinfo created

因为创建 Kubernetes Gateway 资源也会 部署关联的代理服务, 所以运行以下命令等待网关就绪:

   $ kubectl wait --for=condition=programmed gtw bookinfo-gateway

从 bookinfo 网关资源处获取网关地址和端口:

   $ export INGRESS_HOST=$(kubectl get gtw bookinfo-gateway -o jsonpath='{.status.addresses[0].value}')
   $ export INGRESS_PORT=$(kubectl get gtw bookinfo-gateway -o jsonpath='{.spec.listeners[?(@.name=="http")].port}')
  1. 设置 GATEWAY_URL

    $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

4 kubesphere 部署

登录控制台并访问项目 (demo-project)。前往应用负载下的应用,点击右侧的部署示例应用

在出现的对话框中点击下一步,其中必填字段已经预先填好,相关组件也已经设置完成:

image-20240110164353898

无需修改设置,只需在最后一页(路由设置)点击创建

KubeSphere 会自动创建主机名。若要更改主机名,请将鼠标悬停在默认路由规则上,然后点击 icon 进行编辑。

工作负载中,确保这四个部署都处于运行中状态,这意味着该应用已经成功创建。可能需要等几分钟才能看到部署正常运行。

5 访问 Bookinfo

应用中,访问自制应用,点击应用 bookinfo 查看其详情页面:

详情页面中显示用于访问 Bookinfo 应用的主机名和端口号。

内网服务器请求访问:

由于将通过 NodePort 在集群外访问该应用,因此需在安全组中为出站流量开放上图的端口,并按需设置端口转发规则。

在本地 hosts 文件 (/etc/hosts) 中添加一个条目将主机名映射到对应的 IP 地址,如:

139.198.178.20 productpage.icv-data-demo.192.168.0.190.nip.io

请你替换成自己的 IP 地址与主机名。

完成后,点击访问服务访问该应用:

在应用详情页面,点击左下角的 Normal user

normal-user

Book Reviews 板块仅出现 Reviewer1Reviewer2,并且没有任何评级内容,因为这是当前应用版本的状态。

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都国企技术专家兼架构,多家大厂后台研发和架构经验,负责复杂度极高业务系统的模块化、服务化、平台化研发工作。具有丰富带团队经验,深厚人才识别和培养的积累。

参考:

  • 编程严选网

    本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/308385.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C/C++ 位段

目录 什么是位段&#xff1f; 位段的内存分配 位段的跨平台问题 什么是位段&#xff1f; 位段的声明与结构是类似的&#xff0c;但是有两个不同&#xff1a; 位段的成员必须是 int、unsigned int 或signed int 等整型家族。位段的成员名后边有一个冒号和一个数字 这是一个…

深度学习笔记(二)——Tensorflow环境的安装

本篇文章只做基本的流程概述&#xff0c;不阐述具体每个软件的详细安装流程&#xff0c;具体的流程网上教程已经非常丰富。主要是给出完整的安装流程&#xff0c;以供参考 环境很重要 一个好的算法环境往往能够帮助开发者事半功倍&#xff0c;入门学习的时候往往搭建好环境就已…

【ELISA检测】酶联免疫吸附实验概述-卡梅德生物

酶联免疫吸附实验&#xff08;Enzyme linked immunosorbent assay&#xff0c;ELISA&#xff09;是将抗原或抗体结合在固相载体表面&#xff0c;利用抗原抗体的特异性结合以及抗体或者抗原上标记的酶催化特定底物发生显色反应&#xff0c;实现目标物检测的免疫分析方法&#xf…

24/1/10 qt work

1. 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&…

11 个 Python全栈开发工具集

前言 以下是专注于全栈开发不同方面的 Python 库;有些专注于 Web 应用程序开发&#xff0c;有些专注于后端&#xff0c;而另一些则两者兼而有之。 1. Taipy Taipy 是一个开源的 Python 库&#xff0c;用于构建生产就绪的应用程序前端和后端。 它旨在加快应用程序开发&#xf…

Appium + ios环境搭建过程Mac

前提&#xff1a; 已经搭建好NodeJavaPythonAppium...环境 见下面的文章&#xff1a; ok的话按照下面的步骤搭建IOs的自动化 1. 安装Xcode 官方下载 (Downloads and Resources - Xcode - Apple Developer 1)AppStore 下载安装最新版本 2. 依赖工具 工具名描述libimobile…

Springboot的配置文件详解:从入门到精通,解读配置文件的奇妙世界

目录 1、前言 2、介绍 2.1 Springboot配置文件的作用 2.2 Springboot支持的配置文件类型 2.3 Springboot配置文件的加载顺序 3、YAML配置文件 3.1 YAML基本语法介绍 3.2 YAML中的基本数据类型 3.3 YAML中的复合数据类型 3.4 YAML中的配置属性 3.5 YAML中的多环境配置…

从0开始学Git指令(2)

从0开始学Git指令 因为网上的git文章优劣难评&#xff0c;大部分没有实操展示&#xff0c;所以打算自己从头整理一份完整的git实战教程&#xff0c;希望对大家能够起到帮助&#xff01; 工作区&#xff08;Working Directory&#xff09; 就是你在电脑里能看到的目录&#x…

还不会python 实现常用的数据编码和对称加密?看这篇文章就够啦~

相信很多使用 python 的小伙伴在工作中都遇到过&#xff0c;对数据进行相关编码或加密的需求&#xff0c;今天这篇文章主要给大家介绍对于一些常用的数据编码和数据加密的方式&#xff0c;如何使用 python 去实现。话不多说&#xff0c;接下来直接进入主题&#xff1a; 前言 1…

Windows VSCode 使用Python

一、vscode中安装python 二、下载python.exe&#xff08;即vscode中需要的python解释器&#xff09; 下载地址&#xff1a;https://www.python.org/downloads/ 三、安装第三方代码规范工具 参考网址&#xff1a;https://www.python.org/downloads/ 工具介绍 flake8 &#xf…

文心一言API调用,保姆级案例分享

分享一个调用文心一言API的案例。今天自己用程序去过去文心一言模型中获取结果。 文心一言API调用如何收费&#xff1f; 官方给送了20块钱的体验券&#xff01; 后续收费规则如下 如何开通所需要要的 API key 和 Secret key&#xff1f; api调用需要先在千帆平台开通API key 。…

大模型PEFT技术原理(一):BitFit、Prefix Tuning、Prompt Tuning

随着预训练模型的参数越来越大&#xff0c;尤其是175B参数大小的GPT3发布以来&#xff0c;让很多中小公司和个人研究员对于大模型的全量微调望而却步&#xff0c;近年来研究者们提出了各种各样的参数高效迁移学习方法&#xff08;Parameter-efficient Transfer Learning&#x…

TurboDesign安装包及安装教程

下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1I_jMid-z186GgvyH3ZExGQ 提取码&#xff1a;z936 1.解压下载好的压缩包。 2.进入解压后的文件夹并点击进入“ADT TURBODesign Suite 6.4.0”。 3.点击“安装包”进入文件夹。 4.找到“setup.exe”并右键点…

Docker入门介绍

【一】从 dotCloud 到 Docker——低调奢华有内涵 1、追根溯源:dotCloud 时间倒回到两年前&#xff0c;有一个名不见经传的小公司&#xff0c;他的名字叫做:dotCloud。 dotCloud 公司主要提供的是基于 PaaS(Platform as a Service&#xff0c;平台及服务) 平台为开发者或开发商…

训练自己的GPT2

训练自己的GPT2 1.预训练与微调2.准备工作2.在自己的数据上进行微调 1.预训练与微调 所谓的预训练&#xff0c;就是在海量的通用数据上训练大模型。比如&#xff0c;我把全世界所有的网页上的文本内容都整理出来&#xff0c;把全人类所有的书籍、论文都整理出来&#xff0c;然…

从零学Java 集合概述

Java 集合概述 文章目录 Java 集合概述1 什么是集合?2 Collection体系集合2.1 Collection父接口2.1.1 常用方法2.1.2 Iterator 接口 1 什么是集合? 概念&#xff1a;对象的容器&#xff0c;定义了对多个对象进行操作的常用方法&#xff1b;可实现数组的功能。 和数组区别&…

中小企业实施了MES系统后,同样具备大企业的生产能力

工业4.0、智能制造是当前制造业最热门的话题。数字化工厂是实现智能制造的基础&#xff0c;在建设数字化工厂的过程中&#xff0c;MES系统是核心也是最重要的一环。万界星空MES系统是企业信息数据集成的纽带&#xff0c;可帮助企业实现监控与实际生产过程的同步化&#xff0c;全…

基于JavaWeb+BS架构+SpringBoot+Vue校车调度管理系统的设计和实现

基于JavaWebBS架构SpringBootVue校车调度管理系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 摘 要 1 Abstract 1 目 录 2 1 绪 论 1 1.1研究背景 1 1.2 研究意义 1 1.…

软件测试|Python openpyxl库使用指南

简介 我们之前介绍过&#xff0c;python在自动化办公方面可以大放异彩&#xff0c;因为Python有许多的第三方库&#xff0c;其中有很多库就支持我们对office软件进行操作&#xff0c;熟练的使用Python对office进行操作&#xff0c;可以实现自动化办公&#xff0c;极大提升我们…

【博士每天一篇论文-算法】Optimal modularity and memory capacity of neural reservoirs

阅读时间&#xff1a;2023-11-15 1 介绍 年份&#xff1a;2019 作者&#xff1a;Nathaniel Rodriguez 印第安纳大学信息学、计算和工程学院&#xff0c;美国印第安纳州布卢明顿 期刊&#xff1a; Network Neuroscience 引用量&#xff1a;39 这篇论文主要研究了神经网络的模块…