Istio 玩转系列
Istio是一个服务网格解决方案,可以轻松的对已有的应用进行添加治理功能,让应用程序和治理逻辑解耦,降低架构的复杂度和减轻开发团队的负担。
叶康铭
云原生布道者,华为云享专家,阿里云栖专家。
公众号:云原生架构
展开
-
Istio 项目介绍
为了了解工具或技术的出现方式或原因,可以先研究一下它试图解决的问题的根源,以及如果没有这项新技术,世界将是什么样子。微服务痛点微服务已经在业界有大量的落地案例,它的架构旨在将大型的单体应用程序分解为通过HTTP协议相互通信的小型单元。但服务治理方面的挑战也随之而来:在众多的微服务中识别根本的故障原因不同的开发语言与框架的治理能力差异治理逻辑与业务逻辑耦合造成的复杂性...原创 2020-09-01 10:04:00 · 1400 阅读 · 1 评论 -
Istio 安装部署
Istio 下载可以按照自己的需要下载指定的版本,或者下载最新的版本下载指定版本的 Istio指定版本为1.4.6去下载curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.4.6 sh -进入 Istio 目录cd istio-1.4.6配置 Istio 环境变量export PATH=$PWD/bin:$PATH下载最新版本的 Istio获取 Istio 最新的版本号VERSION=$(curl --silent "htt原创 2020-09-19 14:44:18 · 2331 阅读 · 1 评论 -
Istio 注入原理
Istio通过注入边车使得本身的应用获取了一些高级能力,是如何完成边车的注入的呢?注入方式手动注入 - 针对具体的一个资源对象工作原理: 通过改写yaml文件植入Istio-proxy容器,以及init-container用于修改iptables规则。配置方法:istioctl kue-inject <deploy.yaml> -o <inject.yaml> | kubectl apply -f -自动注入 - 针对命名空间内的所有资源对象工作原理: 通过web原创 2020-09-21 09:43:51 · 2763 阅读 · 1 评论 -
Istio 流量劫持
不用修改本身应用的任何代码,就可以实现重试、重试、注册、发现、故障注入等等的能力,而且对开发语言、框架都是没有任何限定统一的技术栈的,那么为什么服务网格那么厉害可以做到那么透明呢,我们一起了解一下吧!原创 2020-09-21 15:06:25 · 1760 阅读 · 1 评论 -
Istio 升级更新
在Istio1.5及之后,架构方面产生大变化,控制平面已经回归到单体,对应在1.4升级到1.5的时候,有一些坑需要留意的。生产环境下,升级前请做好备份工作!原创 2020-09-21 22:01:15 · 2717 阅读 · 0 评论 -
Istioctl 命令补全
istioctl命令补全原创 2020-09-21 22:07:49 · 2068 阅读 · 0 评论 -
Fortio
什么是 FortioFortio这个名字来自希腊语φορτίο,意思是负载/负担。最初是Istio的负载测试工具,现在为独立的项目。Fortio是一个快速,小型(3Mb docker映像,具有最小的依赖性),可重用,可嵌入的go库以及命令行工具和服务器进程,该服务器包括简单的Web UI和结果的图形表示(均为单个延迟图)以及多重结果比较最小,最大,平均,qps和百分位图。fortio 部署wget https://github.com/fortio/fortio/releases/download.原创 2020-10-05 10:28:40 · 2798 阅读 · 0 评论 -
Istio 虚拟服务 (Vistrual Service)
虚拟服务(Vistrual Service)是 Istio 重要的资源对象之一,作用是将流量路由到网格中的服务。支持基于权重、http header条件等优先级的路由,比Kuberentes service对于流量的管控更加的丰富,颗粒度更加精细。...原创 2020-10-05 14:38:13 · 2020 阅读 · 0 评论 -
Istio 目标规则 (Destination Rule)
目标规则(Destination Rule)是 Istio 重要的资源对象之一,它不能独自使用,必须跟 Virtual Service 共同发挥作用,作用是将流量标记分组并路由到具体服务。Destination Rule 还可以做什么通常在生产场景下,用使用 Destination Rule 对用户进行身份、地址位置等条件的识别后的流量路由,例如部分用户优先享用新版本,则可以通过HTTP Header附加相关的字段进行识别,路由到新版本的服务上。或者在版本更新的时候,使用灰度发布,对新旧版本标记子集.原创 2020-10-05 14:41:50 · 5299 阅读 · 2 评论 -
Istio 入口网关 (Ingress Gateway)
入口网关(Ingress Gateway)是 Istio 重要的资源对象之一,是用于管理网格边缘入站的流量,通过入口网关就可以很轻松的将网格内部的服务暴露到外部提供访问。通过例子来理解apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata: name: nginx-gwspec: selector: app: istio-ingressgateway servers: - port: n.原创 2020-10-06 07:54:48 · 6923 阅读 · 0 评论 -
Istio 服务条目 (Service Entry)
服务条目(Service Entry)是 Istio 重要的资源对象之一,作用是将外部的资源注册到 Istio 内部的网格服务中来,以提供网格内对外部资源的更加精细化的控制。什么情况下会用到 Service Entry在服务调用过程中会使用到外部的服务,例如微信、支付宝的付款服务,这个服务和本身集群内的服务无任何关系,通过服务条目将该服务注册到 Istio 网格,在集群内部就好像访问自身的服务一样,结合虚拟服务、目标规则进而通过一些高级的治理能力,例如限流、重试等等对服务治理能力支持。通过例子来理.原创 2020-10-07 07:39:03 · 4403 阅读 · 1 评论 -
Istio 流量镜像 (TrafficManagement - Mirror)
HTTP流量镜像指的是将流量转发到原目标服务的同时将流量给另外一个目标服务,请求正常的关注原始服务,而等待不用镜像的流量返回。什么场景需要用的流量镜像例如上线了新的版本,但对于可靠性不是很有信心,可以将请求的流量将传入当前使用的版本镜像到新的版本来测试,对当前使用的版本不会产生影响,同时也可以测试到新版本的性能等方面。通过例子来理解目前是使用的v1版本的api,由于业务需求新增v2版本的api,但v2没有经过完整的测试,SRE团队对于上线后不是很有信心去确保可靠性。所以采取了流量镜像针对v1版本.原创 2020-10-07 22:31:32 · 2468 阅读 · 0 评论 -
Istio 服务重试 (TrafficeManagement - Retries)
Retries 是在服务请求的过程中产生异常后最简单的处理方法,就是让服务再次重试,通过重试可以提供服务的可用性和健壮性。什么场景需要用到重试重试是解决很多请求异常最直接、简单的方法,尤其是在工作环境比较复杂的场景下,克提高总体的服务质量。重试使用不当也会有问题,最糟糕的情况是重试一直不成功,反而增加延迟和性能开销。所以根据系统运行环境、服务自身特点,配置适当的重试规则显得尤为重要。通过例子来理解nginx 服务访问 httpd 服务,但 httpd 服务由于自身故障错误响应 nginx 服务.原创 2020-10-08 23:47:32 · 1954 阅读 · 1 评论 -
Istio 重定向 (TrafficManagement - Redirect)
HTTP Redirect 指的是将请求到原目标服务的流量重定向到给另外一个目标服务,客户端请求时不用更改任何方式从而访问到重定向后的目标服务。什么场景需要用到重定向例如当前使用的服务发生的变更,需要到新的服务才可以提供访问,在不更变用户原始请求的情况下,通过重定向就可以很好的去解决了这个问题。通过例子来理解对于httpd-service 匹配到前缀是 /check 的请求都会被重定向到 nginx-service 的 /api/healthapiVersion: networking.is.原创 2020-10-08 07:44:10 · 2186 阅读 · 0 评论 -
Istio 重写 (TrafficeManagement - Rewrite)
HTTP Rewrite 将请求转发给目标服务前修改HTTP请求中指定部分的内容,这个不同于重定向,重定向对用户是可见,重写对用户是不可见的,因为是在服务端进行的。什么场景需要用到重写在生产环境中,经常有一些 url 变更的需求,同时又需要做到对请求透明友好,又或者是类似一些 url 路径需要起多一个别名的效果,都是可以通过重写去简单的实现。通过例子来理解对于 httpd-service 匹配到前缀是 /check 的请求都会被重写到 nginx-service 的 /api/health,同.原创 2020-10-08 16:04:32 · 3162 阅读 · 0 评论 -
Istio 超时处理 (TrafficManagement - Timeout)
超时是为了解决长时间或者无限期的等待造成服务不可用,通常需要在代码中植入此类的网络层面的弹性处理逻辑,但通过 Istio 就可以使用 Vitual Sevice来优雅的实现超时的处理。什么场景需要用到超时处理在生产环境中经常会碰到由于调用方等待下游的响应过长,堆积大量的请求阻塞了自身服务,造成雪崩的情况,通过通过超时处理来避免由于无限期等待造成的故障,进而增强服务的可用性。通过例子来理解nginx 服务设置了超时时间为3秒,如果超出这个时间就不在等待,返回超时错误httpd 服务设置了响应时.原创 2020-10-09 07:35:44 · 1907 阅读 · 0 评论 -
Istio 断路器 (TrafficManagement - Circuit Breaker)
断路器也成服务熔断,在多个服务调用的时候,服务A依赖服务B,服务B依赖服务C,如果服务C响应时间过长或者不可用,则会让服务B占用太多系统资源,而服务A也依赖服B,同时也在占用大量的系统资源,造成系统雪崩的情况出现。 Istio 断路器通过网格中的边车对流量进行拦截判断处理,避免了在代码中侵入控制逻辑,非常方便的就实服务熔断的能力。什么场景需要用到超时处理微服务场景下,在多个服务调用的时候,服务A依赖服务B,服务B依赖服务C,如果服务C响应时间过长或者不可用,则会让服务B占用太多系统资源,而服务A也依.原创 2020-10-10 07:38:35 · 1665 阅读 · 0 评论 -
Istio 故障注入 (TrafficeManagement - Fault Injection)
Istio 故障注入与其他在网络层引入错误(例如延迟数据包或者直接杀死 Pod)的机制不同,Istio 允许在应用程序层注入故障。这使得可以注入更多相关的故障,比如 HTTP 错误代码等。注入故障类型Istio 可以注入两种类型的故障,而这两种故障都是使用虚拟服务来配置的:使用故障注入时,不能启用超时和重试通过delay和abort两个字段设置延时和中止两种故障通过例子来理解延迟故障注入描述请求延时,模拟网络、远端服务负载均衡等各种原因导致的失败fixedDelay:一个必选字段.原创 2020-10-10 17:58:30 · 2016 阅读 · 0 评论 -
Istio 跨站策略 (TrafficManagement - CorsPolicy)
出于安全考虑,浏览器通过跨域资源共享CORS(Cross Origin Resource Sharing)机制克允许web应用服务器进行跨域访问控制,使跨域数据传递安全进行。在实现上是在HTTP Header中追加一些额外的信息来通知浏览器准许以上访问。什么场景需要用到跨域策略通常,会利用CORS进行跨域访问控制,例如允许哪一些资源被哪一个域名进行跨域访问,以及可以定义资源的访问方式和生命周期。通过例子来理解nginx 服务上 部署的是 yekangming.com 中的页面,在页面中需要引.原创 2020-10-11 10:58:25 · 2016 阅读 · 0 评论