微服务Istio升级

这里按照https://www.ljh.cool/40743.html继续配置istio

微服务Istio升级

基于istio升级思路很明确,将普通的ingress暴露方式全部通过istio方式取代,比如下面的服务

微服务Istio升级

kiali可以查看到调用界面网络关系

微服务Istio升级

之前的项目是使用了传统的ingress暴露服务,现在需要更新到istio上实现流量治理

假如我们需要更新portal-service服务:

kubectl -n ms delete deployments.apps portal

修改标签配置来确定版本:

这里我们修改portal代码,并构建v1版本

vim simple-microservice/portal-service/src/main/resources/templates/index.ftl
微服务Istio升级
vim simple-microservice/k8s/docker_build.sh

镜像版本号和标签尽量保持一致

微服务Istio升级

修改deployment为v1版本,并打上标签

vim simple-microservice/k8s/portal.yaml

微服务Istio升级

发布一下portal-service v1版本:

./docker_build.sh portal-service

按照相同的操作,这里发布一下v2版本:

vim simple-microservice/portal-service/src/main/resources/templates/index.ftl # 修改页面:micro istio v2
vim simple-microservice/k8s/docker_build.sh # image修改为v2
vim simple-microservice/k8s/portal.yaml # 修改为v2版本,标签打上v2

发布v2版本的portal-service微服务

./docker_build.sh portal-service

这里portal-service两个版本的服务页面共同承担访问压力,流量为1:1

微服务Istio升级
微服务Istio升级

下面通过istio进行流量治理

vim portal-gw-vs-dr.yaml

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: portal-gw
  namespace: ms
spec:
  selector:
    istio: ingressgateway # 使用默认的istio ingress gateway
  servers :
  - port:
      number: 8080
      name: http
      protocol: HTTP
    hosts:
    - "portal.istio.com" # 发布域名,通过hosts与VirtualService关联
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: portal-vs
  namespace: ms
spec:
  hosts:
  - "portal.istio.com" # 发布域名
  gateways:
  - portal-gw
  http:
  - route:
    - destination:
        host: portal # 最终流量导向到nginx service,VirtualService、DestinationRule、Service名称贯穿始终
        port:
          number: 8080
        subset: v1 # 引用DestinationRule中的subset名称
      weight: 80
# 假如v2版本测试完成,我们可以调整v2的权重进行灰度发布
    - destination:
        host: portal
        port:
          number: 8080
        subset: v2
      weight: 20
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: portal-dr
  namespace: ms
spec:
  host: portal
  subsets:
  - name: v1 # 定义subsets名称
    labels:
      version: v1 # subset v1指向具有version=v1的Pod #这里注意最终是寻找pod的标签,不是deployment的标签
  - name: v2
    labels :
      version: v2 # subset v2指向具有version=v2的Pod

端口开访转发到了30080(istio-system service查看):v1:v2版本流量大体为80:20

微服务Istio升级

流量线路分析:

微服务Istio升级

通过vs的subset和weight,通过destination rule关联pod的标签,实现细粒度流量管控

发布者:LJH,转发请注明出处:https://www.ljh.cool/41145.html

(0)
上一篇 2024年2月21日 下午5:37
下一篇 2024年3月13日 下午9:18

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注