Збір метрик для TCP-сервісів
Це завдання показує, як налаштувати Istio для автоматичного збору телеметрії для TCP-сервісів у мережі. Наприкінці цього завдання ви зможете запитувати стандартні TCP-метрики для вашої мережі.
Для прикладу у цьому завданні використовується демонстраційний застосунок Bookinfo.
Перед початком
Встановіть Istio у вашому кластері та розгорніть застосунок. Вам також потрібно встановити Prometheus.
Це завдання передбачає, що застосунок Bookinfo буде розгорнуто в просторі імен
default
. Якщо ви використовуєте інший простір імен, оновіть приклад конфігурації та команди.
Збір нових даних телеметрії
Налаштуйте Bookinfo для використання MongoDB.
Встановіть
v2
версію сервісуratings
.$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml@ serviceaccount/bookinfo-ratings-v2 created deployment.apps/ratings-v2 created
Встановіть сервіс
mongodb
:$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-db.yaml@ service/mongodb created deployment.apps/mongodb-v1 created
Зразок Bookinfo розгортає кілька версій кожного мікросервісу, тому почніть зі створення правил призначення які визначають підмножини сервісу, що відповідають кожній версії, та політику балансування навантаження для кожної підмножини.
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@
Якщо ви ввімкнули взаємний TLS, запустіть наступну команду замість цього:
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all-mtls.yaml@
Щоб показати правила призначення, запустіть наступну команду:
$ kubectl get destinationrules -o yaml
Почекайте кілька секунд, щоб правила призначення поширилися перед додаванням віртуальних сервісів, які посилаються на ці підмножини, оскільки посилання на підмножини у віртуальних сервісах залежать від правил призначення.
Створіть віртуальні сервіси
ratings
таreviews
:$ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-db.yaml@ virtualservice.networking.istio.io/reviews created virtualservice.networking.istio.io/ratings created
Надішліть трафік до демонстраційного застосунку.
Для застосунку Bookinfo відвідайте
http://$GATEWAY_URL/productpage
у вашому вебоглядачі або використайте наступну команду:$ curl http://"$GATEWAY_URL/productpage"
Перевірте, чи генеруються та збираються значення TCP-метрик.
У середовищі Kubernetes налаштуйте порт-форвардинг для Prometheus за допомогою наступної команди:
$ istioctl dashboard prometheus
Перегляньте значення TCP-метрик у вікні оглядача Prometheus. Виберіть Graph. Введіть метрику
istio_tcp_connections_opened_total
абоistio_tcp_connections_closed_total
і виберіть Execute. Таблиця, що показується на вкладці Console, містить записи, подібні до:istio_tcp_connections_opened_total{ destination_version="v1", instance="172.17.0.18:42422", job="istio-mesh", canonical_service_name="ratings-v2", canonical_service_revision="v2"}
istio_tcp_connections_closed_total{ destination_version="v1", instance="172.17.0.18:42422", job="istio-mesh", canonical_service_name="ratings-v2", canonical_service_revision="v2"}
Розуміння збору TCP телеметрії
У цьому завданні ви використали конфігурацію Istio для автоматичного створення та використання метрик для всього трафіку до TCP-сервісу в межах мережі. TCP-метрики для всіх активних зʼєднань стандартно записуються кожні 15s
, і цей таймер можна налаштувати
через tcpReportingDuration
. Метрики для зʼєднання також записуються наприкінці зʼєднання.
Атрибути TCP
Декілька специфічних для TCP атрибутів уможливлюють політику та контроль TCP в Istio. Ці атрибути генеруються проксі Envoy та отримуються з Istio за допомогою метаданих вузла Envoy. Envoy передає метадані вузла до Peer Envoys за допомогою тунелювання на основі ALPN та протоколу на основі префіксів. Ми визначаємо новий протокол istio-peer-exchange
, який оголошується та пріоритезується клієнтом і sidecars на стороні сервера в мережі. Переговори ALPN визначають протокол як istio-peer-exchange
для зʼєднань між проксі-серверами, що підтримують Istio, але не між проксі-сервером, що підтримує Istio, та будь-яким іншим проксі.
Цей протокол розширює TCP наступним чином:
- TCP-клієнт, як першу послідовність байтів, надсилає рядок магічних байтів та корисне навантаження з префіксом довжини.
- TCP-сервер, як першу послідовність байтів, надсилає рядок магічних байтів та корисне навантаження з префіксом довжини. Ці корисні навантаження є серіалізованими метаданими у форматі protobuf.
- Клієнт і сервер можуть писати одночасно, а не за порядком. Розширювальний фільтр в Envoy далі обробляє низхідну та висхідну інформацію, поки або рядок магічних байтів не буде знайдено, або все корисне навантаження не буде прочитано.
Очищення
Видаліть процес
port-forward
:$ killall istioctl
Якщо ви не плануєте досліджувати наступні завдання, зверніться до інструкцій очищення Bookinfo для завершення роботи застосунком.