diff --git a/agent/configentry/merge_service_config.go b/agent/configentry/merge_service_config.go index f11d96fcc5..b131b7e7a7 100644 --- a/agent/configentry/merge_service_config.go +++ b/agent/configentry/merge_service_config.go @@ -173,11 +173,21 @@ func MergeServiceConfig(defaults *structs.ServiceConfigResponse, service *struct us.MeshGateway.Mode = remoteCfg.MeshGateway.Mode } + preMergeProtocol, found := us.Config["protocol"] // Merge in everything else that is read from the map if err := mergo.Merge(&us.Config, remoteCfg.Config); err != nil { return nil, err } + // Reset the protocol to its pre-merged version for peering upstreams. + if us.DestinationPeer != "" { + if found { + us.Config["protocol"] = preMergeProtocol + } else { + delete(us.Config, "protocol") + } + } + // Delete the mesh gateway key from opaque config since this is the value that was resolved from // the servers and NOT the final merged value for this upstream. // Note that we use the "mesh_gateway" key and not other variants like "MeshGateway" because