Полгода назад мы закончили миграцию всех наших stateless сервисов в kubernetes. На первый взгляд задача достаточно простая: нужно развернуть кластер, написать спецификации приложений и вперед. Из-за одержимости в вопросе обеспечения стабильности в работе нашего сервиса пришлось сразу начать разбираться с тем, как работает k8s и тестировать различные сценарии отказов. Больше всего вопросов у меня возникало ко всему, что касается сети. Один из таких "скользких" моментов — работа сервисов (Services) в kubernetes.
В документации нам говорят:
- выкатите приложение
- задайте liveness/readiness пробы
- создайте сервис
- дальше все будет работать: балансировка нагрузки, обработка отказов итд.
Но на практике все несколько сложнее. Давайте посмотрим, как оно работает на самом деле.