dns_filter: Initial commit for dns_filter skeleton (#10376)
This commit is this base structure and api definition for the DNS filter. The code itself takes no action on packets. Tests will be added later. Signed-off-by: Alvin Baptiste <alvinsb@gmail.com> Mirrored from https://github.com/envoyproxy/envoy @ b3949eaf2080809b8a3a6cf720eba2cfdf864472master-ci-test
parent
d2cbe1240c
commit
c163a62b6a
10 changed files with 317 additions and 0 deletions
@ -0,0 +1,13 @@ |
|||||||
|
# DO NOT EDIT. This file is generated by tools/proto_sync.py. |
||||||
|
|
||||||
|
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") |
||||||
|
|
||||||
|
licenses(["notice"]) # Apache 2 |
||||||
|
|
||||||
|
api_proto_package( |
||||||
|
deps = [ |
||||||
|
"//envoy/api/v2/core:pkg", |
||||||
|
"//envoy/data/dns/v2alpha:pkg", |
||||||
|
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||||
|
], |
||||||
|
) |
@ -0,0 +1,48 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.config.filter.udp.dns_filter.v2alpha; |
||||||
|
|
||||||
|
import "envoy/api/v2/core/base.proto"; |
||||||
|
import "envoy/data/dns/v2alpha/dns_table.proto"; |
||||||
|
|
||||||
|
import "udpa/annotations/migrate.proto"; |
||||||
|
import "udpa/annotations/status.proto"; |
||||||
|
import "validate/validate.proto"; |
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.config.filter.udp.dns_filter.v2alpha"; |
||||||
|
option java_outer_classname = "DnsFilterProto"; |
||||||
|
option java_multiple_files = true; |
||||||
|
option (udpa.annotations.file_migrate).move_to_package = |
||||||
|
"envoy.extensions.filter.udp.dns_filter.v3alpha"; |
||||||
|
option (udpa.annotations.file_status).work_in_progress = true; |
||||||
|
option (udpa.annotations.file_status).package_version_status = ACTIVE; |
||||||
|
|
||||||
|
// [#protodoc-title: DNS Filter] |
||||||
|
// DNS Filter :ref:`configuration overview <config_udp_listener_filters_dns_filter>`. |
||||||
|
// [#extension: envoy.filters.udp_listener.dns_filter] |
||||||
|
|
||||||
|
// Configuration for the DNS filter. |
||||||
|
message DnsFilterConfig { |
||||||
|
// This message contains the configuration for the Dns Filter operating |
||||||
|
// in a server context. This message will contain the virtual hosts and |
||||||
|
// associated addresses with which Envoy will respond to queries |
||||||
|
message ServerContextConfig { |
||||||
|
oneof config_source { |
||||||
|
option (validate.required) = true; |
||||||
|
|
||||||
|
// Load the configuration specified from the control plane |
||||||
|
data.dns.v2alpha.DnsTable inline_dns_table = 1; |
||||||
|
|
||||||
|
// Seed the filter configuration from an external path. This source |
||||||
|
// is a yaml formatted file that contains the DnsTable driving Envoy's |
||||||
|
// responses to DNS queries |
||||||
|
api.v2.core.DataSource external_dns_table = 2; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// The stat prefix used when emitting DNS filter statistics |
||||||
|
string stat_prefix = 1 [(validate.rules).string = {min_len: 1}]; |
||||||
|
|
||||||
|
// Server context configuration |
||||||
|
ServerContextConfig server_config = 2; |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
# DO NOT EDIT. This file is generated by tools/proto_sync.py. |
||||||
|
|
||||||
|
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") |
||||||
|
|
||||||
|
licenses(["notice"]) # Apache 2 |
||||||
|
|
||||||
|
api_proto_package( |
||||||
|
deps = [ |
||||||
|
"//envoy/type/matcher:pkg", |
||||||
|
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||||
|
], |
||||||
|
) |
@ -0,0 +1,74 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.data.dns.v2alpha; |
||||||
|
|
||||||
|
import "envoy/type/matcher/string.proto"; |
||||||
|
|
||||||
|
import "google/protobuf/duration.proto"; |
||||||
|
|
||||||
|
import "udpa/annotations/status.proto"; |
||||||
|
import "validate/validate.proto"; |
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.data.dns.v2alpha"; |
||||||
|
option java_outer_classname = "DnsTableProto"; |
||||||
|
option java_multiple_files = true; |
||||||
|
option (udpa.annotations.file_status).work_in_progress = true; |
||||||
|
option (udpa.annotations.file_status).package_version_status = ACTIVE; |
||||||
|
|
||||||
|
// [#protodoc-title: DNS Filter Table Data] |
||||||
|
// :ref:`DNS Filter config overview <config_udp_listener_filters_dns_filter>`. |
||||||
|
|
||||||
|
// This message contains the configuration for the DNS Filter if populated |
||||||
|
// from the control plane |
||||||
|
message DnsTable { |
||||||
|
// This message contains a list of IP addresses returned for a query for a known name |
||||||
|
message AddressList { |
||||||
|
// This field contains a well formed IP address that is returned |
||||||
|
// in the answer for a name query. The address field can be an |
||||||
|
// IPv4 or IPv6 address. Address family detection is done automatically |
||||||
|
// when Envoy parses the string. Since this field is repeated, |
||||||
|
// Envoy will return one randomly chosen entry from this list in the |
||||||
|
// DNS response. The random index will vary per query so that we prevent |
||||||
|
// clients pinning on a single address for a configured domain |
||||||
|
repeated string address = 1 [(validate.rules).repeated = { |
||||||
|
min_items: 1 |
||||||
|
items {string {min_len: 3}} |
||||||
|
}]; |
||||||
|
} |
||||||
|
|
||||||
|
// This message type is extensible and can contain a list of addresses |
||||||
|
// or dictate some other method for resolving the addresses for an |
||||||
|
// endpoint |
||||||
|
message DnsEndpoint { |
||||||
|
oneof endpoint_config { |
||||||
|
option (validate.required) = true; |
||||||
|
|
||||||
|
AddressList address_list = 1; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
message DnsVirtualDomain { |
||||||
|
// The domain name for which Envoy will respond to query requests |
||||||
|
string name = 1 [(validate.rules).string = {min_len: 2 well_known_regex: HTTP_HEADER_NAME}]; |
||||||
|
|
||||||
|
// The configuration containing the method to determine the address |
||||||
|
// of this endpoint |
||||||
|
DnsEndpoint endpoint = 2; |
||||||
|
|
||||||
|
// Sets the TTL in dns answers from Envoy returned to the client |
||||||
|
google.protobuf.Duration answer_ttl = 3 [(validate.rules).duration = {gt {}}]; |
||||||
|
} |
||||||
|
|
||||||
|
// Control how many times envoy makes an attempt to forward a query to |
||||||
|
// an external server |
||||||
|
uint32 external_retry_count = 1; |
||||||
|
|
||||||
|
// Fully qualified domain names for which Envoy will respond to queries |
||||||
|
repeated DnsVirtualDomain virtual_domains = 2 [(validate.rules).repeated = {min_items: 1}]; |
||||||
|
|
||||||
|
// This field serves to help Envoy determine whether it can authoritatively |
||||||
|
// answer a query for a name matching a suffix in this list. If the query |
||||||
|
// name does not match a suffix in this list, Envoy will forward |
||||||
|
// the query to an upstream DNS server |
||||||
|
repeated type.matcher.StringMatcher known_suffixes = 3; |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
# DO NOT EDIT. This file is generated by tools/proto_sync.py. |
||||||
|
|
||||||
|
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") |
||||||
|
|
||||||
|
licenses(["notice"]) # Apache 2 |
||||||
|
|
||||||
|
api_proto_package( |
||||||
|
deps = [ |
||||||
|
"//envoy/data/dns/v2alpha:pkg", |
||||||
|
"//envoy/type/matcher/v3:pkg", |
||||||
|
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||||
|
], |
||||||
|
) |
@ -0,0 +1,85 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.data.dns.v3; |
||||||
|
|
||||||
|
import "envoy/type/matcher/v3/string.proto"; |
||||||
|
|
||||||
|
import "google/protobuf/duration.proto"; |
||||||
|
|
||||||
|
import "udpa/annotations/status.proto"; |
||||||
|
import "udpa/annotations/versioning.proto"; |
||||||
|
import "validate/validate.proto"; |
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.data.dns.v3"; |
||||||
|
option java_outer_classname = "DnsTableProto"; |
||||||
|
option java_multiple_files = true; |
||||||
|
option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; |
||||||
|
|
||||||
|
// [#protodoc-title: DNS Filter Table Data] |
||||||
|
// :ref:`DNS Filter config overview <config_udp_listener_filters_dns_filter>`. |
||||||
|
|
||||||
|
// This message contains the configuration for the DNS Filter if populated |
||||||
|
// from the control plane |
||||||
|
message DnsTable { |
||||||
|
option (udpa.annotations.versioning).previous_message_type = "envoy.data.dns.v2alpha.DnsTable"; |
||||||
|
|
||||||
|
// This message contains a list of IP addresses returned for a query for a known name |
||||||
|
message AddressList { |
||||||
|
option (udpa.annotations.versioning).previous_message_type = |
||||||
|
"envoy.data.dns.v2alpha.DnsTable.AddressList"; |
||||||
|
|
||||||
|
// This field contains a well formed IP address that is returned |
||||||
|
// in the answer for a name query. The address field can be an |
||||||
|
// IPv4 or IPv6 address. Address family detection is done automatically |
||||||
|
// when Envoy parses the string. Since this field is repeated, |
||||||
|
// Envoy will return one randomly chosen entry from this list in the |
||||||
|
// DNS response. The random index will vary per query so that we prevent |
||||||
|
// clients pinning on a single address for a configured domain |
||||||
|
repeated string address = 1 [(validate.rules).repeated = { |
||||||
|
min_items: 1 |
||||||
|
items {string {min_len: 3}} |
||||||
|
}]; |
||||||
|
} |
||||||
|
|
||||||
|
// This message type is extensible and can contain a list of addresses |
||||||
|
// or dictate some other method for resolving the addresses for an |
||||||
|
// endpoint |
||||||
|
message DnsEndpoint { |
||||||
|
option (udpa.annotations.versioning).previous_message_type = |
||||||
|
"envoy.data.dns.v2alpha.DnsTable.DnsEndpoint"; |
||||||
|
|
||||||
|
oneof endpoint_config { |
||||||
|
option (validate.required) = true; |
||||||
|
|
||||||
|
AddressList address_list = 1; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
message DnsVirtualDomain { |
||||||
|
option (udpa.annotations.versioning).previous_message_type = |
||||||
|
"envoy.data.dns.v2alpha.DnsTable.DnsVirtualDomain"; |
||||||
|
|
||||||
|
// The domain name for which Envoy will respond to query requests |
||||||
|
string name = 1 [(validate.rules).string = {min_len: 2 well_known_regex: HTTP_HEADER_NAME}]; |
||||||
|
|
||||||
|
// The configuration containing the method to determine the address |
||||||
|
// of this endpoint |
||||||
|
DnsEndpoint endpoint = 2; |
||||||
|
|
||||||
|
// Sets the TTL in dns answers from Envoy returned to the client |
||||||
|
google.protobuf.Duration answer_ttl = 3 [(validate.rules).duration = {gt {}}]; |
||||||
|
} |
||||||
|
|
||||||
|
// Control how many times envoy makes an attempt to forward a query to |
||||||
|
// an external server |
||||||
|
uint32 external_retry_count = 1; |
||||||
|
|
||||||
|
// Fully qualified domain names for which Envoy will respond to queries |
||||||
|
repeated DnsVirtualDomain virtual_domains = 2 [(validate.rules).repeated = {min_items: 1}]; |
||||||
|
|
||||||
|
// This field serves to help Envoy determine whether it can authoritatively |
||||||
|
// answer a query for a name matching a suffix in this list. If the query |
||||||
|
// name does not match a suffix in this list, Envoy will forward |
||||||
|
// the query to an upstream DNS server |
||||||
|
repeated type.matcher.v3.StringMatcher known_suffixes = 3; |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
# DO NOT EDIT. This file is generated by tools/proto_sync.py. |
||||||
|
|
||||||
|
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") |
||||||
|
|
||||||
|
licenses(["notice"]) # Apache 2 |
||||||
|
|
||||||
|
api_proto_package( |
||||||
|
deps = [ |
||||||
|
"//envoy/config/core/v3:pkg", |
||||||
|
"//envoy/config/filter/udp/dns_filter/v2alpha:pkg", |
||||||
|
"//envoy/data/dns/v3:pkg", |
||||||
|
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||||
|
], |
||||||
|
) |
@ -0,0 +1,52 @@ |
|||||||
|
syntax = "proto3"; |
||||||
|
|
||||||
|
package envoy.extensions.filter.udp.dns_filter.v3alpha; |
||||||
|
|
||||||
|
import "envoy/config/core/v3/base.proto"; |
||||||
|
import "envoy/data/dns/v3/dns_table.proto"; |
||||||
|
|
||||||
|
import "udpa/annotations/status.proto"; |
||||||
|
import "udpa/annotations/versioning.proto"; |
||||||
|
import "validate/validate.proto"; |
||||||
|
|
||||||
|
option java_package = "io.envoyproxy.envoy.extensions.filter.udp.dns_filter.v3alpha"; |
||||||
|
option java_outer_classname = "DnsFilterProto"; |
||||||
|
option java_multiple_files = true; |
||||||
|
option (udpa.annotations.file_status).work_in_progress = true; |
||||||
|
option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; |
||||||
|
|
||||||
|
// [#protodoc-title: DNS Filter] |
||||||
|
// DNS Filter :ref:`configuration overview <config_udp_listener_filters_dns_filter>`. |
||||||
|
// [#extension: envoy.filters.udp_listener.dns_filter] |
||||||
|
|
||||||
|
// Configuration for the DNS filter. |
||||||
|
message DnsFilterConfig { |
||||||
|
option (udpa.annotations.versioning).previous_message_type = |
||||||
|
"envoy.config.filter.udp.dns_filter.v2alpha.DnsFilterConfig"; |
||||||
|
|
||||||
|
// This message contains the configuration for the Dns Filter operating |
||||||
|
// in a server context. This message will contain the virtual hosts and |
||||||
|
// associated addresses with which Envoy will respond to queries |
||||||
|
message ServerContextConfig { |
||||||
|
option (udpa.annotations.versioning).previous_message_type = |
||||||
|
"envoy.config.filter.udp.dns_filter.v2alpha.DnsFilterConfig.ServerContextConfig"; |
||||||
|
|
||||||
|
oneof config_source { |
||||||
|
option (validate.required) = true; |
||||||
|
|
||||||
|
// Load the configuration specified from the control plane |
||||||
|
data.dns.v3.DnsTable inline_dns_table = 1; |
||||||
|
|
||||||
|
// Seed the filter configuration from an external path. This source |
||||||
|
// is a yaml formatted file that contains the DnsTable driving Envoy's |
||||||
|
// responses to DNS queries |
||||||
|
config.core.v3.DataSource external_dns_table = 2; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// The stat prefix used when emitting DNS filter statistics |
||||||
|
string stat_prefix = 1 [(validate.rules).string = {min_len: 1}]; |
||||||
|
|
||||||
|
// Server context configuration |
||||||
|
ServerContextConfig server_config = 2; |
||||||
|
} |
Loading…
Reference in new issue