setting :authority in initial_metadata creates two :authority values
When I attempt to set the initial_metadata value as a vector in dispatch_grpc_call like so
dispatch_grpc_call(
"upstream-cluster",
"test.Service",
"testMethod",
vec![
(":scheme", "https".as_bytes()),
(":authority", "foo.aws.foobar.cl".as_bytes())
],
Some(request.write_to_bytes().unwrap().as_slice()),
Duration::from_secs(2),
)
I see in the Envoy logs that the headers sent are
':authority', 'upstream-cluster,foo.aws.foobar.cl'
Is there a way that :authority can only be set to foo.aws.foobar.cl?
gRPC's initial metadata is supplemental metadata that's encoded as HTTP headers, but those shouldn't be used as HTTP headers, and you cannot use it to override HTTP headers.
Having said that, it looks that Envoy implementation has a bug that allows setting two :authority values, which it concatenates.
Could you open issue there? Thanks! cc @mpwarres
Also, answering your original question, I think you should be able to configure :authority in upstream-cluster's configuration in Envoy using the Endpoint's hostname field.
I've tried to see if in the cluster definition under load_assignment setting hostname in endpoint as you mentioned, but it doesn't seem to use that value in the authority header
load_assignment:
cluster_name: upstream-cluster
endpoints:
- lb_endpoints:
- endpoint:
hostname: foo.aws.foobar.cl
address:
socket_address:
address: foo.aws.foobar.cl
port_value: 80