如何确认熔断(通过 DestinationRule)是否在为外部服务(ServiceEntry 和 VirtualService)工作
How can I confirm whether Circuit Breaking (via DestinationRule) is at work or not for external service (ServiceEntry & VirtualService)
问题总结
我正在尝试为我的网格外部托管在其他地方的外部端点施加断路器参数。但是,我设置的参数似乎并没有被强加,因为我仍然获得成功的 HTTP 200 响应,而我预计它会以 HTTP 503 开始失败。
工具版本为:
- Istio-1.2.4
- Kubernetes:v1.10.11
- Docker 桌面版本 2.0.0.3
重要配置:
global.outboundTrafficPolicy.mode
是 REGISTRY_ONLY
.
- Mesh 内
mTLS
。外部流量策略,TLS为DISABLED
相关资源
服务入口
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: external-service
spec:
hosts:
- external-service.sample.com
location: MESH_EXTERNAL
exportTo:
- "*"
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS
虚拟服务
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: external-service-vs
spec:
hosts:
- external-service.sample.com
http:
- timeout: 200ms
retries:
attempts: 1
perTryTimeout: 200ms
route:
- destination:
host: external-service.sample.com
port:
number: 80
目的地规则
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: external-service-dr
spec:
host: external-service.sample.com
trafficPolicy:
tls:
mode: DISABLE
connectionPool:
tcp:
maxConnections: 1
connectTimeout: 200ms
http:
http2MaxRequests: 1
http1MaxPendingRequests: 1
maxRequestsPerConnection: 1
maxRetries: 1
idleTimeout: 200ms
outlierDetection:
consecutiveErrors: 1
interval: 1s
baseEjectionTime: 10s
maxEjectionPercent: 100
测试
我在网格内有一个应用程序注入了 Envoy 代理。该应用程序基本上只是 运行 并发加载 HTTP1.1 GET external-service.sample.com/endpoint.
我调整了应用程序中的并发用户数(1 到 10)和每个用户每秒的请求数(1 到 20)。
我原以为响应会随着上升而开始失败。但事实并非如此。我自始至终都取得了成功。
关键问题
如果看到很刺眼的东西请指出来
我已经检查了来自我的 Envoy 代理的日志和 /stats(传出请求和响应)。我还需要检查哪些其他 istio 日志以进一步了解请求是否由 istio 执行并评估为 destinationrule?
我还没有真正直接解决这个问题。
但是,我从一开始就完成了整个设置,从设置 istio 开始,一切都从头开始。在那之后它已经抛出了预期的 HTTP 503。
要知道断路器的状态是相当具有挑战性的,而不是必要的。应该有一个 ticket 记录,但似乎尚未开始开发此类功能。
不过,在验证时,我确实查看了一些遥测指标以了解断路器状态。我认为这种方式可能会更好,因为我只想知道电路是关闭还是打开,而不是从多个输入数据进行分析。
谢谢。
除了 Istio 收集的统计数据 Mixer from nested Envoy instances, you might consider fetching Circuit Breaker events from Envoy Access logs。
自访问日志记录 enabled across Istio mesh plane, you can extract the relevant Circuit Breaker log entries, distinguished by specific response flags:
UO: Upstream overflow (circuit breaking) in addition to 503 response
code.
并从容器的 envoy 代理访问日志中获取记录,即:
[2019-09-18T09:49:56.716Z] "GET /headers HTTP/1.1" 503 UO "-" "-" 0 81 0 - "-"
问题总结
我正在尝试为我的网格外部托管在其他地方的外部端点施加断路器参数。但是,我设置的参数似乎并没有被强加,因为我仍然获得成功的 HTTP 200 响应,而我预计它会以 HTTP 503 开始失败。
工具版本为:
- Istio-1.2.4
- Kubernetes:v1.10.11
- Docker 桌面版本 2.0.0.3
重要配置:
global.outboundTrafficPolicy.mode
是REGISTRY_ONLY
.- Mesh 内
mTLS
。外部流量策略,TLS为DISABLED
相关资源
服务入口
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: external-service
spec:
hosts:
- external-service.sample.com
location: MESH_EXTERNAL
exportTo:
- "*"
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS
虚拟服务
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: external-service-vs
spec:
hosts:
- external-service.sample.com
http:
- timeout: 200ms
retries:
attempts: 1
perTryTimeout: 200ms
route:
- destination:
host: external-service.sample.com
port:
number: 80
目的地规则
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: external-service-dr
spec:
host: external-service.sample.com
trafficPolicy:
tls:
mode: DISABLE
connectionPool:
tcp:
maxConnections: 1
connectTimeout: 200ms
http:
http2MaxRequests: 1
http1MaxPendingRequests: 1
maxRequestsPerConnection: 1
maxRetries: 1
idleTimeout: 200ms
outlierDetection:
consecutiveErrors: 1
interval: 1s
baseEjectionTime: 10s
maxEjectionPercent: 100
测试
我在网格内有一个应用程序注入了 Envoy 代理。该应用程序基本上只是 运行 并发加载 HTTP1.1 GET external-service.sample.com/endpoint.
我调整了应用程序中的并发用户数(1 到 10)和每个用户每秒的请求数(1 到 20)。
我原以为响应会随着上升而开始失败。但事实并非如此。我自始至终都取得了成功。
关键问题
如果看到很刺眼的东西请指出来
我已经检查了来自我的 Envoy 代理的日志和 /stats(传出请求和响应)。我还需要检查哪些其他 istio 日志以进一步了解请求是否由 istio 执行并评估为 destinationrule?
我还没有真正直接解决这个问题。 但是,我从一开始就完成了整个设置,从设置 istio 开始,一切都从头开始。在那之后它已经抛出了预期的 HTTP 503。
要知道断路器的状态是相当具有挑战性的,而不是必要的。应该有一个 ticket 记录,但似乎尚未开始开发此类功能。
不过,在验证时,我确实查看了一些遥测指标以了解断路器状态。我认为这种方式可能会更好,因为我只想知道电路是关闭还是打开,而不是从多个输入数据进行分析。
谢谢。
除了 Istio 收集的统计数据 Mixer from nested Envoy instances, you might consider fetching Circuit Breaker events from Envoy Access logs。
自访问日志记录 enabled across Istio mesh plane, you can extract the relevant Circuit Breaker log entries, distinguished by specific response flags:
UO: Upstream overflow (circuit breaking) in addition to 503 response code.
并从容器的 envoy 代理访问日志中获取记录,即:
[2019-09-18T09:49:56.716Z] "GET /headers HTTP/1.1" 503 UO "-" "-" 0 81 0 - "-"