Шаблон заявки на создание/изменение 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: <порт>