k8s istio 集成 多版本应用服务 和 网格监测

news2024/10/7 19:21:21

说明

博客文章地址:https://blog.taoluyuan.com/posts/istio-getting-started/
本主要是内容:

  1. 使用 istioctl 安装 istio
  2. 采用 istio 官方提供 的 应用bookinfo,实现多版本的服务应用部署
  3. istio 网关 gateway,vs,dr 的基本使用
  4. 利用监测工具 prometheus,grafana,jaeger 查看 istio 的监控数据

文章提到的yaml,也是istio官方提供的,整理后单独放到github github k8s-istio-practice
根目录 makefile 集成了相关命令,你们可以直接通过 makefile 安装 service,gateway,vs,dr,监控,以实现跟文章一样的效果

istio

官方文档:https://istio.io/latest/zh/docs/

安装

参考官方安装文档:官方demo配置组合安装文档

  1. 采用 demo 配置组合,它包含了一组专为测试准备的功能集合
 	curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.17.2 sh - && \
 	cd istio-1.17.2 && \
 	export PATH=$PWD/bin:$PATH && \
     istioctl install --set profile=demo
  1. 给命名空间添加标签,指示 在 default命名空间 部署应用的时候,自动注入 Envoy
kubectl label namespace default istio-injection=enabled
  1. 安装的istio相关资源在 istio-system 命名空间下,可以通过以下查看安装的资源
k get all -n istio-system

bookinfo 应用程序

bookinfo 架构及介绍

bookinfo 由四个单独的微服务构成 ,以下是官方对bookinfo的介绍,也可以直接看官方文档 istio-bookinfo

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

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

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

reviews 微服务有 3 个版本:

  • v1 版本不会调用 ratings 服务

  • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。

  • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。

安装bookinfo

官方提示安装 bookinfo的命令

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

bookinfo.yaml 的istio 源码地址在 bookinfo

我将同名文件 bookinfo.yaml 下载后, 放到了本仓库的根目录 可以在 本地
执行

kubectl apply -f ./bookinfo.yaml 

或者 make

make install-bookinfo

文章后面关于 yaml 的文件,我都会将官方的yaml下载到本地,演示也是用本地的yaml,方便大家查看

验证安装的服务

  1. 上面的命令会启动全部的四个服务,其中也包括了 reviews 服务的三个版本(v1、v2 以及 v3)
  2. 确认 service和pod 都启动成功
kubectl get services
kubectl get pods
  1. 确认bookinfo 接口服务 是否正常
kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"

上面命令步骤为:

  1. 通过 kubectl get pod -l app=ratings -o jsonpath=‘{.items[0].metadata.name}’ 获取到 ratings 服务的pod名称
  2. 通过 kubectl exec -it $(…) -c ratings 进入到 ratings 容器中
  3. 通过 curl productpage:9080/productpage 来访问 productpage 服务,并且通过 grep -o “.*” 来查看返回的页面的title,如果返回有值,说明服务正常
  4. bookinfo.yam 的 service port 里面定义了 9080,所以可以通过 productpage:9080/productpage 来访问 productpage 服务

注意:

源码,bookinfo里面调用是用的短名称,建议您在生产环境中指定完全限定的主机名,比如 productpage.default.svc.cluster.local

对外开放bookinfo 服务

Service 的默认类型是 ClusterIP,目前 bookinfo 只是集群内部的服务,外部无法访问
需要创建一个 Gateway 和 VirtualService 来对外开放服务

安装 Gateway 和 VirtualService

kubectl apply -f ./bookinfo-gateway.yaml

或者 make

make install-bookinfo-gateway
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

通过以下命令查看 Gateway 和 VirtualService 是否创建成功

kubectl get gateway
kubectl get virtualservice

可以看到 有一个 bookinfo-gateway 和 bookinfo 的 VirtualService

修改 istio-ingressgateway 为 NodePort

通过以下命令获取到 ingressgateway 的 ip

kubectl get svc istio-ingressgateway -n istio-system

istio-ingressgateway默认的服务类型是LoadBalancer,我是本地机器安装的k8s,修改 istio-ingressgateway type LoadBalancer 为 NodePort,port: 80 映射为 port: 30080
可以通过 nodeip:30080/productpage 来访问 bookinfo 服务

kubectl edit svc istio-ingressgateway -n istio-system

上面命令 会打开一个vim 编辑器,你需要修改 type 为 NodePort,并且将 修改 port: 80 映射为 port: 30080
查看修改结果

kubectl get svc istio-ingressgateway -n istio-system

显示类似为

NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                      AGE
istio-ingressgateway   NodePort   10.43.249.207   <none>        15021:30177/TCP,80:30080/TCP,443:30068/TCP,31400:30163/TCP,15443:30184/TCP   43d

访问 bookinfo 服务

上面已经将 istio-ingressgateway 的type 设置为 NodePort,并且将 port: 80 映射为 port: 30080
可以直接通过 k8s 节点的 ip 和 port 来访问 bookinfo 服务了
我的集群ip是 192.168.31.180,所以可以通过 http://192.168.31.180:30080/productpage 访问bookinfo 服务,需要将ip,prot 替换成自己的

如官网所说,多刷新几次应用的页面,就会 看到 productpage 页面中会随机展示 reviews 服务的不同版本的效果(红色、黑色的星形或者没有显示)。reviews 服务出现这种情况是因为还没有使用 Istio 来控制版本的路由。

可视化网格监控

安装 istio Telemetry Addons

istion 和几个遥测应用都做了集成:kiali,jaeger,prometheus,grafana ,可以通过这些工具来监控 istio 的网格

istio Telemetry Addons相关源码位置在 istio Telemetry Addons

我将 istio Telemetry Addons 其中的 jaeger,prometheus,grafana,kiali 相关的yaml文件放在 仓库 addons 目录下,可以通过以下命令安装

kubectl apply -f ./addons

或者

make install-telemetry-addons

等待安装完成后,通过以下命令查看kiali 是否部署完成

kubectl rollout status deployment/kiali -n istio-system

istio 官方文档说,采样率默认是 1%,所以要想查看追踪数据在第一个跟踪可见之前,您需要发送至少 100 个请求。 使用以下命令向 productpage 服务发送 100 个请求,需要注意将ip,prot 替换成自己的

for i in `seq 1 100`; do curl -s -o /dev/null http://192.168.31.180:30080/productpage; done

或者 make,需要将makefile 中的GATEWAY_URL 替换成自己的

make send-100-request

使用 kiali 监控网格

使用以下命令打开 kiali,会自动打开浏览器

istioctl dashboard kiali

使用 jaeger 监控网格

使用以下命令打开 jaeger,会自动打开浏览器

istioctl dashboard jaeger

使用 grafana 监控网格

使用以下命令打开 prometheus,会自动打开浏览器

istioctl dashboard grafana

总结

istio 部署多版本应用 和 可视化网格监控 已完成
文字有点多,但是操作起来很简单,我将所有的 yaml 文件都放在了仓库中github k8s-istio-practice,将所有的命令都写在了 makefile 中,只需要执行以下:

  1. 安装 istio
make install-istio
  1. 部署 bookinfo 应用
make install-bookinfo
  1. 部署网关和路由
make install-bookinfo-gateway
  1. 修改 istio-ingressgateway 为 NodePort
    执行以下命令 修改 istio-ingressgateway 为 NodePort,并且将 port: 80 映射为 port: 30080
kubectl edit svc istio-ingressgateway -n istio-system
  1. 访问 bookinfo 服务
    通过 k8s 节点的 ip 和 port 来访问 bookinfo 服务了,需要将ip,prot 替换成自己的
  http://192.168.31.180:30080/productpage
  1. 通过 监测工具监控网格
  • 安装 istio Telemetry Addons
make install-telemetry-addons
  • 打开 kiali
istioctl dashboard kiali

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

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

相关文章

关于EMC Unity 存储系统DIMM内存的几个问题

下面是客户咨询最多的几个关于EMC Unity的DIMM内存的问题&#xff0c;供大家参考。 1. Unity存储能否自己扩容内存 有客户觉得Unity存储的内容太小&#xff0c;想自己扩容内存&#xff0c;很朴实的想法&#xff0c;原来是每个控制器3条16gb&#xff0c;能不能升级到3条32gb或…

基于Mybatis-Plus拦截器实现MySQL数据加解密

一、背景 用户的一些敏感数据&#xff0c;例如手机号、邮箱、身份证等信息&#xff0c;在数据库以明文存储时会存在数据泄露的风险&#xff0c;因此需要进行加密&#xff0c; 但存储数据再被取出时&#xff0c;需要进行解密&#xff0c;因此加密算法需要使用对称加密算法。 常…

Unreal5 第三人称射击游戏 射击功能实现1

状态机的缓存 状态机缓存功能相当于我们只需要实现一次&#xff0c;可以在多个地方引用&#xff0c;也可以在别的状态机里面使用&#xff0c;而不是在里面再重新写一遍相应的功能。 我们可以在基础状态机的链接拉出一条线&#xff0c;搜索“缓存” 第一个就是新保存的缓存姿势…

Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二)

提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二) 冯一川注:GLSL其实也是不断迭代的,比如像3.3版本中,基本数据类型浮点型只支持float型,而GLSL4.0版本开始就…

chatgpt赋能python:Python单位换算—让编程更精确的工具

Python单位换算—让编程更精确的工具 作为一名10年经验的Python工程师&#xff0c;我深深认识到在各种计算机领域的重要性。它可以帮助我们进行大量数据的计算和转换&#xff0c;其中的单位换算是其中一个重要的子领域。 单位换算对编程的重要性 无论是在科学研究还是工业生…

序贯最小二乘平差 VS 卡尔曼滤波

文章目录 Part.I IntroductionPart.II 概念比较Chap.I 序贯最小二乘平差Chap.II 卡尔曼滤波Chap.III 比较 Reference Part.I Introduction 序贯最小二乘平差和卡尔曼滤波有些相似&#xff0c;但是还是有一些区别&#xff1a; 序贯最小二乘平差用来处理静态数据&#xff0c;也…

层次多尺度注意力用于语义分割

层次多尺度注意力用于语义分割 HIERARCHICAL MULTI-SCALE ATTENTION FOR SEMANTIC SEGMENTATION https://arxiv.org/pdf/2005.10821.pdf 摘要 多尺度推断通常用于提高语义分割的结果。多个图像尺度通过网络传递&#xff0c;然后使用平均或最大池化方法将结果组合起来。在本文…

活用Excel高级筛选解决实际问题

一朋友遇到一个难题&#xff1a;一个电子行业文档&#xff0c;数据中有一项为输出电压&#xff0c;有固定值比如24V、48V等&#xff1b;也有范围值比如10V-60V或者40V-50V&#xff0c;数据不规则&#xff0c;且数量庞大。需要对数据进行分析&#xff0c;筛选出有效数据&#xf…

Spring Bean生命周期之(1)BeanDefinition

文章目录 1 BeanDefinition1.1 Spring Bean 读取解析配置信息1.1.1 XML 配置的处理主要使用的事例1.1.2 注解 BeanDefinition 解析示例 1.2 spring bean 注册阶段1.3 Spring BeanDefinition 合并阶段1.3.1 BeanDefinition 合并示例1.3.2 源码分析 1 BeanDefinition 在spring b…

机器学习——线性回归篇

基本概念 什么是回归预测&#xff1f;什么是分类预测&#xff1f; 模型输入变量预测结果应用回归预测实值离散一个连续值域上的任意值预测值的分布情况分类预测实值离散两个或多个分类值将输入变量分类到不同类别 思考一个问题&#xff1a;分类问题是否可以转变为回归问题&am…

百度商业AI技术创新大赛启动-63万元奖金!

随着生成式AI在全球范围的热议&#xff0c;AIGC前沿技术也在快速迭代&#xff0c;正如百度CEO李彦宏所说“人工智能发生了方向性改变&#xff0c;从辨别式AI走向生成式AI&#xff0c;生成式AI会带来极大的效率提升”。而这一领域的发展&#xff0c;将推动AI产品应用深化&#x…

两个震子如何调整发送信号时间差来调整波束

ΔΦ 2π/λdsinθ 这个式子中 d是振子的距离不变 λ是波长可以根据频率知道...所以要控制θ 就要控制两个振子的相位差 也就是控制振子a与振子b的时间差就能控制θ 30mhz的带宽与相位偏差的影响 ΔΦ 2π/λdsinθ 频率900hmz 波长300/9000.333 频率930hmz 波长300/9300…

t-SNE(t-stochastic neighourhood embedding) 数据降维及可视化

文章目录 算法原理示例一示例二 算法原理 t-SNE 的基本思想是将高维数据映射到低维空间&#xff0c;同时保留数据间的局部结构。具体而言&#xff0c;给定一个高维数据集 X { x 1 , … , x n } \mathbf{X}\{\mathbf{x}_1,\dots,\mathbf{x}_n\} X{x1​,…,xn​}&#xff0c;其…

macm1环境下IDEA项目切换jdk版本

macm1环境下IDEA项目切换jdk版本 本文目录 macm1环境下IDEA项目切换jdk版本背景需求下载对应版本jdk配置IDEA中指定项目的JDK版本配置 Project Structure配置 Settings 可能报错同时安装JDK8和JDK17并切换 背景需求 项目基于 springboot3.0.7Nacos2.2.3seata1.6.1 由spring官…

TensorFlow2安装备忘

系统配置 Ubuntu18.04 Anaconda4.9.2 Cuda10.0Cudnn7.6.5 CPU版本 执行pip install tensorflow默认安装的是CPU版本&#xff0c;并且安装后会有较多import依赖问题&#xff0c;部分记录如下&#xff0c;基本都属于"No module named xxxx"。 1.找不到wrapt 通过…

【23】SCI易中期刊推荐——神经网络科学及机器人学(中科院3区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

面试官:useEffect和useLayoutEffect有什么区别?

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ Effect数据结构 顾名思义&#xff0c;React底层在函数式组件的Fiber节点设计中带入了hooks链表的概念&#xff08;memorizedState&#xff09;&#xff0…

博弈论——巴什博弈(C++)

博弈论&#xff08;C&#xff09; 前言例题&#xff1a;拍卖会题目描述输入输出格式输入格式&#xff1a;输出格式&#xff1a; 输入输出样例输入样例#1&#xff1a;输出样例#1&#xff1a; 例题的解&#xff1a;巴什博奕&#xff08;Bash Game&#xff09;&#xff1a;代码&am…

CEPH部署

//存储类型 块存储 一对一&#xff0c;只能被一个主机挂载使用&#xff0c;数据以块为单位进行存储&#xff0c;典型代表&#xff1a;硬盘 文件存储 一对多&#xff0c;能被多个主机同时挂载使用&#xff0c;数据以文件的形式存储的&#xff08;元数据和实际数据是分开存储…

【30】核心易中期刊推荐——人工智能图像处理

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…