我正在发送带有以下 header 的 http 请求。
标题 = {"InstanceId": "1"}
如何使用此 header 值(即 1)路由到集群(端点)
我实际上想在 envoy.yaml 中做什么:
如果(header.InstanceId == 1)
Route to cluster A
否则如果(header.InstanceId == 2)
Route to cluster B
谁能帮帮我。 提前致谢。
最佳答案
如果你想根据headers将流量重定向到不同的集群,你可以定义下面的监听器(有趣的部分是static_resources.listeners[0].filter_chains[0].filters[0].route_config .virtual_hosts[0].routes
部分,定义了两个匹配):
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 8080
filter_chains:
- filters:
- name: envoy.filters.network.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: "/"
headers:
- name: "InstanceId"
exact_match: "1"
route:
cluster: clusterA
- match:
prefix: "/"
headers:
- name: "InstanceId"
exact_match: "2"
route:
cluster: clusterB
http_filters:
- name: envoy.filters.http.router
关于routes - 如何在 Envoy Proxy 中基于 Http header 进行路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70959882/