Управление трафиком с помощью Istio
General | Комментировать запись
Управление трафиком (traffic management) — это процедура, что позволяет контролировать трафик, который генерируется в процессе передачи данных/браузинга или вызовов API.
Например, на локальном сервере или в облаке у нас есть настроенное приложение, и трафик генерируется, когда это приложение пытается выполнить определенные вызовы API, вызовы служб других сторонних сервисов или передачу данных через интернет.
Данные — это важный и уязвимый аспект любого приложения, а инфраструктура — это основа для их передачи. Трафик необходимо контролировать по защищенной инфраструктуре. Это позволит повысить безопасность и управление сервисами на одной платформе/инфраструктуре.
В этом мануале мы рассмотрим инструмент управления трафиком Istio.
Как работает Istio?
Istio управляет трафиком через предлагаемые им правила маршрутизации. Таким образом, приложение становится устойчивее к сбоям. Ведь весь входящий и исходящий трафик приложения мониторится.
Istio настраивает Envoy proxy как дополнительный контейнер приложения. Он отслеживает весь трафик, который направляется к приложению и от него для вызовов API/взаимодействия с сервисами и т. д.
Таким образом, базовая служба приложения остается незатронутой, а весь мониторинг трафика передается через дополнительный контейнер Envoy для обеспечения устойчивости и управления трафиком.
- Istio необходимо понимать конечные точки приложения для мониторинга трафика. Таким образом, он подключается к внутренней системе обнаружения сервисов для распознавания служб и конечных точек приложения.
- Когда сетевой вызов попадает в приложение, он направляется через Envoy proxy, а затем к конечной службе приложения. При этом sidecar полностью рендерит и мониторит трафик приложения.
- В Istio применяется модель round-robin для передачи или распределения трафика между установленными в инфраструктуре балансировщиками нагрузки.
Ресурсы управления трафиком в Istio
Разобравшись с работой Istio, давайте посмотрим на установленные в Istio ресурсы.
Virtual Service
С помощью Virtual Service можно определить правила маршрутизации трафика, которые помогают при попадании приложения в балансировщик нагрузки. Мы определяем правила и эквивалентные протоколы соответствия для конечной службы. Если правило соответствует критериям, трафик перенаправляется на конечную службу.
С помощью этой службы можно легко управлять нагрузкой трафика путем разделения запросов на обслуживание при помощи правил маршрутизации. Можно задавать и поддерживать поведение трафика для нескольких имен хостов в рамках одной конфигурации Virtual Service.
Давайте на примере разберемся в конфигурации Virtual Service.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: demo-vs spec: hosts: - demo.vs.com http: - match: - headers: end-user: exact: /api route: - destination: host: /
Рассмотрим этот пример подробно.
- Запись hosts включает домен или CNAME приложения.
- Затем мы переходим к http routing и настраиваем соответствующую backend service на определенный host/destination.
- Под разделом match находится конфигурация backend service, которая будет вызвана, как только запись host совпадет.
- http section включает правила маршрутизации, которые перенаправляются к destination.
- Как только веб-трафик/запрос попадает на шлюз Istio, он ищет запись своего CNAME/FQDN. При успешном совпадении он переводит трафик на Virtual Service, который направляет его на определенную k8 service.
Gateway
Gateway обеспечивает гибкость управления и мониторинга входящего и исходящего трафика на глобальном (envoy) уровне. Мы можем указать тип трафика (протокол/правила), который мы хотим пустить в Istio service mesh для дальнейшей маршрутизации к месту назначения.
Итак, как только URL-адрес приложения попадает в балансировщик нагрузки, он ищет эквивалентный gateway. Как только он находит запись, он позволяет хосту приложения войти в mesh.
Пример работы Gateway:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: demo-gtwy spec: selector: app: demo servers: - port: number: 443 name: https protocol: HTTPS hosts: - demo.vs.com tls: mode: SIMPLE credentialName: demo-tls-cert
Вот что делает эта конфигурация:
- Как только веб-трафик попадает на балансировщик нагрузки, он направляется на Istio gateway. Gateway позволяет трафику входить в service mesh через указанный порт (в данном случае 443).
- На этом этапе маршрутизация трафика к backend service не происходит.
- Gateway ищет достоверность CNAME через секретный ключ TLS (учетные данные).
- Как только gateway подтвердит и разрешит трафик от host, virtual service выполнит маршрутизацию к цели назначения.
Sidecar
С помощью Sidecar мы можем ограничивать и управлять трафиком, который поступает на Envoy proxy. В общем случае Istio настраивает Envoy Proxy, который принимает трафик через порты, связанные с Workload приложения. У sidecar есть следующие преимущества:
- Фильтрация и управление протоколами и портами, которые должен принимать Envoy.
- Фильтрация и запрет Envoy proxy на получение или пересылку трафика определенному набору служб.
- Разрешение/ограничение трафика для служб в разных именных пространствах.
Теперь разберем Sidecars на примере:
apiVersion: networking.istio.io/v1alpha3 kind: Sidecar metadata: name: default namespace: default spec: egress: - hosts: - "./*" - "bookinfo/*"
Вот что это значит:
- Приведенная выше конфигурация применяет настройку sidecar к именному пространству default.
- Эта конфигурация позволяет внешнему/исходящему трафику достигать backend сервисов только для именных пространств default и bookinfo.
- При этом маршрутизация/доступность трафика для других именных пространств ограничивается.
Подводим итоги
На этом мы подошли к завершению данной темы. Теперь вы знаете, как работает инструмент Istio и из каких компонентов он состоит.
Читайте также: Балансировка трафика в кластере Galera
Tags: Istio