Не удалось установить цикл управления диапазоном в виртуальной службе Istio HTTP Retry

Описание ошибки

Я могу легко работать над добавлением нескольких мест назначения для канареечного развертывания, но когда я пытаюсь добавить повторную попытку, это не удается с пользовательской диаграммой Helm. Поскольку я не могу перебрать его.

Это проблема, потому что Retry привязана к каждому пункту назначения в соответствии с тем, что все должно повторяться.

Пожалуйста, найдите шаблон диаграммы руля ниже.

      apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: {{ .Values.virtualservice.name }}
  namespace: {{ .Values.namespace }} 
spec:
  hosts:
  - {{ .Values.virtualservice.hosts }} 
  gateways:
  - {{ .Values.virtualservice.gateways }} 
  http:
  - route:
      {{- range $key, $value := .Values.destination }}
    - destination:
        host: {{ $value.host }}
        subset: {{ $value.subset }} 
      weight: {{ $value.weight }}
    retries:
      attempts: {{ $value.retries.attempts }}
      perTryTimeout: {{ $value.retries.perTryTimeout }}
      retryOn: {{ $value.retries.retryOn }}
    timeout: {{ $value.retries.timeout }}
    {{- end }}

Журнал ошибок

      $ helm install asm-helm ./asm-svc-helm-chart -f values.yaml --dry-run
Error: INSTALLATION FAILED: YAML parse error on asmvrtsvc/templates/retry-svc.yaml: error converting YAML to JSON: yaml: line 21: did not find expected key

Версия

      $ kubectl version --short
Client Version: v1.24.0
Kustomize Version: v4.5.4
Server Version: v1.22.12-gke.300

$ helm version
v3.9.4+gdbc6d8e

Добавлен пример для справки

      spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 75
    retries:
      attempts: 3
      perTryTimeout: 2s
    - destination:
        host: reviews
        subset: v2
      weight: 25
    retries:
      attempts: 3
      perTryTimeout: 2s

1 ответ

Согласно схеме виртуальной службы, поле маршрута в виртуальной службе может иметь одинretriesполе.

Таким образом, цикл должен включатьdestinationкак массив.

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