大连密封材料 发表于 2024-9-7 23:53:51

还谈istio

一、destination rule,vitrual service, 分别是干啥用的?gateway里填写的mesh又是什么?

在Istio服务网格中,DestinationRule、VirtualService和Gateway是三种不同的资源,它们各自承担着不同的职责:

[*] Gateway:

[*]Gateway 定义了服务网格的入口点,用于控制进入网格的外部流量。它可以设置为监听特定的端口和协议,并定义路由规则,将流量路由到网格内部的相应服务。
[*]在提供的 YAML 文件中,gateways: - mesh 表现流量匹配条件适用于网格内部的全部流量。这里的 mesh 是一个特殊的值,它不代表一个现实的网关资源,而是用于匹配全部进入网格的流量。

[*] VirtualService:

[*]VirtualService 定义了请求路由的规则,用于控制进入服务网格的请求怎样被路由到不同的服务或服务的特定版本。它可以用于实现A/B测试、金丝雀摆设、流量镜像等高级路由功能。
[*]在提供的 YAML 文件中,VirtualService 设置了流量通过出口网关路由到外部服务 api.external.com 的规则。

[*] DestinationRule:

[*]DestinationRule(有时简称为 DR)定义了对特定服务的毗连和请求处理策略。这些策略包括负载均衡设置、毗连池设置、TLS设置等。
[*]它允许更细粒度的控制服务之间的通信,例如,可以指定流量只路由到服务的特定子集,或者设置重试、超时等策略。

Gateway 中的 mesh:


[*]在 Istio 中,mesh 这个值通常用在 VirtualService 的 gateways 字段里,表现匹配条件适用于来自网格内部的流量。它是一个虚拟的概念,用来区分流量的泉源是来自网格内部照旧外部。
[*]当你在 VirtualService 的 match 部分利用 gateways: - mesh 时,意味着只有当请求是通过网格内部的入口网关进入时,这些路由规则才会被应用。
总结来说,Gateway 负责管理进入网格的流量,VirtualService 负责定义这些流量的路由规则,而 DestinationRule 负责定义服务间通信的策略。这些资源共同工作,提供了Istio服务网格中的流量管理和微服务间通信的强大控制能力。
在 Istio 中,DestinationRule 和 VirtualService 是用于流量管理的紧张资源,而 Gateway 则用于设置收支服务网格的流量。理解它们的用途和相互关系有助于更好地管理服务间的通信。
DestinationRule

定义:DestinationRule 是 Istio 中用于为服务指定流量策略的资源。它定义了应用于特定服务的策略,好比毗连池巨细、重试策略、断路器设置等。
功能:


[*]子集(Subset)定义:根据版本、标签等将服务划分为多个子集,用于实现金丝雀发布、灰度发布等。
[*]毗连池管理:控制毗连池巨细、并发毗连数等。
[*]重试策略:设置请求失败后的重试策略。
[*]断路器:定义断路器策略,防止服务过载。
[*]负载均衡:设置负载均衡策略,如轮询、随机等。
示例:
假设我们有一个名为 reviews 的服务,有两个版本 v1 和 v2。我们可以利用 DestinationRule 来定义这些子集:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews-destination
spec:
host: reviews
subsets:
- name: v1
    labels:
      version: v1
- name: v2
    labels:
      version: v2
trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN
    connectionPool:
      http:
      http1MaxPendingRequests: 1000
      maxRequestsPerConnection: 1
VirtualService

定义:VirtualService 是 Istio 中用于定义流量路由规则的资源。它决定了怎样将请求路由到指定的服务和子集。
功能:


[*]路由规则:根据请求的属性(如 URI、Header 等)将流量路由到特定的服务或服务子集。
[*]重写和重定向:可以重写请求的 URI 或重定向请求。
[*]故障注入:可以模拟服务故障(如延迟、故障响应)来测试应用的容错能力。
[*]镜像流量:可以将请求复制到另一个服务以进行测试。
示例:
我们可以利用 VirtualService 来定义将特定版本的流量路由到 reviews 服务的不同子集:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
    - uri:
      prefix: "/v1"
    route:
    - destination:
      host: reviews
      subset: v1
- match:
    - uri:
      prefix: "/v2"
    route:
    - destination:
      host: reviews
      subset: v2
Gateway

定义:Gateway 是 Istio 中用于设置收支服务网格的流量的资源。它主要用于管理收支服务网格的边沿流量。
功能:


[*]外部流量管理:通过定义 Gateway,可以控制哪些主机和端口可以访问服务网格。
[*]安全控制:可以设置 TLS 闭幕等安全设置。
[*]与 VirtualService 配合利用:Gateway 和 VirtualService 一起利用,定义外部流量怎样路由到网格内部服务。
示例:
假设我们有一个外部网关,允许访问 bookinfo 应用的流量:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
    istio: ingressgateway
servers:
- port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
mesh 的利用:
在 Istio 中,mesh 是一个特殊的关键字,用于指定网格内部的流量,而不是通过外部网关的流量。它通常在 VirtualService 中用于定义网格内部的流量路由。
示例:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: internal-service
spec:
hosts:
- internal-service
gateways:
- mesh
http:
- route:
    - destination:
      host: internal-service
总结



[*]DestinationRule:为服务指定流量策略,如负载均衡、毗连池、重试策略等。
[*]VirtualService:定义流量路由规则,决定请求怎样路由到特定的服务和子集。
[*]Gateway:管理收支服务网格的流量,通常用于外部流量的管理。
[*]mesh:指定网格内部的流量路由,而不是通过外部网关的流量。
通过团结利用这些资源,可以机动地管理和控制服务网格表里的流量,确保流量管理的高效和安全。
二、熔断

在微服务架构中,熔断器(Circuit Breaker)是一种计划模式,用于进步体系的弹性和稳定性。熔断器的主要目的是防止故障蔓延,克制在服务调用链中一个服务的故障导致整个体系的崩溃。
在 Istio 中,熔断器机制可以通过 DestinationRule 来设置。Istio 的熔断器功能允许你定义在遇到特定条件时怎样处理请求,克制服务过载,并提供更好的用户体验。
熔断器的工作原理


[*]监控请求和响应:熔断器监控服务之间的请求和响应。
[*]判断失败条件:根据预定义的条件判断服务是否失败,好比请求超时、错误率凌驾阈值等。
[*]打开熔断器:当检测到失败条件时,熔断器打开,停止对故障服务的调用,直接返回错误,或调用备用服务。
[*]半开状态:颠末一段时间后,熔断器会进入半开状态,允许少量请求通过以测试服务是否恢复。
[*]关闭熔断器:假如服务恢复正常,熔断器关闭,恢复正常请求流量;假如服务仍然失败,熔断器继续保持打开状态。
Istio 中的熔断设置

在 Istio 中,熔断器设置是通过 DestinationRule 的 trafficPolicy 字段来定义的。下面是一个示例设置,展示怎样利用 DestinationRule 设置熔断器:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews-circuit-breaker
spec:
host: reviews
trafficPolicy:
    connectionPool:
      tcp:
      maxConnections: 100
      http:
      http1MaxPendingRequests: 1000
      maxRequestsPerConnection: 1
    outlierDetection:
      consecutiveErrors: 5
      interval: 1s
      baseEjectionTime: 30s
      maxEjectionPercent: 100
设置说明



[*] connectionPool:设置毗连池的参数,包括最大毗连数等。

[*]tcp.maxConnections:最大 TCP 毗连数。
[*]http.http1MaxPendingRequests:最大挂起的 HTTP 请求数。
[*]http.maxRequestsPerConnection:每个毗连的最大请求数。

[*] outlierDetection:设置异常检测参数,用于实现熔断功能。

[*]consecutiveErrors:在短时间内连续错误的次数。假如凌驾这个阈值,熔断器将会触发。
[*]interval:检查错误的时间间隔。
[*]baseEjectionTime:服务被弹出的根本时间,表现多长时间后再试图重新调用。
[*]maxEjectionPercent:最大弹出服务的百分比,防止一次弹出过多服务。

例子解释

假设我们有一个 reviews 服务,我们设置了如下的熔断器策略:


[*]最大允许 100 个 TCP 毗连。
[*]最大允许 1000 个挂起的 HTTP 请求。
[*]每个毗连最多允许 1 个请求。
[*]假如在 1 秒内连续出现 5 次错误,那么该服务将被弹出。
[*]服务被弹出后,30 秒内不会再次尝试调用。
[*]最多允许弹出 100% 的实例。
这种设置可以确保在 reviews 服务出现题目时,及时停止对其的调用,防止题目扩大,同时在恰当的时候重新尝试调用以检测服务是否恢复。
三、故障注入 (为了提前练习)

在 Istio 中,故障注入和终止故障是两种用于加强体系弹性和稳定性的机制。它们可以帮助模拟各种故障情景,以便测试服务的容错能力和体系的团体鲁棒性。
故障注入(Fault Injection)

定义:故障注入是一种测试技术,通过有意引入故障(如延迟、错误响应等)来模拟服务在现实运行中可能遇到的题目,从而验证体系的容错能力和弹性。
应用场景:


[*]测试服务在延迟或错误响应情况下的行为。
[*]验证熔断器、重试策略和超时设置的有用性。
[*]进步体系在面临现实故障时的稳定性和可靠性。
Istio 中的设置:
故障注入通过在 VirtualService 中设置 fault 字段来实现。可以注入两种范例的故障:延迟(delay)和错误(abort)。
示例:
假设我们有一个 reviews 服务,我们希望注入 5 秒的延迟和 10% 的错误响应:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- fault:
      delay:
      percentage:
          value: 50.0
      fixedDelay: 5s
      abort:
      percentage:
          value: 10.0
      httpStatus: 500
    route:
    - destination:
      host: reviews
      subset: v1
设置说明:


[*]delay:注入延迟。

[*]percentage.value:延迟注入的百分比,这里表现 50% 的请求会被延迟。
[*]fixedDelay:具体的延迟时间,这里为 5 秒。

[*]abort:注入错误响应。

[*]percentage.value:错误注入的百分比,这里表现 10% 的请求会返回错误。
[*]httpStatus:返回的 HTTP 错误码,这里为 500。

终止故障(Abort Fault)

定义:终止故障是一种故障注入技术,通过有意地返回错误响应来模拟服务不可用的情况。它主要用于测试服务在接收到错误响应时的处理逻辑和恢复能力。
应用场景:


[*]模拟服务不可用的情况,以测试上游服务的容错和恢复策略。
[*]验证重试机制和熔断器的设置是否有用。
[*]提拔体系在面临现实错误时的鲁棒性。
Istio 中的设置:
终止故障同样通过在 VirtualService 中设置 abort 字段来实现。
示例:
假设我们希望在 reviews 服务的 10% 请求中返回 503 错误:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- fault:
      abort:
      percentage:
          value: 10.0
      httpStatus: 503
    route:
    - destination:
      host: reviews
      subset: v1
设置说明:


[*]abort:注入错误响应。

[*]percentage.value:错误注入的百分比,这里表现 10% 的请求会返回错误。
[*]httpStatus:返回的 HTTP 错误码,这里为 503。

故障注入与终止故障的区别和接洽



[*]故障注入:可以注入延迟和错误,主要用于模拟服务性能降落或不稳定的情况,以测试体系的容错和恢复能力。
[*]终止故障:主要用于模拟服务不可用的情况,通过直接返回错误响应来测试上游服务的容错和恢复策略。
接洽:


[*]都是用于加强体系弹性和稳定性的测试技术。
[*]都可以通过在 VirtualService 中设置 fault 字段来实现。
[*]都有助于验证熔断器、重试策略和超时设置的有用性。
实践中的应用

测试体系弹性:


[*]通过注入故障,可以提前发现体系在面临现实故障时可能出现的题目,从而进行优化和改进。
验证设置:


[*]验证 Istio 中设置的熔断器、重试策略和超时设置是否有用,确保在现实故障发生时体系能够正确处理。
提拔服务稳定性:


[*]通过模拟各种故障情景,进步体系的鲁棒性和稳定性,减少现实运行中的故障影响。
通过公道地利用故障注入和终止故障,可以大大提拔体系的弹性和稳定性,确保在现实运行中能够应对各种潜在的题目。
四、流量镜像

流量镜像(Traffic Mirroring),有时也称为影子流量(Shadow Traffic),是一种在生产情况中测试新版本或新功能的技术。它通过将生产情况中的真实流量复制一份发送到新版本或新功能的实例上,从而不影响生产情况的正常运行。流量镜像可以帮助发现潜在的题目和性能瓶颈,确保新版本在正式发布前能够处理现实流量。
流量镜像的应用场景


[*]无风险测试:在不影响生产情况的情况下,测试新版本或新功能的性能和稳定性。
[*]比较分析:比较不同版本之间的行为和性能,帮助发现潜在的题目。
[*]验证新功能:验证新功能在处理现实流量时的表现,确保其能够正常工作。
[*]性能调优:通太过析镜像流量,发现和优化体系的性能瓶颈。
Istio 中的流量镜像设置

在 Istio 中,可以通过在 VirtualService 中设置 mirror 字段来实现流量镜像。mirror 字段指定将生产流量的副本发送到哪个服务或服务子集。
示例:
假设我们有一个 reviews 服务,我们希望将 100% 的流量镜像到 reviews-v2 子集,以便在 reviews-v2 上进行测试:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
    - destination:
      host: reviews
      subset: v1
- mirror:
      host: reviews
      subset: v2
    mirrorPercentage:
      value: 100.0
设置说明:


[*]route:定义现实生产流量的路由目的,这里是将流量发送到 reviews-v1 子集。
[*]mirror:指定镜像流量的目的,这里是将生产流量的副本发送到 reviews-v2 子集。
[*]mirrorPercentage:指定镜像流量的百分比,这里是将 100% 的生产流量镜像到 reviews-v2 子集。
流量镜像的优点


[*]低风险:在生产情况中进行测试,而不影响现实用户的请求。
[*]真实数据:利用真实的生产流量进行测试,可以更准确地发现题目。
[*]快速反馈:通过实时分析镜像流量,可以快速发现和修复潜在的题目。
[*]进步发布质量:确保新版本在处理现实流量时的稳定性和性能,从而进步发布质量。
实践中的流量镜像


[*] 新版本验证:

[*]在发布新版本之前,将生产流量镜像到新版本实例,验证其处理现实流量的能力。

[*] 性能测试:

[*]将生产流量镜像到新版本或新功能上,进行性能测试和调优,确保其在生产情况中的表现。

[*] 故障排查:

[*]通过镜像流量到测试情况,复现生产情况中的题目,进行故障排查和修复。

[*] 用户行为分析:

[*]镜像生产流量到分析体系,进行用户行为分析和统计,帮助优化体系和业务流程。

总结

流量镜像是 Istio 提供的一种强大的测试和验证工具,通过将生产情况中的真实流量复制一份发送到测试实例上,帮助发现和办理潜在的题目,确保新版本和新功能在正式发布前能够处理现实流量。公道利用流量镜像,可以大大进步体系的稳定性和发布质量。
五、补充

镜像也可以通过主数据库同步到从数据库,你的应用用从数据库测试。但是这不符合三级等保要求
测试

写 vs,全部流量都到v1版本,v2版本获取mirror, 然后logs -f v1和v2就能看到curl的结果。发起请求的也要在pod内
监控

自带监控
https://i-blog.csdnimg.cn/direct/4d05e0677cdf43fabd55ebe6fa8ecc8d.png
jaeger 能查谁的性能差。
https://i-blog.csdnimg.cn/direct/f31496d5bf40400683f60b817010a644.png
六、


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 还谈istio