lstio流量治理


一、Istio简介

官方文档:https://istio.io/docs/concepts/what-is-istio/
中文官方文档:https://istio.io/latest/zh/about/service-mesh/

1.Istio 介绍:

#官当解释:
An open platform to connect, secure, control and observe services.【一个连接、保护、控制和观察服务的开放平台】
在这里插入图片描述

Istio 是一个开源服务网格,它透明地分层到现有的分布式应用程序上。 Istio 强大的特性提供了一种统一和更有效的方式来保护、连接和监视服务。 Istio 是实现负载平衡、服务到服务身份验证和监视的路径——只需要很少或不需要更改服务代码。它强大的控制平面带来了重要的特点,包括:

  • 应用服务无感知:不需要动原有的服务;且为自动注入应用的pod,但是资源消耗更大一些
  • 使用 TLS 加密、强身份认证和授权的集群内服务到服务的安全通信
  • 自动负载均衡的 HTTP, gRPC, WebSocket,和 TCP 流量
  • 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制
  • 一个可插入的策略层和配置 API,支持访问控制、速率限制和配额
  • 对集群内的所有流量(包括集群入口和出口)进行自动度量、日志和跟踪

Istio 是为可扩展性而设计的,可以处理不同范围的部署需求。Istio 的控制平面运行在 Kubernetes 上,可以将部署在该集群中的应用程序添加到网格中,将网格扩展到其他集群,甚至连接 VM 或运行在 Kubernetes 之外的其他端点。

2.工作说明

Istio 由两个部分组成:控制平面和数据平面。
在这里插入图片描述
使用 Istio 前
在这里插入图片描述

使用 Istio 后

3.相关概念

流量管理
Istio 的流量路由规则可以让您轻松地控制服务之间的流量和 API 调用。 Istio 简化了服务级别属性(如断路器、超时和重试)的配置,并使设置重要任务(如 A/B 测试、canary 部署和基于百分比的流量分割的分阶段部署)变得容易。 它还提供了开箱即用的故障恢复特性,帮助您的应用程序更健壮地应对依赖服务或网络的故障。
可观测性
Istio 为服务网格内的所有通信生成详细的遥测数据。这种遥测技术提供了服务行为的可观测性,使运营商能够排除故障、维护和优化其应用。 更好的是,它不会给服务开发人员带来任何额外的负担。通过 Istio,操作人员可以全面了解被监视的服务如何与其他服务以及 Istio 组件本身交互。
Istio 的遥测技术包括详细的指标、分布式跟踪和完整的访问日志。有了 Istio,您就可以得到全面全面的服务网格可观察性。
安全性能
微服务有特殊的安全需求,包括防止中间人攻击、灵活的访问控制、审计工具和相互的 TLS。 Istio 包括一个全面的安全解决方案,使运营商能够解决所有这些问题。 它提供了强大的身份、强大的策略、透明的 TLS 加密,以及验证、授权和审计(AAA)工具来保护您的服务和数据。
Istio 的安全模型是基于默认安全的,旨在提供深度防御,允许您部署安全的应用程序,甚至跨不可信的网络。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、部署

[root@k8s2 ~]# tar zxf istio-1.17.1-linux-amd64.tar.gz        ##tar包从官方文档-GitHub下载
[root@k8s2 ~]# cd istio-1.17.1/
[root@k8s2 istio-1.17.1]# export PATH=$PWD/bin:$PATH         ##设置环境变量
[root@k8s2 istio-1.17.1]# ls bin/
istioctl

demo专为测试准备的功能集合
[root@k8s2 istio-1.17.1]# istioctl install --set profile=demo -y  ##官方提供做测试
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Egress gateways installed
✔ Installation complete                                                         
Making this installation the default for injection and validation.

Thank you for installing Istio 1.17.  Please take a few minutes to tell us about your install/upgrade experience!  https://forms.gle/hMHGiwZHPU7UQRWe9

在这里插入图片描述
给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车代理
[root@k8s2 istio-1.17.1]# kubectl label namespace default istio-injection=enabled

三、部署示例应用

[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
创建 Istio 入站网关
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
在这里插入图片描述
访问应用:http://192.168.56.101/productpage
刷新页面:v1,v2,v3都会出来
在这里插入图片描述

四、部署遥测组件—分布式调用链跟踪

[root@k8s2 istio-1.17.1]# kubectl apply -f samples/addons
在这里插入图片描述
待插件部署完毕后,修改kiali服务的访问方式为Loadbalancer
在这里插入图片描述
访问kiali:http://192.168.56.100:20001/
注:刷新http://192.168.56.101/productpage,kiali仪表板会进行访问记录
kiali仪表板:
在这里插入图片描述

五、流量管理

在这里插入图片描述

[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml      ##目标规则中定义好可用的版本

将所有流量路由到每个微服务的 v1 版本
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml         ##v1

来自名为 Jason 的用户的所有流量将被路由到服务 reviews:v2(用Jason登录进行实验即可,默认没有密码)
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml      

创建故障注入规则以延迟来自测试用户 jason 的流量:注入7秒的延时;v1不受影响
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml

用户 jason 登陆到 /productpage 页面,出现了一个问题:Reviews 部分显示了错误消息
在这里插入图片描述
以下两种方式修复上述错误消息:

1.设置流量转移

修改切换的v2,设置流量转移,将所有流量转移到 reviews:v3
[root@k8s2 istio-1.17.1]# vim  samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml     
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews
        subset: v3                         ##改动处
  - route:
    - destination:
        host: reviews
        subset: v1

[root@k8s2 istio-1.17.1]# kubectl apply -f   samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml

2.修改延迟规则

修改延迟规则为任何低于 2.5 秒的数值,例如 2 秒
[root@k8s2 istio-1.17.1]#  vim  samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    fault:
      delay:
        percentage:
          value: 100.0
        fixedDelay: 2s                 ##改动处
    route:
    - destination:
        host: ratings
        subset: v1
  - route:
    - destination:
        host: ratings
        subset: v1

[root@k8s2 istio-1.17.1]# kubectl apply -f   samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml          ##有很多权重的文件

3.流量转移:基于权重

把 50% 的流量从 reviews:v1 转移到 reviews:v3
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml                     ##ll samples/bookinfo/networking/目录有很多权重类型的文件

当reviews:v3 微服务已经稳定,可以通过应用 Virtual Service 规则将 100% 的流量路由 reviews:v3:
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml

或者:vim samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml如下图
在这里插入图片描述

在这里插入图片描述
清理以上实验测试后,进行熔断实验
在这里插入图片描述

六、流量管理–熔断

熔断(Circuit Breaker),原是指当电流超过规定值时断开电路,进行短路保护或严重过载时的一种保护机制。后来熔断也广泛应用于金融领域,指当股指波幅达到规定的熔断点时,交易所为控制风险采取的暂停交易措施。而在软件领域,熔断则是指当服务达到系统负载阈值时,为避免整个软件系统不可用,而采取的一种主动保护措施。对于微服务系统而言,熔断尤为重要,它可以使系统在遭遇某些模块故障时,通过服务降级等方式来提高系统核心功能的可用性,得以应对来自故障、潜在峰值或其他未知网络因素的影响。
在这里插入图片描述

部署 httpbin 服务
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/httpbin/httpbin.yaml

增加一个客户端
创建客户端程序以发送流量到 httpbin 服务。这是一个名为 Fortio 的负载测试客户端,它可以控制连接数、并发数及发送 HTTP 请求的延迟。通过 Fortio 能够有效的触发前面在 DestinationRule 中设置的熔断策略。
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/httpbin/sample-client/fortio-deploy.yaml
在这里插入图片描述

登入客户端 Pod 并使用 Fortio 工具调用 httpbin 服务:
[root@k8s2 istio-1.17.1]# export FORTIO_POD=$(kubectl get pods -l app=fortio -o ‘jsonpath={.items[0].metadata.name}’)

[root@k8s2 istio-1.17.1]# kubectl exec “$FORTIO_POD” -c fortio – /usr/bin/fortio curl -quiet http://httpbin:8000/get

在这里插入图片描述
触发熔断器
发送并发数为 2 的连接(-c 2),请求 20 次(-n 20)
[root@k8s2 istio-1.17.1]# kubectl exec “$FORTIO_POD” -c fortio – /usr/bin/fortio load -c 2 -qps 0 -n 20 -loglevel Warning http://httpbin:8000/get
在这里插入图片描述
istio-proxy 确实允许存在一些误差

将并发连接数提高到 3 个
[root@k8s2 istio-1.17.1]# kubectl exec “$FORTIO_POD” -c fortio – /usr/bin/fortio load -c 3 -qps 0 -n 30 -loglevel Warning http://httpbin:8000/get
在这里插入图片描述

将并发连接数提高到 5 个
[root@k8s2 istio-1.17.1]# kubectl exec “$FORTIO_POD” -c fortio – /usr/bin/fortio load -c 5 -qps 0 -n 30 -loglevel Warning http://httpbin:8000/get

在这里插入图片描述
均被熔断器拦截

清理:

清理规则:
$ kubectl delete destinationrule httpbin

下线 httpbin 服务和客户端:
$ kubectl delete -f samples/httpbin/sample-client/fortio-deploy.yaml
$ kubectl delete -f samples/httpbin/httpbin.yaml

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值