Envoy Proxy — это высокопроизводительный прокси-сервер с открытым исходным кодом, разработанный для современных облачных архитектур. Он превосходно справляется с управлением сетевым трафиком, балансировкой нагрузки и наблюдаемостью. В этой статье мы рассмотрим различные методы и приведем примеры кода, чтобы продемонстрировать, как эффективно использовать Envoy Proxy.
- Настройка прокси-сервера Envoy:
Чтобы начать, нам нужно настроить прокси-сервер Envoy в нашей системе. Вот пример базового файла конфигурации:
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 8080
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
codec_type: auto
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: backend
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: backend
http_filters:
- name: envoy.router
clusters:
- name: backend
connect_timeout: 0.25s
type: static
lb_policy: round_robin
load_assignment:
cluster_name: backend
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: backend-service
port_value: 8080
- Балансировка нагрузки.
Envoy Proxy предоставляет возможности балансировки нагрузки для распределения трафика между несколькими серверными службами. Вот пример настройки балансировки нагрузки с помощью взвешенного циклического перебора:
clusters:
- name: backend-cluster
connect_timeout: 0.25s
type: strict_dns
lb_policy: round_robin
load_assignment:
cluster_name: backend-cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: backend-service-1
port_value: 8080
- endpoint:
address:
socket_address:
address: backend-service-2
port_value: 8080
- Управление трафиком.
Envoy Proxy обеспечивает детальный контроль над управлением трафиком. Вы можете настроить правила маршрутизации, разделение трафика и внесение ошибок. Вот пример разделения трафика между двумя сервисами A и B:
route_config:
name: local_route
virtual_hosts:
- name: backend
domains: ["*"]
routes:
- match:
prefix: "/api"
route:
cluster: service-a
prefix_rewrite: "/v1"
- match:
prefix: "/api"
route:
cluster: service-b
prefix_rewrite: "/v2"
route:
cluster: backend
- Аутентификация и авторизация:
Envoy Proxy поддерживает различные механизмы аутентификации и авторизации. Вот пример включения аутентификации на основе JWT:
http_filters:
- name: envoy.filters.http.jwt_authn
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication
providers:
provider1:
issuer: issuer1
audiences:
- audience1
remote_jwks:
http_uri:
uri: https://example.com/.well-known/jwks.json
Envoy Proxy — мощный инструмент управления сетевым трафиком в современных архитектурах. В этой статье мы рассмотрели различные методы на примерах кода, включая настройку Envoy Proxy, балансировку нагрузки, управление трафиком и аутентификацию. Используя возможности Envoy Proxy, вы можете повысить отказоустойчивость, масштабируемость и безопасность своих приложений.