Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
c152c7e
dynamic_forward_proxy: adding dns_resolvers to dns_cache used by the …
May 3, 2021
9fa85a7
fix test format
May 3, 2021
3988eb0
fix version history doc
May 3, 2021
026ca82
updating description for dns_resolvers option
May 4, 2021
6260b09
fixing memory leak issue
May 4, 2021
9d95c7b
add DnsResolver message
May 14, 2021
5501231
update dns_resolvers to resolvers
May 14, 2021
d3aaa31
Merge branch 'main' of https://github.com/envoyproxy/envoy into envoy…
May 14, 2021
a673969
Merge branch 'envoyproxy-main' into main
May 14, 2021
c03697b
fix release doc
May 14, 2021
7d41f09
moving DnsResolver to its own proto file
May 18, 2021
0677cf9
deps: update protobuf to 3.16.0 (#16390)
benjaminp May 16, 2021
2feca06
HCM: add support for IP detection extensions (#14855)
May 16, 2021
54af3ba
docs: comment config extension (#16406)
daixiang0 May 17, 2021
9390e7a
add defensive coding against None (for missing buildifier) in pre-com…
May 17, 2021
5c1ae91
docs: update rotation to include watching envoy-ci (#16463)
alyssawilk May 17, 2021
04cc847
docs: Fix subtitle format (#16521)
luckyxiaoqiang May 17, 2021
a9a03bc
redis cluster: fix ClusterSlot operator == (#16116)
gaoliangdut May 17, 2021
be652e9
http: cleaning up obsolete grpc args (#16525)
alyssawilk May 17, 2021
6be5d06
Fix bug in flaky test script (#16434)
May 17, 2021
6d4aa65
dependabot: Updates (#16499)
phlax May 18, 2021
6e99c81
tcp: switching to the new pool (#16465)
alyssawilk May 18, 2021
b67d82e
test: clean up upstream protocols (#16467)
alyssawilk May 18, 2021
2d7e299
disable giant request/response tests under TSAN (#16533)
danzh2010 May 18, 2021
e689756
Allow http route and cluster metadata to contain typed metadata in An…
yanjunxiang-google May 18, 2021
25e4ae0
grid: Plumb the AlternateProtocolCache down to the grid from the Upst…
RyanTheOptimist May 18, 2021
9d2d403
fix mac build (#16514)
ramaraochavali May 18, 2021
e9c44c7
Crash support: Restore crash context on filter's posted callback (#16…
KBaichoo May 18, 2021
7c44cc6
coverage: bumping numbers (#16522)
alyssawilk May 18, 2021
0602d8d
http: more tests for local reply and reset (#16526)
alyssawilk May 18, 2021
6af2490
fix doc
May 18, 2021
4e2a6e8
Merge branch 'main' of git://github.com/envoyproxy/envoy into envoypr…
May 18, 2021
3b41679
Merge branch 'envoyproxy-main' into main
May 18, 2021
f9a8326
missing protodoc-title
May 18, 2021
6234826
add resolver.proto to common messages doc
May 18, 2021
364258f
Merge branch 'envoyproxy:main' into main
ntgsx92 May 19, 2021
e91e5e0
fix release history format
May 19, 2021
8060ed8
fix comment
May 19, 2021
58c0500
Merge branch 'main' of git://github.com/envoyproxy/envoy into envoypr…
May 19, 2021
94c5bd3
Merge branch 'envoyproxy-main' into main
May 19, 2021
19201c5
Merge branch 'main' of https://github.com/ntgsx92/envoy into main
May 19, 2021
8a7d214
doc fix
May 19, 2021
6a3f7e5
feedback
May 20, 2021
e0f0df2
Merge branch 'envoyproxy:main' into main
ntgsx92 May 21, 2021
5eef9b3
feedback
May 26, 2021
80b95ea
Merge branch 'main' of https://github.com/ntgsx92/envoy into main
May 26, 2021
0412e3a
Merge branch 'main' of git://github.com/envoyproxy/envoy into main
May 26, 2021
69345fe
Merge branch 'main' of git://github.com/envoyproxy/envoy into envoypr…
May 26, 2021
e83289a
Merge branch 'envoyproxy-main' into main
May 26, 2021
004177f
Merge branch 'main' of https://github.com/ntgsx92/envoy into main
May 26, 2021
aaaea99
doc fix
May 26, 2021
ecd3229
fix test
May 26, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions api/envoy/config/core/v3/resolver.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
syntax = "proto3";

package envoy.config.core.v3;

import "envoy/config/core/v3/address.proto";

import "udpa/annotations/status.proto";
import "validate/validate.proto";

option java_package = "io.envoyproxy.envoy.config.core.v3";
option java_outer_classname = "ResolverProto";
option java_multiple_files = true;
option (udpa.annotations.file_status).package_version_status = ACTIVE;

// [#protodoc-title: Resolver]

// DNS resolver configuration which includes the underlying dns resolver addresses and options.
message DnsResolver {
// A list of dns resolver addresses
// Setting this value causes failure if the
// ``envoy.restart_features.use_apple_api_for_dns_lookups`` runtime value is true during
// server startup. Apple's API only allows overriding DNS resolvers via system settings.
repeated Address resolvers = 1 [(validate.rules).repeated = {min_items: 1}];
}
27 changes: 27 additions & 0 deletions api/envoy/config/core/v4alpha/resolver.proto

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions api/envoy/extensions/common/dynamic_forward_proxy/v3/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ api_proto_package(
deps = [
"//envoy/config/cluster/v3:pkg",
"//envoy/config/common/dynamic_forward_proxy/v2alpha:pkg",
"//envoy/config/core/v3:pkg",
"@com_github_cncf_udpa//udpa/annotations:pkg",
],
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ syntax = "proto3";
package envoy.extensions.common.dynamic_forward_proxy.v3;

import "envoy/config/cluster/v3/cluster.proto";
import "envoy/config/core/v3/resolver.proto";

import "google/protobuf/duration.proto";
import "google/protobuf/wrappers.proto";
Expand All @@ -27,7 +28,7 @@ message DnsCacheCircuitBreakers {

// Configuration for the dynamic forward proxy DNS cache. See the :ref:`architecture overview
// <arch_overview_http_dynamic_forward_proxy>` for more information.
// [#next-free-field: 9]
// [#next-free-field: 10]
message DnsCacheConfig {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.common.dynamic_forward_proxy.v2alpha.DnsCacheConfig";
Expand Down Expand Up @@ -101,4 +102,9 @@ message DnsCacheConfig {
// ``envoy.restart_features.use_apple_api_for_dns_lookups`` runtime value is true during
// server startup. Apple' API only uses UDP for DNS resolution.
bool use_tcp_for_dns_lookups = 8;

// DNS resolver configuration
// If specified, DNS cache will perform resolution via the underlying DNS resolvers.
// Otherwise, the default system resolvers (e.g., /etc/resolv.conf) will be used.
config.core.v3.DnsResolver dns_resolver = 9;
}
1 change: 1 addition & 0 deletions docs/root/api-v3/common_messages/common_messages.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ Common messages
../config/core/v3/grpc_service.proto
../config/core/v3/grpc_method_list.proto
../config/core/v3/http_uri.proto
../config/core/v3/resolver.proto
../config/core/v3/socket_option.proto
../config/core/v3/udp_socket_config.proto
../config/core/v3/substitution_format_string.proto
Expand Down
2 changes: 2 additions & 0 deletions docs/root/version_history/current.rst
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,10 @@ Removed Config or Runtime

New Features
------------

* bandwidth_limit: added new :ref:`HTTP bandwidth limit filter <config_http_filters_bandwidth_limit>`.
* crash support: restore crash context when continuing to processing requests or responses as a result of an asynchronous callback that invokes a filter directly. This is unlike the call stacks that go through the various network layers, to eventually reach the filter. For a concrete example see: ``Envoy::Extensions::HttpFilters::Cache::CacheFilter::getHeaders`` which posts a callback on the dispatcher that will invoke the filter directly.
* dynamic_forward_proxy: added :ref:`dns_resolver<envoy_v3_api_field_extensions.common.dynamic_forward_proxy.v3.DnsCacheConfig.dns_resolver>` option to the DNS cache config in order use custom DNS resolvers instead of the system default resolvers.
* http: a new field `is_optional` is added to `extensions.filters.network.http_connection_manager.v3.HttpFilter`. When
value is `true`, the unsupported http filter will be ignored by envoy. This is also same with unsupported http filter
in the typed per filter config. For more information, please reference
Expand Down
24 changes: 24 additions & 0 deletions generated_api_shadow/envoy/config/core/v3/resolver.proto

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 27 additions & 0 deletions generated_api_shadow/envoy/config/core/v4alpha/resolver.proto

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include "common/config/utility.h"
#include "common/http/utility.h"
#include "common/network/resolver_impl.h"
#include "common/network/utility.h"

// TODO(mattklein123): Move DNS family helpers to a smaller include.
Expand All @@ -20,8 +21,8 @@ DnsCacheImpl::DnsCacheImpl(
const envoy::extensions::common::dynamic_forward_proxy::v3::DnsCacheConfig& config)
: main_thread_dispatcher_(main_thread_dispatcher),
dns_lookup_family_(Upstream::getDnsLookupFamilyFromEnum(config.dns_lookup_family())),
resolver_(main_thread_dispatcher.createDnsResolver({}, config.use_tcp_for_dns_lookups())),
tls_slot_(tls), scope_(root_scope.createScope(fmt::format("dns_cache.{}.", config.name()))),
resolver_(selectDnsResolver(config, main_thread_dispatcher)), tls_slot_(tls),
scope_(root_scope.createScope(fmt::format("dns_cache.{}.", config.name()))),
stats_(generateDnsCacheStats(*scope_)),
resource_manager_(*scope_, loader, config.name(), config.dns_cache_circuit_breaker()),
refresh_interval_(PROTOBUF_GET_MS_OR_DEFAULT(config, dns_refresh_rate, 60000)),
Expand All @@ -46,6 +47,22 @@ DnsCacheImpl::~DnsCacheImpl() {
}
}

Network::DnsResolverSharedPtr DnsCacheImpl::selectDnsResolver(
const envoy::extensions::common::dynamic_forward_proxy::v3::DnsCacheConfig& config,
Event::Dispatcher& main_thread_dispatcher) {
if (config.has_dns_resolver()) {
const auto& resolver_addrs = config.dns_resolver().resolvers();
std::vector<Network::Address::InstanceConstSharedPtr> resolvers;
resolvers.reserve(resolver_addrs.size());
for (const auto& resolver_addr : resolver_addrs) {
resolvers.push_back(Network::Address::resolveProtoAddress(resolver_addr));
}
return main_thread_dispatcher.createDnsResolver(resolvers, config.use_tcp_for_dns_lookups());
}

return main_thread_dispatcher.createDnsResolver({}, config.use_tcp_for_dns_lookups());
}

DnsCacheStats DnsCacheImpl::generateDnsCacheStats(Stats::Scope& scope) {
return {ALL_DNS_CACHE_STATS(POOL_COUNTER(scope), POOL_GAUGE(scope))};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ class DnsCacheImpl : public DnsCache, Logger::Loggable<Logger::Id::forward_proxy
const envoy::extensions::common::dynamic_forward_proxy::v3::DnsCacheConfig& config);
~DnsCacheImpl() override;
static DnsCacheStats generateDnsCacheStats(Stats::Scope& scope);
static Network::DnsResolverSharedPtr selectDnsResolver(
const envoy::extensions::common::dynamic_forward_proxy::v3::DnsCacheConfig& config,
Event::Dispatcher& main_thread_dispatcher);

// DnsCache
LoadDnsCacheEntryResult loadDnsCacheEntry(absl::string_view host, uint16_t default_port,
Expand Down
1 change: 1 addition & 0 deletions test/extensions/common/dynamic_forward_proxy/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ envoy_cc_test(
"//test/test_common:simulated_time_system_lib",
"//test/test_common:test_runtime_lib",
"@envoy_api//envoy/config/cluster/v3:pkg_cc_proto",
"@envoy_api//envoy/config/core/v3:pkg_cc_proto",
"@envoy_api//envoy/extensions/common/dynamic_forward_proxy/v3:pkg_cc_proto",
],
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#include "envoy/config/cluster/v3/cluster.pb.h"
#include "envoy/config/core/v3/resolver.pb.h"
#include "envoy/extensions/common/dynamic_forward_proxy/v3/dns_cache.pb.h"

#include "common/config/utility.h"
#include "common/network/resolver_impl.h"

#include "extensions/common/dynamic_forward_proxy/dns_cache_impl.h"
#include "extensions/common/dynamic_forward_proxy/dns_cache_manager_impl.h"
Expand Down Expand Up @@ -92,6 +94,10 @@ MATCHER_P3(DnsHostInfoEquals, address, resolved_host, is_ip_address, "") {

MATCHER(DnsHostInfoAddressIsNull, "") { return arg->address() == nullptr; }

MATCHER_P(CustomDnsResolversSizeEquals, expected_resolvers, "") {
return expected_resolvers.size() == arg.size();
}

// Basic successful resolution and then re-resolution.
TEST_F(DnsCacheImplTest, ResolveSuccess) {
initialize();
Expand Down Expand Up @@ -780,6 +786,42 @@ TEST(DnsCacheManagerImplTest, LoadViaConfig) {
"config specified DNS cache 'foo' with different settings");
}

TEST(DnsCacheConfigOptionsTest, EmtpyDnsResolverConfig) {
NiceMock<Event::MockDispatcher> dispatcher;
std::shared_ptr<Network::MockDnsResolver> resolver{std::make_shared<Network::MockDnsResolver>()};
NiceMock<ThreadLocal::MockInstance> tls;
NiceMock<Random::MockRandomGenerator> random;
NiceMock<Runtime::MockLoader> loader;
Stats::IsolatedStoreImpl store;

envoy::extensions::common::dynamic_forward_proxy::v3::DnsCacheConfig config;
std::vector<Network::Address::InstanceConstSharedPtr> expectedEmptyDnsResolvers;
EXPECT_CALL(dispatcher, createDnsResolver(expectedEmptyDnsResolvers, _))
.WillOnce(Return(resolver));
DnsCacheImpl dns_cache_(dispatcher, tls, random, loader, store, config);
}

TEST(DnsCacheConfigOptionsTest, NonEmptyDnsResolverConfig) {
NiceMock<Event::MockDispatcher> dispatcher;
std::shared_ptr<Network::MockDnsResolver> resolver{std::make_shared<Network::MockDnsResolver>()};
NiceMock<ThreadLocal::MockInstance> tls;
NiceMock<Random::MockRandomGenerator> random;
NiceMock<Runtime::MockLoader> loader;
Stats::IsolatedStoreImpl store;
envoy::extensions::common::dynamic_forward_proxy::v3::DnsCacheConfig config;

envoy::config::core::v3::Address* dns_resolvers = config.mutable_dns_resolver()->add_resolvers();
dns_resolvers->mutable_socket_address()->set_address("1.2.3.4");
dns_resolvers->mutable_socket_address()->set_port_value(8080);

std::vector<Network::Address::InstanceConstSharedPtr> expected_dns_resolver_config;
expected_dns_resolver_config.push_back(Network::Address::resolveProtoAddress(*dns_resolvers));
EXPECT_CALL(dispatcher,
createDnsResolver(CustomDnsResolversSizeEquals(expected_dns_resolver_config), _))
.WillOnce(Return(resolver));
DnsCacheImpl dns_cache_(dispatcher, tls, random, loader, store, config);
}

// Note: this test is done here, rather than a TYPED_TEST_SUITE in
// //test/common/config:utility_test, because we did not want to include an extension type in
// non-extension test suites.
Expand Down