|
|
|
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 = 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 {
|
|
|
|
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 as many entries from this list in the DNS response while
|
|
|
|
// keeping the response under 512 bytes
|
|
|
|
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, clusters or
|
|
|
|
// dictate a different 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;
|
|
|
|
|
|
|
|
string cluster_name = 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
message DnsVirtualDomain {
|
|
|
|
option (udpa.annotations.versioning).previous_message_type =
|
|
|
|
"envoy.data.dns.v2alpha.DnsTable.DnsVirtualDomain";
|
|
|
|
|
|
|
|
// A 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. The default TTL is 300s
|
|
|
|
google.protobuf.Duration answer_ttl = 3 [(validate.rules).duration = {gte {seconds: 60}}];
|
|
|
|
}
|
|
|
|
|
|
|
|
// Control how many times Envoy makes an attempt to forward a query to an external DNS server
|
|
|
|
uint32 external_retry_count = 1 [(validate.rules).uint32 = {lte: 3}];
|
|
|
|
|
|
|
|
// Fully qualified domain names for which Envoy will respond to DNS queries. By leaving this
|
|
|
|
// list empty, Envoy will forward all queries to external resolvers
|
|
|
|
repeated DnsVirtualDomain virtual_domains = 2;
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
}
|