Перейти к содержанию

Шаблон заявки на создание/изменение Istio VirtualService

Заполните поля ниже. DevOps создаст VirtualService строго по этой заявке.


Сделать VS

  • Базовое описание: <кратко опишите, зачем нужен VS и что должно заработать>

Gateways и Hosts

  • gateways (входные шлюзы Istio; порядок важен при нескольких совпадениях):
  • <например, api-gateway>
  • hosts (FQDN, на которые будет приходить трафик):
  • <например, api.sarex.io>

HTTP правила (повторяемый блок)

Для каждого правила маршрутизации заполните отдельный блок:

Правило №X

  • match (что сопоставляем):
  • type:
  • value: <например, /documentations/api/>
  • rewrite (как переписать путь; опционально):
  • rewrite.uri: <например, /api/>
  • route.destination (куда отправлять трафик):
  • host:
  • port.number: <например, 80>
  • timeout (опционально): <например, 600s>
  • headers.response.set (опционально, заголовки в ответе):
  • Access-Control-Expose-Headers: Content-Length-Original
  • <другие по необходимости>

CORS (для этого правила)

  • allowCredentials:
  • allowHeaders (список; какие заголовки клиент может отправлять и зачем):
  • Authorization
  • Content-Type
  • Cache-control
  • Range
  • Identity
  • <добавьте при необходимости>
  • allowMethods (список; HTTP-методы, которые разрешены):
  • POST
  • GET
  • PATCH
  • DELETE
  • HEAD
  • PUT
  • OPTIONS
  • allowOrigins (откуда можно обращаться; используйте ровно один вариант):
  • exact: <например, "*" или конкретный хост>
  • regex: <например, (https://..sarex.io)|(https://localhost:.)>
  • maxAge: <например, 24h>

Аннотации и метки (опционально)

  • metadata.annotations (key: value):
  • <пример: meta.helm.sh/release-name: documentations>
  • metadata.labels (key: value):
  • <пример: app.kubernetes.io/managed-by: Helm>

Проверка после выката

  • Тестовые URL/пути: <список URL, которые должны отвечать>
  • Ожидаемый результат: <коды/заголовки/краткое описание>

Пример итогового VirtualService (DevOps соберёт по заявке)

Ниже — пример структуры VS, который будет создан на основе заполненной заявки.

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: <обязательное_имя_VS>
  namespace: <namespace_из_заявки>
  labels:
    app.kubernetes.io/managed-by: Helm
  annotations: {}
spec:
  gateways:
    - <gateway_1>
  hosts:
    - <host_1>
  http:
    - corsPolicy:
        allowCredentials: <true|false>
        allowHeaders:
          - Authorization
          - Content-Type
          - Cache-control
          - Range
          - Identity
        allowMethods:
          - POST
          - GET
          - PATCH
          - DELETE
          - HEAD
          - PUT
          - OPTIONS
        allowOrigins:
          # Используйте ровно один вариант ниже
          - exact: "*"
          # - regex: "(https://.*\\.sarex\\.io)|(https://localhost:.*)"
        maxAge: 24h
      headers:
        response:
          set:
            Access-Control-Expose-Headers: Content-Length-Original
      match:
        - uri:
            prefix: </пример/пути/>
      rewrite:
        uri: </пример/нового/пути>
      route:
        - destination:
            host: <fqdn_сервиса_в_кластере>
            port:
              number: <порт>