istio - отслеживание выходного трафика - PullRequest
0 голосов
/ 18 мая 2019

Я установил Istio с

gateways.istio-egressgateway.enabled = true

У меня есть служба, которая использует внешние службы, поэтому я определяю следующее правило выхода.

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-service1
spec:
  hosts:
  - external-service1.com
  ports:
  - number: 80
    name: http
    protocol: HTTP
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS
  location: MESH_EXTERNAL

Но, используя Jaeger, я не вижу трафика к внешней службе и, таким образом, могу обнаружить проблемы в сети.

Я пересылаю соответствующие заголовки во внешнюю службу (x-request-id, x-b3-traceid, x-b3-spanid, b3-parentpanid, x-b3-samples, x-b3-flags, x -ot-пролетный-контекст)

Это правильное поведение? что происходит? Могу ли я иметь только статистику внутренних звонков? Как мне получить статистику для выходного трафика?

1 Ответ

1 голос
/ 05 июня 2019

Предполагая, что ваши сервисы определены во внутреннем реестре сервисов Istio.Если нет, настройте его в соответствии с инструкцией service-defining.

В HTTPS вся информация, связанная с HTTP, такая как метод, путь URL-адреса, код ответа, зашифрована, поэтому Istio не может видеть и не может контролировать эту информацию для HTTPS.Если вам необходимо отслеживать информацию, связанную с HTTP, при доступе к внешним службам HTTPS, вы можете разрешить своим приложениям отправлять запросы HTTP и настраивать Istio для выполнения создания TLS.

Сначала вам нужно переопределить ваш ServiceEntry и создайте VirtualService для перезаписи порта HTTP-запроса и добавления DestinationRule для выполнения инициализации TLS.

kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-service1
spec:
  hosts:
  - external-service1.com
  ports:
  - number: 80
    name: http-port
    protocol: HTTP
  - number: 443
    name: http-port-for-tls-origination
    protocol: HTTP
  resolution: DNS
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: external-service1
spec:
  hosts:
  - external-service1.com
  http:
  - match:
    - port: 80
    route:
    - destination:
        host: external-service1.com
        port:
          number: 443
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: external-service1
spec:
  host: external-service1.com
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN
    portLevelSettings:
    - port:
        number: 443
      tls:
        mode: SIMPLE # initiates HTTPS when accessing external-service1.com
EOF

VirtualService перенаправляет HTTP-запросы на порт 80 на порт 443, где соответствующий DestinationRule затем выполняет инициацию TLS,В отличие от предыдущего ServiceEntry, на этот раз протокол на порту 443 является HTTP, а не HTTPS, потому что клиенты будут отправлять только HTTP-запросы, а Istio обновит соединение до HTTPS.

Надеюсь, это поможет.

...