istio
创始人
2025-05-31 09:49:42

文章目录

  • 一、Istio简介
  • 二、部署
  • 三、部署示例应用
  • 四、部署遥测组件
  • 五、流量管理
  • 六、熔断


一、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 是实现负载平衡、服务到服务身份验证和监视的路径——只需要很少或不需要更改服务代码。它强大的控制平面带来了重要的特点,包括:

  • 使用 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
[root@k8s2 ~]# cd istio-1.17.1/
[root@k8s2 istio-1.17.1]# export PATH=$PWD/bin:$PATHdemo专为测试准备的功能集合
[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

四、部署遥测组件

[root@k8s2 istio-1.17.1]# kubectl apply -f samples/addons
在这里插入图片描述
待插件部署完毕后,修改kiali服务的访问方式为Loadbalancer
在这里插入图片描述
访问kiali:http://192.168.56.100:20001/
在这里插入图片描述

五、流量管理

将所有流量路由到每个微服务的 v1 版本
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml来自名为 Jason 的用户的所有流量将被路由到服务 reviews:v2
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml创建故障注入规则以延迟来自测试用户 jason 的流量
kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml

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

设置流量转移,将所有流量转移到 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:- reviewshttp:- match:- headers:end-user:exact: jasonroute:- destination:host: reviewssubset: v3                         ##改动处- route:- destination:host: reviewssubset: v1[root@k8s2 istio-1.17.1]# kubectl apply -f   samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
修改延迟规则为任何低于 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:- ratingshttp:- match:- headers:end-user:exact: jasonfault:delay:percentage:value: 100.0fixedDelay: 2s                 ##改动处route:- destination:host: ratingssubset: v1- route:- destination:host: ratingssubset: v1[root@k8s2 istio-1.17.1]# kubectl apply -f   samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml
把 50% 的流量从 reviews:v1 转移到 reviews:v3
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml当reviews:v3 微服务已经稳定,可以通过应用 Virtual Service 规则将 100% 的流量路由 reviews:v3:
[root@k8s2 istio-1.17.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml

六、熔断

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

增加一个客户端
[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=KaTeX parse error: Expected 'EOF', got '#' at position 98: …2 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

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


相关内容

热门资讯

美股收盘:三大指数集体收涨 纳... 财联社12月20日讯(编辑 夏军雄)美东时间周五,在甲骨文和英伟达走强的带动下,人工智能(AI)概念...
贵阳有轨电车T2线主体硬件基本... 转自:贵州日报 本报讯(记者 冷赛楠)近日,“天眼问政”栏目收到网友留言:贵阳有轨电车T2线从比亚迪...
大山“用水三变” 转自:贵州日报 “以前靠山上小水源灌田,纯靠天吃饭。现在水龙头就在边上,要浇地直接打开就行。”69岁...
危房抢险施工公告 转自:贵州日报 贵阳市云岩区鸿雁巷17、19、20号及弯弓街6号住户:为消除贵阳市云岩区鸿雁巷17、...
“请3休8”带旺元旦假期云南旅...   本报讯 首席记者李思凡报道 “请3休8”带旺元旦游。12月19日,飞猪发布的数据显示,2026年...