zhikaichen123 opened a new issue #4874:
URL: https://github.com/apache/apisix/issues/4874
### Issue description
#### 场景说明:
通过核心网关配置,访问域名为yhk.market.alicloudapi.com的ai服务,调用报503异常,看日记记录提示:
**failed to query the DNS server: recursion detected**
简单说明:dns域名解析出现递归,apisix转发cname这块不支持2层以上,但是自己搭建的容器集群正常解析,只是生产环境阿里的容器解析有问题
#### 日记记录:
```html
2021/08/23 15:14:38 [error] 55#55: *309865 [lua] resolver.lua:35:
parse_domain(): failed to parse domain: yhk.market.alicloudapi.com, error:
failed to query the DNS server: recursion detected, client: 172.21.1.190,
server: _, request: "POST /ai/ocr/idcard HTTP/1.1", host: "gw.winnermedical.com"
2021/08/23 15:14:38 [error] 55#55: *309865 [lua] init.lua:178:
parse_domain_for_nodes(): dns resolver domain: yhk.market.alicloudapi.com
error: failed to query the DNS server: recursion detected, client:
172.21.1.190, server: _, request: "POST /ai/ocr/idcard HTTP/1.1", host:
"gw.winnermedical.com"
2021/08/23 15:14:38 [error] 55#55: *309865 [lua] init.lua:482:
http_access_phase(): failed to set upstream: no valid upstream node, client:
172.21.1.190, server: _, request: "POST /ai/ocr/idcard HTTP/1.1", host:
"gw.winnermedical.com"
```
#### 找到报错原始位置
```html
function _M.parse_domain(host)
local ip_info, err = utils.dns_parse(host)
if not ip_info then
log.error("failed to parse domain: ", host, ", error: ",err)
return nil, err
end
log.info("parse addr: ", json.delay_encode(ip_info))
log.info("resolver: ", json.delay_encode(utils.get_resolver()))
log.info("host: ", host)
if ip_info.address then
log.info("dns resolver domain: ", host, " to ", ip_info.address)
return ip_info.address
end
return nil, "failed to parse domain"
end
function _M.resolve(self, domain, selector)
local client = self.client
-- this function will dereference the CNAME records
local answers, err = client.resolve(domain)
if not answers then
return nil, "failed to query the DNS server: " .. err
end
if answers.errcode then
return nil, "server returned error code: " .. answers.errcode
.. ": " .. answers.errstr
end
if selector == _M.RETURN_ALL then
log.info("dns resolve ", domain, ", result: ",
json.delay_encode(answers))
for _, answer in ipairs(answers) do
if answer.type == client.TYPE_SRV then
return resolve_srv(client, answers)
end
end
return table.deepcopy(answers)
end
local idx = math_random(1, #answers)
local answer = answers[idx]
local dns_type = answer.type
if dns_type == client.TYPE_A or dns_type == client.TYPE_AAAA then
log.info("dns resolve ", domain, ", result: ",
json.delay_encode(answer))
return table.deepcopy(answer)
end
return nil, "unsupport DNS answer"
end
```
#### 找到最终原因
resolver.lua:35: parse_domain(): failed to parse domain:
yhk.market.alicloudapi.com, error: failed to query the DNS server: recursion
detected
#### 文件路线:
init.lua(384) -> upstream.lua(270) -> resolver.lua(33) -> utils.lua()
-> client.lua(102)
## 总结:暂时无解!
### Environment
apisxi 2.6版本,在阿里的k8s容器运行
### Steps to reproduce
如上说明
### Actual result
如上说明
### Error log
2021/08/23 15:14:38 [error] 55#55: *309865 [lua] resolver.lua:35:
parse_domain(): failed to parse domain: yhk.market.alicloudapi.com, error:
failed to query the DNS server: recursion detected, client: 172.21.1.190,
server: _, request: "POST /ai/ocr/idcard HTTP/1.1", host: "gw.winnermedical.com"
2021/08/23 15:14:38 [error] 55#55: *309865 [lua] init.lua:178:
parse_domain_for_nodes(): dns resolver domain: yhk.market.alicloudapi.com
error: failed to query the DNS server: recursion detected, client:
172.21.1.190, server: _, request: "POST /ai/ocr/idcard HTTP/1.1", host:
"gw.winnermedical.com"
2021/08/23 15:14:38 [error] 55#55: *309865 [lua] init.lua:482:
http_access_phase(): failed to set upstream: no valid upstream node, client:
172.21.1.190, server: _, request: "POST /ai/ocr/idcard HTTP/1.1", host:
"gw.winnermedical.com"
### Expected result
_No response_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]