Envoy proxy: отличная тема, даже без кубера 🔥
Envoy - это L4/L7 proxy, раньше был в Lyft, а теперь - CNCF.
https://github.com/envoyproxy/envoyОн позволяет легко и быстро построить service-to-service, front proxy или double proxy (или даже все в месте). Вот, например, так:
https://www.envoyproxy.io/docs/envoy/latest/intro/deployment_types/double_proxyКонфигурация кажется немного запутанной, но через пару часов все ясно и понятно - намного проще и быстрее чем HAproxy/nginx, etc.
Пример double proxy конфигурации:
https://github.com/envoyproxy/envoy/blob/master/configs/envoy_double_proxy_v2.template.yamlОн очень классно интегрируется с Consul (в том числе как communication bus для Consul Connect), и может динамически слушать порты, строить роуты, делать всякую магию, которую в случае с HAproxy/nginx нужно было решать всякими ужасными темплейтами и генерацией конфигурации.
Все вы знаете реализацию Envoy внутри Istio, но кто хочет попроще или не в k8s - можно брать просто Envoy.
Из сомнительных моментов могу упомянуть:
▶️ Если хотите запустить несколько Envoy контейнеров на одной ноде, нужно передавать дополнительный параметр - иначе не будет работать:
https://www.envoyproxy.io/docs/envoy/latest/operations/cli#cmdoption-base-id▶️ Prometheus exporter встроен прямо в Envoy, но с оговорками. Путь - /stats/prometheus (what?, почему не /metrics, или почему даже редиректа нету?), и второй момент - метрики отдаются через админский интерфейс, а он не защищен. Вот issue:
https://github.com/envoyproxy/envoy/issues/2763 - должны сделать.
Мы сейчас как раз в процессе внедрения, пока что впечатления крайне положительные, могу рекомендовать 🙂
И еще расшарю для вас gist с relabel_configs для prometheus, который берет таргеты из Consul:
https://gist.github.com/Mykolaichenko/9ab505876237999466a6e3b506ef598a