Translate

середа, 27 квітня 2022 р.

Istio. Part II: Concepts And Traffic Management

Минулого разу ми познайомились із Service Mesh, поговорили про історичні передумови його появи та встановили Istio. Про особливості його використання згадали лише мимохіть, тож в цій частині спробуємо це виправити.

Для того щоб рухатись далі необхідні робочі Kubernetes та Istio. Версії, котрими я користуюсь, можна знайти в попередніх статтях. Для зручності також можна встановити MetalLB, що реалізує програмний LoadBalancer, хоч він і не обов'язковий в цьому випадку.

Основні додаткові абстракції, котрі привносить Istio в Kubernetes, реалізовані через CRD-розширення:

  • Gateway. Направляє трафік на відповідний VirtualService в залежності від доменного імені. У деякому приближенні про Gateway можна думати як про балансувальник, котрий стоїть перед всіма ресурсами. Разом із VirtualService виступає як більш гнучка заміна Kubernetes Ingress.
  • VirtualService. Абстракція Istio, котра описує, як запити мають потрапляти до кінцевого K8s сервісу. На відміну від Gateway працює із внутрішнім трафіком.
  • DestinationRule. Описує підмножини можливих сервісів та їх мапінги. Їх використовує VirtualService для розрізнення на яку саме версію сервісу має піти трафік. Окрім цього тут також описуються опції Сircuit Вreaker логіки.
  • ServiceEntry. Абстракція, що відповідає за додавання записів до внутрішнього реєстру сервісів Istio (service registry). Після чого Envoy може відправляти трафік на таку адресу, як ніби вона всередині mesh-мережі.

Одразу складно зрозуміти їх призначення, проте далі має бути зрозуміліше.


1. KUBERNETES ISTIO INGRESS

Default профіль
Istio вже має встановлений Ingress-контролер, тож необхідності встановлювати іншу реалізацію немає. Що таке Ingress я писав неодноразово, про це можна прочитати наприклад тут. Перейти до його використання можна за лічені хвилини.

субота, 16 квітня 2022 р.

Istio. Part I: Service Mesh. Intro And Installation

Це вступна перша стаття про Istio і основи його роботи. У ній також торкнемось основ Service Mesh, його призначення та бонусів, що він надає.


1. WHAT IS SERVICE MESH

Отже почнемо із Service Mesh. Однією із причин її появи стало збільшення кількості різноманітних мікросервісів в інфраструктурах великих компаній після ділення монолітних додатків. Як наслідок цього процесу зросла кількість внутрішнього мережевого трафіку, котрий потрібно було якось "приборкувати". 

Разом із тим була необхідність в розмежуванні коду додатків та коду-обв'язки на кшталт балансування трафіку на рівні запитів (request-level load balancing), circuit-breaking (мережевий розрив інтеграції сервісів після досягнень певних показників запитів), дзеркалювання трафіку (mirroring, тобто повторення трафіку на декілька сервісів, наприклад, для тестування), трейсінгу тощо. Попередньо цей функціонал реалізовувався в окремих, іноді закритих, бібліотеках великих компаній (Hysterix в Netflix, Finagle в компанії Twitter тощо). У сучасному світі розгорнути додатковий проксі значно простіше ніж інтегрувати додаткову бібліотеку в кожне програмне рішення. До того ж вони можуть бути написані на різних мовах програмування, що ще більше підвищує вартість розробки.

Підсумовуючи все вищесказане, Service Mesh - це додатковий шар програмної інфраструктури для забезпечення більшого контролю внутрішньої взаємодії сервісів на мережевому рівні та їх моніторингу. Сама ідея досить молода, проте швидко набирає обертів та кількість її реалізацій стає дедалі більшою. В основі роботи Service Mesh, як правило, присутній додатковий сервіс-проксі, на котрий кожен додаток відправляє трафік, і власне вже потім проксі перенаправляє увесь трафік за необхідною адресою. Також він може реалізувати деякі вищезгадані патерни програмування, шифрування та моніторингу всього, що відбувається між мікросервісами, телеметрію тощо. Звісно все опціонально, тобто може вмикатись і вимикатись за потреби.

Найбільш популярні реалізації Service Mesh, що не прив'язані до cloud-платформ:

  • Consul Connect. Продукт відомої HashiCorp. Розроблювався як рішення для власної платформи Nomad, проте наразі доступний і для Kubernetes. У його основі також Envoy.
  • Linkerd. Проект входить до CNCF і фокусується більше на простоті ніж гнучкості.
  • Traefik Mesh. Також основна ціль - простота інсталяції і підтримки. На відміну від більшості конкурентів, у якості проксі виступає Traefik
  • Kuma. Platform-agnostic рішення, що може обслуговувати не лише Kubernetes сервіси, а також звичайні віртуальних машини. Основним мейтейнером Kuma є Kong, виробник популярного шлюзу Kong Gateway з відкритим кодом. Має статус CNCF Sandbox проєкту.
  • OSM (Open Service Mesh). Імплементація від Microsoft, тож ймовірно це непогане рішення для Azure. Використовує всі ті ж популярні дизайн-принципи що і конкуренти: Data/Control plane, Envoy, а також реалізує SMI (Service Mesh Interface)
  • Istio. Мабуть найбільш функціональний і як наслідок дещо складніший за інші рішення. Про нього, як я вже обіцяв надалі і піде мова.