Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

虚幻大学 xuhss 144℃ 0评论
文章目录 显示

? 优质资源分享 ?

学习路线指引(点击解锁) 知识定位 人群定位
? Python实战微信订餐小程序 ? 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
?Python量化交易实战? 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

前言:接上一篇istio应用部署及服务间调用,本文介绍通过构建.netcore与springboot简单服务应用,实现服务间调用及相关路由控制等

1、.netcore代码介绍及应用部署

  • 新建.netcore webapi服务项目,添加简单服务调用方法(getStrByServiceName与getStrByIPAddress),返回默认字符串方法getDetaultStr

7c742c7ff96101db50e42ebe4e09ae6a - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
ce0c27ae3851c1d770e1f067ac9aa573 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 通过我们前面文章《Azure 实践(3)- Azure Devops构建.netcore项目,打包Docker镜像+运行容器部署》,打包我们的服务应用,并构建镜像推送到docker hub中,构建Tag为45的镜像

b943b49d6199eb6f5c97ccfa836f69de - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 创建netapp-1nodes.yaml文件,构建应用netapp及k8s svc service对外提供服务访问

6d11bd730d30fcc028a7c67351e0c9d0 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 创建命名空间netistiodemo,并设置istio自动注入:
  sudo kubectl create namespace netistiodemo
  sudo kubectl label namespace netistiodemo istio-injection=enabled
  sudo kubectl get ns netistiodemo --show-labels # 查看注入状态
  • 创建应用(namespace:netistiodemo):
  sudo kubectl apply -f netapp-1nodes.yaml -n netistiodemo
  • 创建netapp-destination.yaml并创建DestinationRule
  sudo kubectl apply -f netapp-destination.yaml -n netistiodemo

45e81f1a938a17a0c659597d3828847f - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 创建Gateway & VirtualService
  sudo kubectl apply -f nettapp-vs-v1.yaml -n netistiodemo

5731e0950c5d3b0601489d4f6f826cf4 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • GateWay设置的port端口为81,由于istio-ingressgateway的80端口,我们已经开放对应了springbootapp应用,所以我们要给istio-ingressgateway添加端口映射,映射到netapp应用上,我们可以通过rancher管理工具添加端口映射,当然你也可以通过编辑istio-ingressgateway的yaml文件来添加端口映射

8564acfb689fbc60968781e046dff2a7 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 这样,我们就通过多个gateway来访问不同命名空间的应用(k8s节点ip+端口31381)来访问netapp;(k8s节点ip+端口31380)来访问springbootapp

73cc214c0d05e78749c4d1f85e2da1a6 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
7cfb89c4eb1b77d42965a01a0f6f5d27 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

2、springboot代码介绍及应用部署

  • springboot服务项目,参考我以前的dubbo实践代码,这里只展示我们要用的简单的webapi服务

d5780c1cab683814bea4b7402fdebcdf - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 部署应用参考前面两篇文章,都是基于这个应用部署的,使用到2个版本;这里省略部署步骤(命名空间:springistiodemo)

a246aae8bb1b927b64424a99bf5fe82b - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

3、springboot应用与.netcore服务应用调用介绍

  • 我们可以通过netapp的方法(getStrByServiceName与getStrByIPAddress)来调用springbootapp的hello服务方法
  • 我通过管理工具kiali的服务调用链路图来展示服务调用关系;有蓝色线的是情况1,纯绿色先的是情况2

dbf69d08079bd6689c199e3b0161fb07 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

4、路由控制

  • 配置1:修改springbootapp-vs-v1.yaml文件,添加不同命名空间的应用服务的配置,添加多个gateway

a6292a6fb45b882cbf8019b2b58fd0d3 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 说明:
  gateway:springbootapp-gateway为同namespace的gateway;netistiodemo/netapp-gateway为netistiodemo空间的gateway,格式【命名空间】/【gateway名】
  match:uri prefix前缀匹配,将以/net/、/netcore/为前缀的请求,映射到netapp服务上;请求规则支持exact(完全匹配),prefix(前缀匹配)、regex(正则匹配)三种匹配方式
  host:netapp-svc.netistiodemo.svc.cluster.local,指向namespace为netistiodemo的.netcore服务中,格式【service svc】+【命名空间】+ 【默认:svc.cluster】 + 【集群名称】
  • 路由结果(两个gateway的监听端口【31380&31381】均可访问),并且不同的uri前缀(/net/ 与/netcore/)都定位到了服务

30d9a36c91726fa5b75f759c7e24126b - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
e9167dba9aaed9de5e7835891ae42b1c - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 配置2:路由直接匹配到应用服务具体的服务上(netapp应用的api/Query/getDetaultStr服务)

a6ec8e14e76adb5d273f56ea5ec45ff3 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
4022c6832776c7d95db5b79ce56ea083 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 配置3:通过添加spring的前缀,定位到本namespace的springbootapp应用上

c56e1b36eafb7ae4abb633de3b3d478d - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
d8638926f361fff918d4f6daaff6151b - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 配置4:如无路由匹配规则(无前缀匹配),则直接定位到netcoreapp上

b6a8fccf72cb2a704f3214c75caead27 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
2924a975cce85b72adc2071de213e600 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • Istio virtual service文件springbootapp-vs-v1.yaml详情:
  apiVersion: networking.istio.io/v1alpha3
  kind: VirtualService
  metadata:
    name: springbootapp-v1
  spec:
    hosts:
    - "*"
    gateways:
    - springbootapp-gateway
    - netistiodemo/netapp-gateway
    http:
    - fault:
        delay:
          fixedDelay: 1s
          percent: 100
      match:
      - uri:
          prefix: /net/
      - uri:
          prefix: /netcore/
      rewrite:
        uri: /
      route:
      - destination:
          host: netapp-svc.netistiodemo.svc.cluster.local
          port:
            number: 8081
          subset: v1
    - match:
      - uri:
          exact: /netdefault
      rewrite:
        uri: /api/Query/getDetaultStr
      route:
      - destination:
          host: netapp-svc.netistiodemo.svc.cluster.local
          port:
            number: 8081
          subset: v1
    - match:
      - uri:
          exact: /redirect
      redirect:
        authority: springbootapp-svc
        uri: /hello
    - match:
      - uri:
          prefix: /spring
      rewrite:
        uri: /
      route:
      - destination:
          host: springbootapp-svc
          port:
            number: 8080
          subset: v1
        weight: 70
      - destination:
          host: springbootapp-svc
          port:
            number: 8080
          subset: v2
        weight: 30
      timeout: 5s
    - route:
      - destination:
          host: netapp-svc.netistiodemo.svc.cluster.local
          port:
            number: 8081
          subset: v1

5、服务调用实践

  • 通过netapp的服务/api/Query/getStrByServiceName传入服务名端口等信息访问springbootapp应用的hello服务;可以看到可以访问到springbootapp的v1和v2版本服务

b7f1c7bfb55e4c4f9c8e436ab1f3f4f6 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
690660c1ee82c2b54db8c2d95c124113 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
98598b6bad0112a651882d1488c0a743 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 通过netapp的服务/api/Query/getStrByIPAddress传入IP端口等信息访问springbootapp应用的hello服务;可以看到可以访问到springbootapp的v1和v2版本服务

bde96b321125b2661f7e2ef596580da3 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

  • 通过访问springbootapp的svc对外访问端口也可以实现服务调用,且遵循Istio流量规则

437cfab45bb2753f6d829b28f5e07e75 - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
303a5728a182fd73ad5712cc9bb40efc - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)
589d8ef95c2e13d5020f475d5d34704b - Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

转载请注明:xuhss » Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

喜欢 (0)

您必须 登录 才能发表评论!