Istio实践(2)-流量控制及服务间调用

虚幻大学 xuhss 153℃ 0评论

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

前言:接上一篇istio应用部署,本文介绍通过virtualservice实现流量控制,并通过部署client端进行服务调用实例

1. 修改virtualservice组件,实现权重占比访问不同版本服务(v1版本70%,v2版本30%)

  • 拆分流量使用weight关键字来设置,70%的流量走v1版本,30%的流量走v2版本

2cd7da17a887035fe59feaa523859b1d - Istio实践(2)-流量控制及服务间调用

  • 输入命令,重新应用一下virtualservice组件
  sudo kubectl apply -f springbootapp-vs-v1.yaml -n springistiodemo

53642f1d12bfdf35667f0e14bc7704ca - Istio实践(2)-流量控制及服务间调用

  • 通过kiali管理界面,查看服务调用详情,可以看到v1版本访问占比大概达到70%左右

726fa4995020b603864560ae93f13fff - Istio实践(2)-流量控制及服务间调用

2. 超时时间设置,timeout:0.002s

  • 修改virtualservice的yaml文件,添加timeout属性,数值改小一些,方便测试

fadffa06d5ae057100d10f0a92e69f6e - Istio实践(2)-流量控制及服务间调用

  • 访问服务,不断刷新,发现有一部分服务已超时,访问不到

b6d3186dff9f8d7f36f5bb0252141940 - Istio实践(2)-流量控制及服务间调用

  • 通过kiali管理界面,查看服务调用详情,发现v2版本已100% error

c9f0977986c62fd05e42ed713153f28c - Istio实践(2)-流量控制及服务间调用

3. 服务间调用:运行busybox容器客户端,访问springbootapp应用服务

  • 新建一个busybox的客户端资源,与应用不在同一命名空间中,当然也可以在同一命名空间中;创建命名空间istioclient,并设置istio自动注入
  sudo kubectl create namespace istioclient
  sudo kubectl label namespace istioclient istio-injection=enabled
  sudo kubectl get ns istioclient --show-labels # 查看注入状态

0a93624aeb5b31861804be77b0787c8a - Istio实践(2)-流量控制及服务间调用

  • client文件busybox-client.yaml内容
  apiVersion: apps/v1
  kind: Deployment
  metadata:
  name: busyclient
  # namespace: istioclient
  spec:
  replicas: 1
  selector:
    matchLabels:
    app: busyclient
  strategy:
    rollingUpdate:
        maxSurge: 25%
        maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
        labels:
        app: busyclient
        version: v1
      spec:
        containers:
        - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent  # 不存在才拉取镜像,默认值
        command: [ "/bin/sh", "-c", "sleep 3600" ]

b7b3b5591343d6793aee8e219927d0e3 - Istio实践(2)-流量控制及服务间调用

  • 执行命令,创建Deployment:
  sudo kubectl apply -f busybox-client.yaml -n istioclient
  • 查看pod
  sudo kubectl get pods -n istioclient

f07e3fe6bdb861a92a13907e45738796 - Istio实践(2)-流量控制及服务间调用

  • 进入客户端容器中,访问springbootapp服务
  sudo kubectl exec -it busyclient-5f6b7b954d-9wq5q /bin/sh -n istioclient

de055e04960e6bace2b0f34ba50d0be6 - Istio实践(2)-流量控制及服务间调用

  • 访问springbootapp服务
  wget -q -O - http://springbootapp-svc.springistiodemo:8080/hello

e7e14ebf73a5661c181e4c6b9b6ec9a2 - Istio实践(2)-流量控制及服务间调用

说明:
  1.上述服务格式[servicename].[namespace]:[port]/[action]
  客户端与服务不在同一命名空间下,使用上述格式访问服务,参考k8s的namespace隔离机制
  2.如在同一命名空间下,则直接使用[servicename]:[port]/[action]访问
  for i in `seq 10`;do wget -q -O - http://springbootapp-svc:8080/hello;done
  3.此处的port对应的是k8s的service(svc)节点的port端口值,不是nodePort端口设置值;
  port是service端口,即k8s中服务之间的访问端口
  targetport是pod(也就是容器)的端口
  nodeport是容器所在node节点的端口,即外部机器可访问的端口。(通过nodeport类型的service暴露给集群节点)
  4.busybox client客户端也必须经过 Istio 注入,因为只有客户端被 Istio 注入才可以接收到来自 Pilot 有关 Virtual Service 和 Destination Rule 的配置信息,才可以保证流量接管生效。
  • 可以通过命令运行busybox,退出后pod自动删除释放
  sudo kubectl run --namespace=springistiodemo busybox --rm -ti --image busybox /bin/sh

48fc4731b31612e60f505cb6011a59a4 - Istio实践(2)-流量控制及服务间调用

转载请注明:xuhss » Istio实践(2)-流量控制及服务间调用

喜欢 (0)

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