【问题标题】:ISTIO: enable circuit breaking on egressISTIO:启用出口断路
【发布时间】:2018-02-26 13:34:10
【问题描述】:

我无法通过出口配置让断路配置在我的 elb 上工作。

ELB elb 的成功率为 25%(75% 500 错误和 25% 状态为 200), elb 有 4 个实例,只有 1 个返回成功响应,其他实例配置为返回 500 错误以进行测试。

设置

  • k8s: v1.7.4

  • istio:0.5.0

  • env:aws 上的 k8s

出口规则

apiVersion: config.istio.io/v1alpha2
kind: EgressRule
metadata:
  name: elb-egress-rule
spec:
  destination:
    service: xxxx.us-east-1.elb.amazonaws.com
  ports:
    - port: 80
      protocol: http

目的地政策

kind: DestinationPolicy
metadata:
  name: elb-circuit-breaker
spec:
  destination:
    service: xxxx.us-east-1.elb.amazonaws.com
  loadBalancing:
    name: RANDOM
  circuitBreaker:
    simpleCb:
      maxConnections: 100
      httpMaxPendingRequests: 100
      sleepWindow: 3m
      httpDetectionInterval: 1s
      httpMaxEjectionPercent: 100
      httpConsecutiveErrors: 3
      httpMaxRequestsPerConnection: 10

路由规则:未设置

测试

apiVersion: v1
kind: Service
metadata:
  name: sleep
  labels:
    app: sleep
spec:
  ports:
  - port: 80
    name: http
  selector:
    app: sleep
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: sleep
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: sleep
    spec:
      containers:
      - name: sleep
        image: tutum/curl
        command: ["/bin/sleep","infinity"]
        imagePullPolicy: IfNotPresent

.

export SOURCE_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
    kubectl exec -it $SOURCE_POD -c sleep bash

从 pod 并行发送请求

#!/bin/sh
set -m # Enable Job Control
for i in `seq 100`; do # start 100 jobs in parallel
  curl xxxx.us-east-1.elb.amazonaws.com &
done

回应

【问题讨论】:

  • 我为特使开了一个问题 - github.com/envoyproxy/envoy/issues/2671。让我们看看如何测试断路器(Envoy 的异常值检测)。请注意,对于 Istio,您的 xxxx.us-east-1.elb.amazonaws.com 只是一个随机返回 200 和 500 的主机。一旦 xxxx.us-east-1.elb.amazonaws.com 返回三个连续错误,断路器应该会打开。

标签: kubernetes istio


【解决方案1】:

目前,Istio 考虑使用 Egress Rule 来指定单个主机。由于负载均衡器对 Envoy(Istio 的 sidecar 代理实现)的恐慌阈值,该单个主机不会被弹出。 Envoy 的默认恐慌阈值为 50%。这意味着至少需要两台主机才能弹出一个主机,因此Egress Rule的单个主机不会被弹出。

这实际上意味着httpConsecutiveErrors 不会影响外部服务。这种功能缺失应该通过 Istio 的 External Services 来部分解决,它将取代 Egress Rules

查看由多个端点支持的 Istio External Services 的文档 -https://github.com/istio/api/blob/master/routing/v1alpha2/external_service.proto#L113

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 2019-04-18
    • 2018-11-10
    • 2019-01-20
    • 2021-10-13
    • 2020-12-27
    • 1970-01-01
    • 2023-01-18
    • 2018-04-24
    相关资源
    最近更新 更多