mirror of https://github.com/istio/proxy.git
connect: prefer endpoint metadata (#4409)
Signed-off-by: Kuat Yessenov <kuat@google.com>
This commit is contained in:
parent
ee61816a2f
commit
05dbcf3491
|
|
@ -29,26 +29,7 @@ constexpr std::string_view TunnelAddressField = "address";
|
|||
|
||||
Envoy::Network::FilterStatus Filter::onAccept(Envoy::Network::ListenerFilterCallbacks& cb) {
|
||||
auto& socket = cb.socket();
|
||||
// First, check the filter state;
|
||||
const auto* object = cb.filterState().getDataReadOnly<Authority>(FilterStateKey);
|
||||
if (object) {
|
||||
const auto local_address = Envoy::Network::Utility::parseInternetAddressAndPortNoThrow(
|
||||
object->value_, /*v6only=*/false);
|
||||
if (local_address) {
|
||||
ENVOY_LOG_MISC(trace, "Restore local address from filter state: {}",
|
||||
local_address->asString());
|
||||
socket.connectionInfoProvider().restoreLocalAddress(local_address);
|
||||
const auto tunnel_address =
|
||||
Envoy::Network::Utility::getAddressWithPort(*local_address, object->port_);
|
||||
cb.filterState().setData(Envoy::Network::DestinationAddress::key(),
|
||||
std::make_shared<Envoy::Network::DestinationAddress>(tunnel_address),
|
||||
Envoy::StreamInfo::FilterState::StateType::ReadOnly);
|
||||
} else {
|
||||
ENVOY_LOG_MISC(trace, "Failed to parse filter state address: {}", object->value_);
|
||||
}
|
||||
return Envoy::Network::FilterStatus::Continue;
|
||||
}
|
||||
// Second, try the dynamic metadata from the endpoint.
|
||||
// First, try the dynamic metadata from the endpoint.
|
||||
const auto iter = cb.dynamicMetadata().filter_metadata().find(MetadataKey);
|
||||
if (iter != cb.dynamicMetadata().filter_metadata().end()) {
|
||||
auto address_it = iter->second.fields().find(DestinationAddressField);
|
||||
|
|
@ -83,9 +64,28 @@ Envoy::Network::FilterStatus Filter::onAccept(Envoy::Network::ListenerFilterCall
|
|||
} else {
|
||||
ENVOY_LOG_MISC(trace, "Missing metadata field '{}'", TunnelAddressField);
|
||||
}
|
||||
return Envoy::Network::FilterStatus::Continue;
|
||||
} else {
|
||||
ENVOY_LOG_MISC(trace, "Cannot find dynamic metadata '{}'", MetadataKey);
|
||||
}
|
||||
// Second, check the filter state;
|
||||
const auto* object = cb.filterState().getDataReadOnly<Authority>(FilterStateKey);
|
||||
if (object) {
|
||||
const auto local_address = Envoy::Network::Utility::parseInternetAddressAndPortNoThrow(
|
||||
object->value_, /*v6only=*/false);
|
||||
if (local_address) {
|
||||
ENVOY_LOG_MISC(trace, "Restore local address from filter state: {}",
|
||||
local_address->asString());
|
||||
socket.connectionInfoProvider().restoreLocalAddress(local_address);
|
||||
const auto tunnel_address =
|
||||
Envoy::Network::Utility::getAddressWithPort(*local_address, object->port_);
|
||||
cb.filterState().setData(Envoy::Network::DestinationAddress::key(),
|
||||
std::make_shared<Envoy::Network::DestinationAddress>(tunnel_address),
|
||||
Envoy::StreamInfo::FilterState::StateType::ReadOnly);
|
||||
} else {
|
||||
ENVOY_LOG_MISC(trace, "Failed to parse filter state address: {}", object->value_);
|
||||
}
|
||||
}
|
||||
return Envoy::Network::FilterStatus::Continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue