使用KubeSphere轻松部署Bookinfo应用

news2024/11/17 3:32:01

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 发布!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JVM 基础】类字节码详解

JVM 基础 - 类字节码详解 多语言编译为字节码在JVM运行Java字节码文件Class文件的结构属性从一个例子开始反编译字节码文件字节码文件信息常量池方法表集合类名 再看两个示例分析try-catch-finallykotlin 函数扩展的实现 源代码通过编译器编译为字节码&#xff0c;再通过类加载…

06.构建大型语言模型步骤

在本章中,我们为理解LLMs奠定了基础。在本书的其余部分,我们将从头开始编写一个代码。我们将以 GPT 背后的基本思想为蓝图,分三个阶段解决这个问题,如图 1.9 所示。 图 1.9 本书中介绍的构建LLMs阶段包括实现LLM架构和数据准备过程、预训练以创建基础模型,以及微调基础模…

设计模式—行为型模式之策略模式

设计模式—行为型模式之策略模式 策略&#xff08;Strategy&#xff09;模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化不会影响使用算法的客户。属于对象行为模式。 策略模式的主要角色如下。 抽象策略&…

uni-app分包预下载

模块的二级页面&#xff0c;按模块处理成分包页面&#xff0c;有以下好处&#xff1a; 按模块管理页面&#xff0c;方便项目维护。减少主包体积&#xff0c;用到的时候再加载分包&#xff0c;属于性能优化解决方案。 ::: tip 温馨提示 通过 VS Code 插件 uni-create-view 可…

对root用户的理解

1.什么是root用户&#xff1f; Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root&#xff08;超级管理员&#xff09; root用户拥有最大的系统操作权限&#xff0c;而普通用户在许多地方的权限是受…

圣诞老人遇见 GenAI:利用大语言模型、LangChain 和 Elasticsearch 破译手写的圣诞信件

在北极的中心地带&#xff0c;圣诞老人的精灵团队面临着巨大的后勤挑战&#xff1a;如何处理来自世界各地儿童的数百万封信件。 圣诞老人表情坚定&#xff0c;他决定是时候将人工智能纳入圣诞节行动了。 圣诞老人坐在配备了最新人工智能技术的电脑前&#xff0c;开始在 Jupyter…

大气精美网站APP官网HTML源码

源码介绍 大气精美网站APP官网源码&#xff0c;好看实用&#xff0c;记事本修改里面的内容即可&#xff0c;喜欢的朋友可以拿去研究 下载地址 蓝奏云&#xff1a;https://wfr.lanzout.com/itqxN1ko2ovi CSDN免积分下载&#xff1a;https://download.csdn.net/download/huayu…

Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!

响应与Rest风格 1.11.1.1 环境准备步骤1:设置返回页面步骤2:启动程序测试 1.1.2 返回文本数据步骤1:设置返回文本内容步骤2:启动程序测试 1.1.3 响应JSON数据响应POJO对象响应POJO集合对象 知识点1&#xff1a;ResponseBody 2&#xff0c;Rest风格2.1 REST简介2.2 RESTful入门案…

node的下载、安装、配置

下载&#xff1a; 官网下载&#xff1a;Node.js 左右两个都可以&#xff1a; 往期版本&#xff1a; Index of /dist/latest-v8.x/ 安装&#xff1a; 打开cmd&#xff1a; 输入以下指令&#xff0c;如果出现版本号说明安装成功 node -v npm -v 如果npm -v报错&#xff0c;就…

什么是Helm?它是如何提升云原生应用私有化部署效率的

转载至我的博客 &#xff0c;公众号&#xff1a;架构成长指南 试想一下&#xff0c;如果有一个项目有50 个微服务&#xff0c;每个微服务都有service、deployment、ingress、pvc等 yaml 文件&#xff0c;算下来大概有 200 个文件&#xff0c;然后这个项目需要基于k8s进行私有化…

从零学Java List集合

Java List集合 文章目录 Java List集合1 List 集合2 List实现类2.1 ArrayList【重点】2.2 LinkedList2.3 Vector (已废弃) 3 数据结构: 栈, 队列 1 List 集合 特点&#xff1a;有序、有下标、元素可以重复。 有序: 添加与遍历的顺序是一致的;有下标: 可以使用普通for循环;元素可…

【NLP】多标签分类【上】

简介 《【NLP】多标签分类》主要介绍利用三种机器学习方法和一种序列生成方法来解决多标签分类问题&#xff08;包含实验与对应代码&#xff09;。共分为上下两篇&#xff0c;上篇聚焦三种机器学习方法&#xff0c;分别是&#xff1a;Binary Relevance (BR)、Classifier Chain…

实用Unity3D Log打印工具XDebug

特点 显示时间&#xff0c;精确到毫秒显示当前帧数&#xff08;在主线程中的打印才有意义&#xff0c;非主线程显示为-1&#xff09;有三种条件编译符(如下图) 注&#xff1a;要能显示线程中的当前帧数&#xff0c;要在app启动时&#xff0c;初始化mainThreadID字段条件编译符…

在App Store Connect上编辑多个用户的访问权限

作为一名编程新手&#xff0c;在App Store Connect中管理用户权限可能初听起来有些复杂&#xff0c;但实际上它是一个相对直接的过程。这里是一个步骤清晰的指南来帮助您在App Store Connect上编辑多个用户的访问权限。 App Store Connect 简介 在开始之前&#xff0c;让我们先…

爬虫网易易盾滑块及轨迹算法案例:某乎

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、滑块初步分析 js运行 atob(‘aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbg’) 拿到网址&#xff0c;浏览器打开网站&#xff0…

【低照度图像增强系列(3)】EnlightenGAN算法详解与代码实现

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…

如何降低成本,制作个性化电子产品宣传册呢

​随着科技的飞速发展&#xff0c;电子产品已经深入到我们生活的每一个角落。然而&#xff0c;如何让你的产品在众多竞争者中脱颖而出呢&#xff1f;制作一份个性化的宣传册&#xff0c;不仅可以吸引潜在客户&#xff0c;还能有效降低成本&#xff0c;提升销售效果。 一、明确目…

基于JAVA+SpringBoot的高校学术报告系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 智慧高校学术报告系统…

职场日常英语口语,成人英语培训学校,柯桥学英语推荐哪里

“玩手机”用英语怎么说&#xff1f;你的第一反应是不是&#xff1a;play the phone&#xff1f; 在英语中&#xff0c;play这个动词通常表示“玩耍、娱乐、操纵”等意思&#xff0c;而手机是一种工具&#xff0c;不是玩耍的对象。 换句话说&#xff0c;我们“玩手机”&#xf…

CUDA编程:执行模型

SM 在SM中&#xff0c;共享内存和寄存器是非常重要的资源。共享内存被分配在SM上的常驻线程 块中&#xff0c;寄存器在线程中被分配。线程块中的线程通过这些资源可以进行相互的合作和通 信。 WARP CUDA采用单指令多线程&#xff08;SIMT&#xff09;架构来管理和执行线程&am…