一个奇怪的现象,不得其解,有哪位能指点一下,不甚感激!

    代码如下:

    local resolver = require "resty.dns.resolver"
    local resolver_ins, err = resolver:new{
        nameservers = {"172.21.0.10"},
        retrans = 5,  -- 5 retransmissions on receive timeout
        timeout = 2000,  -- 2 sec
    }
    if not resolver_ins then
        ngx.say("failed to instantiate the resolver: ", err)
        return
    end
    
    -- query
    local host = "test-0.test-svc"
    local answers, err, tries = resolver_ins:query(host, nil, {})
    if not answers then
        ngx.log(ngx.ERR, "failed to query the DNS server: ", err)
        ngx.log(ngx.ERR, "retry historie:\n  ", table.concat(tries, "\n  "))
        return
    end
    if answers.errcode then
        ngx.log(ngx.ERR, "server returned error code: ", answers.errcode,
                ", err: ", answers.errstr, ", hostname: ", host)
    end

      错误日志
      [error] 66#66: *1352423 [lua] resolver.lua:42: resolve(): server returned error code: 3, err: name error, hostname: test-0.test-svc

        但是nslookup可以查到

        / # nslookup test-0.test-svc 172.21.0.10
        Server: 172.21.0.10
        Address 1: 172.21.0.10 kube-dns.kube-system.svc.cluster.local
        
        Name: test-0.test-svc
        Address 1: 172.20.2.104 test-0.test-svc.test.svc.cluster.local

        biello nslookup查询的是完整域名test-0.test-svc.test.svc.cluster.local,是系统自动添加了域名后缀,而resty.dns.resolver必须传入完整的域名。

        vinsonzou 谢谢~我后来也发现了,最后用dnsmasq做dns server解决了

          Write a Reply...