diff --git a/apisix/discovery/dns.lua b/apisix/discovery/dns.lua index e599cf651a06..45d7141d1971 100644 --- a/apisix/discovery/dns.lua +++ b/apisix/discovery/dns.lua @@ -78,7 +78,7 @@ function _M.init_worker() hosts = {}, resolvConf = {}, nameservers = servers, - order = {"last", "A", "AAAA", "SRV", "CNAME"}, + order = {"last", "SRV", "A", "AAAA", "CNAME"}, } local client, err = core.dns_client.new(opts) diff --git a/t/coredns/db.test.local b/t/coredns/db.test.local index 27296bfdb0ee..094b73a87574 100644 --- a/t/coredns/db.test.local +++ b/t/coredns/db.test.local @@ -45,3 +45,7 @@ split-weight.srv 86400 IN SRV 10 0 1980 C priority.srv 86400 IN SRV 10 60 1979 A priority.srv 86400 IN SRV 20 60 1980 B + +; a domain has both SRV & A records +srv-a 86400 IN SRV 10 60 1980 A +srv-a IN A 127.0.0.1 diff --git a/t/discovery/dns/mix.t b/t/discovery/dns/mix.t index 46c1e167dc7a..5308f4b47ae3 100644 --- a/t/discovery/dns/mix.t +++ b/t/discovery/dns/mix.t @@ -110,6 +110,9 @@ upstreams: end end + -- It is expected to have 5 DNS queries + -- the first turn: one for global resolver & two for discovery (SRV, then A) + -- the second turn: each one for both global resolver & discovery if i < 2 then ngx.sleep(1.1) end @@ -125,3 +128,4 @@ connect to 127.0.0.1:1053 connect to 127.0.0.1:1053 connect to 127.0.0.1:1053 connect to 127.0.0.1:1053 +connect to 127.0.0.1:1053 diff --git a/t/discovery/dns/sanity.t b/t/discovery/dns/sanity.t index 9e4ed2abf17b..4aec6483e71c 100644 --- a/t/discovery/dns/sanity.t +++ b/t/discovery/dns/sanity.t @@ -284,3 +284,17 @@ qr/proxy request to \S+/ --- grep_error_log_out proxy request to 127.0.0.1:1979 proxy request to 127.0.0.2:1980 + + + +=== TEST 14: prefer SRV than A +--- apisix_yaml +upstreams: + - service_name: "srv-a.test.local" + discovery_type: dns + type: roundrobin + id: 1 +--- error_log +proxy request to 127.0.0.1:1980 +--- response_body +hello world