Comments 10
Спасибо! Подскажите пожалуйста, как настроить istio, чтобы в приложения (бекенд) отдавались запросы с заголовками traceparent
и tracestate
по стандартам OpenTelemetry (https://www.w3.org/TR/trace-context/)? Так как современные ПО умеют получать такие заголовки и пробрасывать спаны дальше, не теряя контекст? Если трассировка, отправляемая в Jaeger будет обрываться на бекенде, то мы теряем львиную и самую полезную информацию.
Нужно включить мониторинг запросов настройках Istio. Это обычно выполняется при установке Istio. Но вообще, вы можете использовать эту команду в баш:
istioctl manifest apply --set values.telemetry.enabled=true
Далее создаем конф. маршрута для бэкенда,нужно настроить маршруты Istio, чтобы передавать заголовки traceparent и tracestate. для этого вы можете использовать манифест VirtualService:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-backend
spec:
hosts:
- my-backend-service
http:
- match:
- uri:
prefix: /
route:
- destination:
host: my-backend-service
headers:
request:
set:
traceparent: request.headers["traceparent"]
tracestate: request.headers["tracestate"]
далее
istioctl manifest apply
Прикольно. К каждому пакету добавляется дикое latency и похоже это никого не парит .интересная модель работы
У Фланта есть презентации по istio, там они подтвердили опытами указанные в документации 2 мс оверхеда. Но, конечно, если бэк отрабатывает за то же время, это может быть критично.
Причем здесь бэк?
Физическое время прохождения пакета через одноуровневую сеть - 5 микросекунд. Микро. Эта хрень замедляет скорость сети в 400 раз
Притом, что если клиент ждет ответа секунду, 2 мс роли не играет.
Подскажите, пожалуйста, есть ли у istio удобный способ модифицировать body http-ответа?
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: my-envoy-filter
spec:
workloadSelector:
labels:
app: your-app-label
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_OUTBOUND
listener:
filterChain:
filter:
name: "envoy.http_connection_manager"
subFilter:
name: "envoy.router"
patch:
operation: INSERT_BEFORE
value:
name: my-filter
typed_config:
"@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
inlineCode: |
function envoy_on_response(response_handle)
local body = response_handle:body()
body:setBytes(0, "Modified response body")
end
Использование Istio для управления трафиком и мониторинга в микросервисах