Pull to refresh

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 мс роли не играет.

А 2мс взялись откуда? От того, что другие люди со светлыми лицами написали такую же хрень - только с другой стороны.

А в нормальных платформах response time должен укладываться в 100-200мкс. И оборудование надо в 10 раз меньше на те же задачи.

Подскажите, пожалуйста, есть ли у 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

Видел этот lua-подход, но он, как понимаю, низкоуровневый и даже не совсем в рамках istio) В любом случае, спасибо, видимо придется пользоваться им.

Sign up to leave a comment.