五 Istio:使用服务网格Istio进行流量路由

目录

  • 一.模块概览
  • 二.系统环境
  • 三.简单路由
    • 3.1 简单路由
  • 四.Subset和DestinationRule
    • 4.1 Subset 和 DestinationRule
    • 4.2 DestinationRule 中的流量策略
      • 4.2.1 负载均衡器设置
      • 4.2.2 连接池配置
      • 4.2.3 异常点检测
      • 4.2.4 客户端 TLS 设置
      • 4.2.5 端口流量策略
  • 五.高级路由
    • 5.1 高级路由
    • 5.2 重定向和重写请求
    • 5.3 AND 和 OR 语义
  • 六.实战:简单流量路由
    • 6.1 简单流量路由
    • 6.2 清理
  • 七.实战:高级流量路由
    • 7.1 高级流量路由
    • 7.2 清理
一.模块概览在本模块中,我们将开始使用 Istio 服务网格在服务之间进行流量路由 。使用流量路由,我们将学习如何部署新版本的服务,并在已发布的生产版本的服务旁边运行,而不干扰生产流量 。随着两个服务版本的部署,我们将逐步发布(金丝雀发布)新版本,并开始将一定比例的传入流量路由到最新版本 。
使用服务网格Istio进行流量路由的前提是已经安装好了istio,关于istio的安装部署,请查看博客《Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14》https://www.cnblogs.com/renshengdezheli/p/16836404.html
二.系统环境服务器版本docker软件版本Kubernetes(k8s)集群版本Istio软件版本CPU架构CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12v1.21.9Istio1.14x86_64Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点
服务器操作系统版本CPU架构进程功能描述k8scloude1/192.168.110.130CentOS Linux release 7.4.1708 (Core)x86_64docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calicok8s master节点k8scloude2/192.168.110.129CentOS Linux release 7.4.1708 (Core)x86_64docker,kubelet,kube-proxy,calicok8s worker节点k8scloude3/192.168.110.128CentOS Linux release 7.4.1708 (Core)x86_64docker,kubelet,kube-proxy,calicok8s worker节点三.简单路由3.1 简单路由我们可以使用 VirtualService 资源在 Istio 服务网格中进行流量路由 。通过 VirtualService,我们可以定义流量路由规则,并在客户端试图连接到服务时应用这些规则 。例如向 dev.example.com 发送一个请求,最终到达目标服务 。
让我们看一下在集群中运行 customers 应用程序的两个版本(v1 和 v2)的例子 。我们有两个 Kubernetes 部署,customers-v1customers-v2 。属于这些部署的 Pod 有一个标签 version:v1 或一个标签 version:v2 的设置 。
路由到 Customers如下所示:
五 Istio:使用服务网格Istio进行流量路由

文章插图
我们想把 VirtualService 配置为将流量路由到应用程序的 V1 版本 。70% 的传入流量应该被路由到 V1 版本 。30% 的请求应该被发送到应用程序的 V2 版本 。
下面是上述情况下 VirtualService 资源的yaml文件:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:name: customers-route spec:hosts:- customers.default.svc.cluster.localhttp:- name: customers-v1-routesroute:- destination:host: customers.default.svc.cluster.localsubset: v1weight: 70- name: customers-v2-routesroute:- destination:host: customers.default.svc.cluster.localsubset: v2weight: 30hosts 字段下,我们要定义流量被发送到的目标主机 。在我们的例子中,这就是 customers.default.svc.cluster.local Kubernetes 服务 。
下一个字段是 http,这个字段包含一个 HTTP 流量的路由规则的有序列表 。destination 是指服务注册表中的一个服务,也是路由规则处理后请求将被发送到的目的地 。Istio 的服务注册表包含所有的 Kubernetes 服务,以及任何用 ServiceEntry资 源声明的服务 。

经验总结扩展阅读