Kubernetes ISTIO:启用出口断路

Kubernetes ISTIO:启用出口断路,kubernetes,istio,Kubernetes,Istio,我无法通过出口配置使断路配置在我的elb上工作 ELB elb的成功率为25%(错误率为75%,错误率为500%,状态为200的成功率为25%), elb有4个实例,只有1个返回成功响应,其他实例配置为返回500个错误以进行测试 设置 k8s:v1.7.4 istio:0.5.0 环境:aws上的k8s 出口规则 apiVersion: config.istio.io/v1alpha2 kind: EgressRule metadata: name: elb-egress-rule sp

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

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

设置

  • k8s:v1.7.4

  • istio:0.5.0

  • 环境: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

从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
响应

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

这实际上意味着
httpconsutiveerrors
不会影响外部服务。Istio的
外部服务
将取代
出口规则
,部分解决这一功能缺失问题


请参阅Istio
外部服务的文档
由多个端点支持-

我为特使打开了一个问题-。让我们看看如何测试断路器(特使的异常检测)。请注意,对于Istio,您的xxxx.us-east-1.elb.amazonaws.com只是一个随机返回200和500的主机。一旦xxxx.us-east-1.elb.amazonaws.com返回三个连续错误,断路器应断开。
#!/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