Istio学习笔记-体验istio

news2024/11/26 19:40:20

参考Istio 入门(三):体验 Istio、微服务部署、可观测性 - 痴者工良 - 博客园 (cnblogs.com)

在本章中,我们将会学习到如何部署一套微服务、如何使用 Istio 暴露服务到集群外,并且如何使用可观测性组件监测流量和系统指标。

本章教程示例使用的是 Istio 官方的一套微服务,这套微服务是一个在线书店,打开页面之后会看到一个分类、书的信息以及书的评论,页面的内容由不同的子服务提供。

书店微服务分为四个单独的微服务,在上图中已经使用红色方框画出来了。这四个微服务分别是:

  • productpage: 汇集所有服务的数据,生成浏览页面。
  • details:存储了书籍的信息,如描述、作者、出版社等。
  • reviews:存储了书籍相关的评论,但是不包含评分打星。
  • ratings:存储评论中的评分打星。

Productpage 服务对外提供 Web 访问页面,而且其它的三个服务只能在集群内部访问。四个服务分别采用了不同的语言开发,Productpage 聚合其它三个服务的信息生成一个页面。

预先准备

给这些示例服务创建一个命名空间。

kubectl create namespace bookinfo

给命名空间添加 Istio 的标签,指示 Istio 在部署应用(只对 Pod 起效)的时候,自动注入 Envoy Sidecar Proxy 容器:

kubectl label namespace bookinfo istio-injection=enabled

进入 Istio 安装目录。

使用 kubectl 部署应用到bookinfo :

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

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

检查

执行命令完成后,查看 bookinfo 命名空间下的 Pod。

kubectl get pods -n bookinfo

可以看到,每个 Pod 的 READY 属性都是 2/2 ,这表示该 Pod 中有两个容器,并且当前有两个容器已经就绪。

如果我们查看其中一个 Pod 的组成结构,会发现有 Pod 被塞进了一个 istio-proxy 容器。

kubectl -n bookinfo describe pod productpage-v1-564d4686f-cn5bb

接着使用 kubectl -n bookinfo get svc 查看 Service,四个微服务都已经被注册了 Service。

curl 10.105.180.245:9080

默认 Istio 不会开启零信任双向认证模式,因此在集群内可以自己访问应用。如果开启了 mTLS 双向认证模式,则只能在 Pod 中访问应用。

创建 productpage_tmpsvc.yaml 文件

touch productpage_tmpsvc.yaml

vim productpage_tmpsvc.yaml

apiVersion: v1
kind: Service
metadata:
  name: productpagetmp
  labels:
    app: productpage
    service: productpage
spec:
  ports:
  - port: 9080
    name: http
  selector:
    app: productpage
  type: NodePort

kubectl -n bookinfo apply -f  productpage_tmpsvc.yaml

kubectl -n bookinfo get svc

然后在页面中访问 31527 端口(大家的端口不一样,按自己的来)。

http://192.168.1.247:31527/productpage?u=normal  多次刷新

部署入口网关

什么是 Gateway

到体验 Istio 的时刻了,在本小节中,我们将会为 productpage 创建 Istio Gateway,对外提供网页访问。

我们已经部署了 istio-ingressgateway,这个组件起到了类似 nginx、apisix 的效果,对外提供端口访问,然后将流量转发到内部服务中。详见 istio学习笔记-安装-CSDN博客

但是 istio-ingressgateway 并不能直接转发流量到 Pod,它还需要进行一些配置。我们要为 productpage 创建一个站点,绑定对应的域名,这样外部访问 istio-ingressgateway 的端口时,istio-ingressgateway 才知道该将流量转发给谁。在 Istio 中,定义这种绑定关系的资源叫 Gateway

Gateway 类似 Nginx 需要创建一个反向代理时需要绑定的域名配置。

kubectl -n bookinfo apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

cat samples/bookinfo/networking/bookinfo-gateway.yaml

hosts 表示对外开放的访问路径,你可以绑定域名、IP 等。这里使用 * ,表示所有访问都可以进入此网关。

当我们创建 Istio Gateway 之后,istio-ingressgateway 会为我们监控流量,检测不同的域名或端口属于哪个 Istio Gateway 。

部署 VirtualService

什么是 VirtualService

虽然创建了 Istio Gateway,但是我们还不能直接通过网关访问到前面部署的微服务,我们还需要创建 Istio VirtualService 将 Istio Gateway 跟对应的 Kubernetes Service 绑定起来,然后流量才能正式流向 Pod。

请一定要注意这里,流量实际并不会经过 Service 中,但是 VirtualService 需要通过 Service 来发现 Pod。

这里类似 nginx 配置反向代理,配置监听之后,还需要指向将请求映射到哪个地址。

VirtualService 的主要目标是为服务提供稳定的入口地址,并通过配置一系列的路由规则来控制流量在网格内的行为。

就以最简单的路由区配来说,Kubernetes Service 是不支持路由规则的,而 Istio 可以通过指定路由后缀中;Service 不支持流量分析,负载均衡只有轮询。而 Istio 利用 Service 来发现 Pod,然后直接将流量转发到 Pod 中,可以实现各种功能。

VirtualService 可以用于实现以下功能:

请求路由:将请求路由到特定的服务或版本,例如将请求分发到不同版本的服务,以实现灰度发布或金丝雀发布。

请求重试:为失败的请求配置重试策略,以提高服务的可用性。

请求超时:设置请求的超时时间,以便在特定时间内没有得到响应时中断请求。

请求镜像:将请求的副本发送到另一个服务,用于测试新版本的服务,而不影响实际的生产流量。

流量分割:将流量按照特定的比例分发到不同的服务或版本,以实现流量控制。

执行

kubectl -n bookinfo apply -f samples/bookinfo/networking/bookinfo-gateway.yaml 时 已创建 VirtualService

这里的 YAML 分为两大部分,第一部分是 http.match,表示暴露了哪些 API 地址,外部访问时只能访问到这些地址。

可以通过 http.match 限制集群外部访问此地址时所能使用的 URL。

然后通过 http.route 绑定 Kubernetes Service ,通过 Service 中的服务发现,将流量转发到对应的 Pod 中。

host 这里,由于 VirtualService 跟 Service/Pod 在同一个命名空间中,所以只需要配置 Service 的名称即可,如果要跨命名空间访问,则需要加上完整的命名空间名称。

什么是 DestinationRule

DestinationRule是定义在路由发生后应用于服务的流量的策略。这些规则指定负载均衡的配置、sidecar的连接池大小以及离群值检测设置,以检测并从负载平衡池中清除不正常的主机。以上信息仅供参考,如有需要,建议您咨询专业技术人员。

Istio VistualService 中可以限制外部能够访问的路由地址,而 DestinationRule 则可以配置访问的 Pod 策略。可以为 Istio VistualService 绑定一个 Istio DestinationRule,通过 DestinationRule 我们还可以定义版本子集等,通过更加丰富的策略转发流量。

检查
添加环境变量 PATH

echo 'export ISTIO_HOME=/opt/istio-1.19.4' >> /etc/profile

echo 'export PATH=$PATH:$ISTIO_HOME/bin' >> /etc/profile

source /etc/profile

istioctl version

为了确保网关没问题,我们需要执行 Istio 命令查看日志:

istioctl analyze -n bookinfo

然后我们查看为 productpage 创建的网关。

kubectl get gw -A

然后查看 VistualService。

kubectl get vs -A

我们通过 Helm 部署了 istio-ingressgateway,其访问端口如下:

kubectl get svc -n istio-system

在本节部署 bookinfo-gateway 的时候,我们使用了端口 80,因此不需要另外配置 ,直接通过 istio-ingressgateway 的 32299 端口访问即可。

之前配置的是 8080 需要改为80

kubectl -n bookinfo delete -f samples/bookinfo/networking/bookinfo-gateway.yaml

vim samples/bookinfo/networking/bookinfo-gateway.yaml

kubectl -n bookinfo apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

kubectl get svc -n istio-system

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

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

相关文章

Vue CLI脚手架安装、搭建、配置 和 CLI项目分析

目录 一、CLI快速入门 1. 官方介绍 : 2.安装Vue CLI : 3.搭建Vue CLI : 4.IDEA配置Vue CLI : 二、Vue CLI项目分析 1.结构分析 : 1.1 config 1.2 node_modules 1.3 src 1.4 static 2.流程分析 : 2.1 main.js 2.2 router/index.js 2.3 components/HelloWorld.vue 2.4 A…

Vue3源码reactive和readonly对象嵌套转换,及实现shallowReadonly

前言 官方文档中对reactive的描述: 响应式转换是“深层”的:它会影响到所有嵌套的属性。一个响应式对象也将深层地解包任何 ref 属性,同时保持响应性。 官方文档中对readonly的描述: 只读代理是深层的:对任何嵌套属性的访问都将是…

城市内涝监测仪的作用有哪些?

城市内涝近几年愈发频繁,它的出现不仅仅会导致财产损失,还可能危及公共安全。所以对路面积水进行实时监测刻不容缓。内涝积水监测仪的早期警报系统,有助于提高城市的紧急响应能力。政府远程监控城市路面水位,实现精准的系统化管理…

SPL机制与使用,组件化技术核心点打法

什么是SPI SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。 SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加…

MySQL索引下推:提升数据库性能的关键优化技术

文章目录 前言索引下推原理MySQL 基础架构传统查询过程ICP 查询过程 使用场景限制参数配置索引下推开启状态查询索引下推开启和关闭 一些问题只有联合索引才能使用索引下推?下面的查询为什么不走索引下推 参考 前言 大家好,我是 Lorin ,今天…

教对象写代码

之前对象工作中需要获取地图上的一些数据, 手工找寻复制 费时费力, 逢此契机, 准备使用代码尽可能简化机械重复操作, 力图一劳永逸. 首选简洁易入门的Python. 下文就是对流程的总结, 及简述每步的意义. 并不Hack,重在感受编程的用途和基本工具的使用. 以百度地图为例,需求如下:…

大模型时代的机器人研究

机器人研究的一个长期目标是开发能够在物理上不同的环境中执行无数任务的“多面手”机器人。对语言和视觉领域而言,大量的原始数据可以训练这些模型,而且有虚拟应用程序可用于应用这些模型。与上述两个领域不同,机器人技术由于被锚定在物理世…

hive更改表结构的时候报错

现象 FAILED: ParseException line 1:48 cannot recognize input near ADD COLUMN compete_company_id in alter table statement 23/11/14 17:59:27 ERROR org.apache.hadoop.hive.ql.Driver: FAILED: ParseException line 1:48 cannot recognize input near ADD COLUMN compe…

身份证照片怎么弄成200k以内?超级好用!

一些网站为了限制大的文件上传,提出了一些大小限制的要求,那么身份证如何弄成200k呢?下面介绍三种方法。 方法一: 使用嗨格式压缩大师 1、在电脑上打开安装好的软件,在首界面中点击“图片压缩”。 2、进入后上传需要…

【MongoDB】索引 – 通配符索引

一、准备工作 这里准备一些数据 db.books.drop();db.books.insert({_id: 1, name: "Java", alias: "java 入门", description: "入门图书" }); db.books.insert({_id: 2, name: "C", alias: "c", description: "C 入…

OpenCV颜色识别及应用

OpenCV是一个开源计算机视觉库,提供了丰富的图像处理和计算机视觉算法,其中包括颜色识别。本文首先介绍了OpenCV库,然后着重描述了颜色识别的基本原理和方法,包括颜色空间的转换、阈值处理、颜色检测等技术。接下来详细探讨了Open…

【ccf-csp题解】第11次csp认证-第三题-Json查询超详细讲解

此题思路来源于acwing ccfcsp认证辅导课 题目描述 思路分析 此题的难点在于对输入的内容进行解析,题目中说除了保证字符串内容不会有空格存在之外,其它的任意地方都可能出现空格,甚至在某些地方还会出现空行,这样的话&#xff0…

spring-cloud-alibaba-nacos

spring cloud nacos 安装和启动nacos # 解压nacos安装包 # tar -zvxf nacos-server-1.4.1.tar.gz# nacos默认是以集群的模式启动,此处先用单机模式 # cd /usr/local/mysoft/nacos/bin # sh startup.sh -m standalone# nacos 日志 # tail -f /usr/local/mysoft/na…

reactive和effect,依赖收集触发依赖

通过上一篇文章已经初始化项目,集成了ts和jest。本篇实现Vue3中响应式模块里的reactive方法。 前置知识要求 如果你熟练掌握Map, Set, Proxy, Reflect,可直接跳过这部分。 Map Map是一种用于存储键值对的集合,并且能够记住键的原始插入顺…

数据结构与算法【链表:一】Java实现

目录 链表 单向链表 哨兵链表 双向链表 环形链表 链表 链表是数据元素的线性集合,其每个元素都指向下一个元素,元素存储上并不连续。 随机访问性能 根据 index 查找,时间复杂度 O(n) 插入或删除性能 起始位置:O(1)结束位…

docker命令大全

1、查看Docker 容器占用的空间 docker ps -s2、查看所有容器 docker ps -a3、启动、关闭、重启一个已存在的容器 docker start <容器ID> docker stop <容器ID> docker restart <容器ID> 4、进入容器&#xff0c;退出终端的时候不会关闭container的ma…

自学SLAM(8)《第四讲:相机模型与非线性优化》作业

前言 小编研究生的研究方向是视觉SLAM&#xff0c;目前在自学&#xff0c;本篇文章为初学高翔老师课的第四次作业。 文章目录 前言1.图像去畸变2.双目视差的使用3.矩阵微分4.高斯牛顿法的曲线拟合实验 1.图像去畸变 现实⽣活中的图像总存在畸变。原则上来说&#xff0c;针孔透…

IC行业秋招真实情况记录,快来看看吧~

2023年&#xff0c;IC行业人才竞争尤为激烈。为了更好的获取到面试的经验&#xff0c;不妨先来了解一下IC面试常见的问题&#xff0c;以及面试该准备的相关事项吧~ &#xff08;文末可领全部面试题目&#xff09; 什么是同步逻辑和异步逻辑&#xff1f; 同步逻辑是时钟之间…

ef core code first pgsql

在使用efcode来操作pgsql的时候&#xff0c;总有些基础配置流程项目建立完之后后面就很少用&#xff0c;总是忘掉&#xff0c;写个文档记忆一下吧。基于net 6.0。 1.创建一个mvc项目和一个EF类库 2.在类库里面安装依赖dll Microsoft.EntityFrameworkCore.Design 需要添加的…

ARPG----C++学习记录05 Section12 动画蒙太奇,收拿剑,MetaSound,调整动画

代码更新 https://github.com/BAOfanTing/ARPG_Game_Code/commit/c629270e49496ba1bcbaf03780d23c1842ca5e7a Animation Montages动画蒙太奇 蒙太奇的工作流程 新建一个鼠标左键的按键映射&#xff0c;下载一些攻击动画&#xff0c;重定向给我们的人物&#xff0c;新建一个动画…