Как скрыть трафик от kube-probe в Kiali graph?

Я развернул приложение в кластере kubernetes + istio. Я использовал http-зонд для проверки готовности. В разделе Graph Kiali трафик kube-probe отображается в виде строки от unkonwn до httpbin. Я попытался добавить http-заголовок «x-b3-sampled», чтобы избежать записи для этого трафика. Но не работает. Есть ли способ скрыть трафик от kube-probe?

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpbin
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: httpbin
        version: v1
    spec:
      containers:
      - image: docker.io/citizenstig/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        ports:
        - containerPort: 8000
        readinessProbe:
          httpGet:
            path: /get
            port: 8000
            httpHeaders:
            - name: 'x-b3-sampled'
              value: '0'
          initialDelaySeconds: 5
          timeoutSeconds: 1
        livenessProbe:
          tcpSocket:
            port: 8000
          initialDelaySeconds: 5
          timeoutSeconds: 1

person Jeffrey    schedule 15.02.2019    source источник


Ответы (1)


ОБНОВЛЕНИЕ: это на самом деле будет исправлено в Istio 1.1, и приятно то, что вы можете легко применить патч самостоятельно, не дожидаясь версии 1.1, как это указано в конфигурациях yaml:

Ссылка на исправление: https://github.com/istio/istio/pull/10480

Итак, для Istio 1.0.x вам в основном нужно отредактировать настраиваемый ресурс типа Rule с именем promhttp в пространстве имен istio-system, чтобы установить следующее match выражение:

  match: (context.protocol == "http" || context.protocol == "grpc") && (match((request.useragent | "-"), "kube-probe*") == false)

Первоначальный ответ:

Я не уверен, есть ли для этого «чистое» решение, но есть обходной путь, описанный внизу этой страницы документа: https://istio.io/docs/tasks/traffic-management/app-health-check/#liveness-and-readiness-probes-with-http-request-option

Поскольку прокси Istio перехватывает только те порты, которые явно указаны в поле containerPort, трафик на порт 8002 обходит прокси Istio независимо от того, включен ли Istio взаимный TLS.

Таким образом, ваши конечные точки работоспособности могут использовать другой порт, который вы не объявляете как порты контейнера, и таким образом трафик не будет перехвачен прокси-сервером envoy и, следовательно, не будет генерировать телеметрию в Kiali.

Это не идеальное решение, поскольку оно заставляет вас формировать ваше приложение определенным образом для Istio ... но все же оно работает.

[Edit, только что обнаружил, что: https://istio.io/help/faq/telemetry/#controlling-what-the-sidecar-reports. Похоже, вы также можете отфильтровать запросы телеметрии на основе источника. Хотя я не уверен, сработает ли это в том случае, если источник "неизвестен"]

person Joel    schedule 15.02.2019