Istio Sidecar, чтобы повторить попытку с указанными кодами состояния (503)

По умолчанию, если мы ничего не определяем, Istio сгенерирует что-то вроде следующей конфигурации маршрута / повтора Envoy:

      {
 "cluster": "outbound|9100||quote-svc-cip.quote.svc.cluster.local",
 "timeout": "0s",
 "retry_policy": {
  "retry_on": "connect-failure,refused-stream,unavailable,cancelled,retriable-status-codes",
  "num_retries": 2,
  "retry_host_predicate": [
   {
    "name": "envoy.retry_host_predicates.previous_hosts"
   }
  ],
  "host_selection_retry_max_attempts": "5",
  "retriable_status_codes": [
   503
  ]
 },
 "max_grpc_timeout": "0s"
}

Но если мы укажем свои, например:

      apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: book-svc-cip
  namespace: book
spec:
  hosts:
  - book-svc-cip.book.svc.cluster.local
  http:
  - retries:
      attempts: 3
      retryOn: connect-failure,refused-stream,unavailable,retriable-status-codes
    route:
    - destination:
        host: book-svc-cip.book.svc.cluster.local

Сгенерированный конфиг будет выглядеть так:

      {
 "cluster": "outbound|9281||book-svc-cip.book.svc.cluster.local",
 "timeout": "0s",
 "retry_policy": {
  "retry_on": "connect-failure,refused-stream,unavailable,retriable-status-codes",
  "num_retries": 3,
  "retry_host_predicate": [
   {
    "name": "envoy.retry_host_predicates.previous_hosts"
   }
  ],
  "host_selection_retry_max_attempts": "5"
 },
 "max_grpc_timeout": "0s"
}

Обратите внимание, что отсутствует.

По умолчанию выглядит так, как будто он определен в https://github.com/istio/istio/blob/1.9.0/pilot/pkg/networking/core/v1alpha3/route/retry/retry.go#L38-L39 . Но нет опции / поля для настройки через VirtualService.

Как мы могли определить retriable_status_codes в Истио?

2 ответа

Пример в документации должен работать (согласно исходному коду); Я могу убедиться, что это работает на более поздней версии.

https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPRetry

          retries:
      attempts: 3
      perTryTimeout: 2s
      retryOn: connect-failure,refused-stream,503

Исходный код для 1.6.9 показывает, что приведенный выше пример должен работать .

В настоящее время нет прямой конфигурации Istio для обновления (v1.10.2).

Но мы можем сделать это через EnvoyFilter, например:

      apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: retriable-status-codes-sidecar-outbound
  namespace: istio-system
spec:
  configPatches:
  - applyTo: HTTP_ROUTE
    match:
      context: SIDECAR_OUTBOUND
    patch:
      operation: MERGE
      value:
        route:
          retry_policy:
            retriable_status_codes:
            - 503

Вышеупомянутое будет вводить retriable_status_codes для исходящих звонков на все коляски (потому что мы помещаем его в istio-system пространство имен).

Другие вопросы по тегам