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

目录

一、前言

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

二、准备工作

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

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

我看有博文上有显示pilot 的pod,我还还怀疑是我少安装了pilot,找了一圈也没发现怎么安装pilot。

后面再安装了kiali 之后,在调用中又看到了如下的报错:

javascript 复制代码
PassthroughCluster

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

javascript 复制代码
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的方法,如下所示:

javascript 复制代码
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的如下方法:

javascript 复制代码
kubectl edit svc istio-ingressgateway -n istio-system

kubectl 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 批量发送请求

javascript 复制代码
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双向传输安全
相关推荐
苹果醋31 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader1 小时前
深入解析 Apache APISIX
java·apache
菠萝蚊鸭2 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
旭东怪2 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
007php0072 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
∝请叫*我简单先生2 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl
ssr——ssss2 小时前
SSM-期末项目 - 基于SSM的宠物信息管理系统
java·ssm
一棵星2 小时前
Java模拟Mqtt客户端连接Mqtt Broker
java·开发语言
鲤籽鲲3 小时前
C# Random 随机数 全面解析
android·java·c#
荆州克莱3 小时前
mysql中局部变量_MySQL中变量的总结
spring boot·spring·spring cloud·css3·技术