当前位置: 首页 > news >正文

istio实战:springboot项目在istio中服务调用

目录

  • 一、前言
  • 二、准备工作
  • 三、问题排查
  • 四、总结
  • 参考资料

一、前言

在经过前面几天k8s和Istio的安装之后,开始进入最核心的阶段。微服务在抛弃传统的服务注册和服务发现之后,是怎么在istio怎么做服务间的调用的呢?本次实战花费了我2-3天的时间,经过不断的尝试,折腾,最后终于把服务间的调用调通了。下面我将介绍我本次的实践过程,希望对于同样在研究这个技术有困难的同学提供一定的帮助。

二、准备工作

对应不熟悉的技术,我也是首先找了这方面的博文。我本次也是参考如下两篇博文进行实践的:

  1. istio gateway入口流量路由管控
  2. istio 访问网格内的服务(路由管理)
    对于第一篇博文还是比较顺利的,问题就出在第二篇博文。在最关键的那一步服务间的调用,出现问题了,报错日志如下:
upstream connect error or disconnect/reset before headers. reset reason: connection failure, transport failure reason: delayed connect error: 111 

我看有博文上有显示pilot 的pod,我还还怀疑是我少安装了pilot,找了一圈也没发现怎么安装pilot。
后面再安装了kiali 之后,在调用中又看到了如下的报错:

PassthroughCluster

然后又经过一阵折腾,又报了如下的错误:

503 Service Unavailable: [no body]

后面我还咨询了博主本人,问是不是spring项目中需要加spring-cloud-kubernetes 依赖,然后博主还回复我了不需要这个,用的就是istio的 LoadBalancer。

三、问题排查

几个关键点如下:

  1. ingressgateway 的类型
    istio 安装时使用istioctl install --set profile=demo -y 安装的时候ingressgateway 默认安装的类型就是LoadBalancer,后面我为了方便访问我改完了NodePort。通过上面博主的提示,然后我看他博文里面ingressgateway 的类型确实为LoadBalancer,于是我就将它改过来了,然后我看他的EXTERNAL-IP 是“localhost” 于是我也将我的ingressgateway 的EXTERNAL-IP 改为了本机IP,如下图所示:
    在这里插入图片描述
  2. istio-springboot-demo-b服务是否正常
    当我安装istio-springboot-demo-a服务的方式部署完istio-springboot-demo-b后,发现istio-springboot-demo-b并不能正常访问。我才发现istio-springboot-demo-a项目的端口是8080,这是微服务默认的端口,istio-springboot-demo-b服务在容器里面配的是8081,但是我在微服务项目里面并没有配置这个端口,于是我加上配置重新打包镜像。至于怎么通过容器端配置修改服务的端口我后面再研究。

3.服务间调用通过IP是否能调用通
当我在阅读如下博文Istio(十二):Istio问题排查的之后,我查看了我的springboot-demo-b服务的情况,如下图所示
在这里插入图片描述
在这里插入图片描述
于是服务间调用我通过POD IP可以正常调用,如下图所示:
在这里插入图片描述
然后我又通过SVC IP也可以正常调用,如下图所示:
在这里插入图片描述
在我写本文之前SVC 端口是8081,后面我将SVC 端口IP换成了80,
后面又通过服务名+端口也可以正常调用了,如下图所示:
在这里插入图片描述
最后,我将SVC 端口8081改为80就大功告成了(80端口可以省略,同命名空间调用.svc.cluster.local也可以省略)

四、总结

通过本次实验,掌握了通过命令修改SVC type和externalIPs的方法,如下所示:

kubectl patch service kiali -n istio-system -p '{"spec":{"type":"NodePort"}}'
kubectl patch svc istio-ingressgateway --namespace istio-system --patch '{"spec": { "externalIPs": ["192.168.1.29"] }}'

还包括kubectl的如下方法:

kubectl edit svc istio-ingressgateway -n istio-systemkubectl get pod istio-springboot-demo-b-v1-6859cf6699-nrl4r -n istio-demos -o json kubectl describe pod istio-springboot-demo-b-v1-5c789bf465-72f4c -n istio-demos

另外学会了xshell 批量发送请求

for i in $(seq 1 100); do curl -s -o /dev/null "http://192.168.1.29:32207/productpage"; done

参考资料

  1. istio 访问网格内的服务(路由管理)
  2. istio gateway入口流量路由管控
  3. Istio(十二):Istio问题排查
  4. istio服务案例实践
  5. 在 Istio 中调试 503 错误
  6. OpenShift 4 之Istio-Tutorial (8) 在服务之间配置Mutual TLS双向传输安全
http://www.lryc.cn/news/306150.html

相关文章:

  • 随机分布模型
  • Visual Studio:Entity设置表之间的关联关系
  • 每日五道java面试题之spring篇(二)
  • 287.【华为OD机试真题】字符串序列判定(贪心算法—JavaPythonC++JS实现)
  • Sentinel微服务流量治理组件实战上
  • Three.js加载PLY文件
  • chrome闪退后打不开问题 打开立即闪退
  • Slave被误写入数据如何恢复到主库
  • kafka生产者
  • 前后端分离Vue+node.js在线学习考试系统gqw7o
  • 关于el-select值的回显问题 : 框内显示label值还是value值
  • MCU多核异构通信原理
  • 在autodl搭建stable-diffusion-webui+sadTalker
  • 【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)
  • 机器学习:SVM算法(Python)
  • 基于yolov5的人脸口罩检测,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】
  • 2024如何恢复旧版的Chrome的主题样式
  • 【文生视频】Diffusion Transformer:OpenAI Sora 原理、Stable Diffusion 3 同源技术
  • Redis 服务集群、哨兵、缓存及持久化的实现原理和应用场景
  • 通过Redis增减库存避坑
  • Windows系统搭建Elasticsearch引擎结合内网穿透实现远程连接查询数据
  • Java爬虫使用JSoup获取静态资源图片
  • LeetCode 2433.找出前缀异或的原始数组
  • C++面试:系统网络性能评估与优化
  • Java适配器模式 - 灵活应对不匹配的接口
  • [ai笔记12] chatGPT技术体系梳理+本质探寻
  • Elasticsearch:使用 ELSER v2 进行语义搜索
  • 智慧农业之智能物流
  • Redis主从、哨兵、Redis Cluster集群架构
  • Javascript 运算符、流程控制语句和数组