首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoreDNS:在转发插件之后如何添加缓存条目

CoreDNS:在转发插件之后如何添加缓存条目
EN

Stack Overflow用户
提问于 2021-02-15 10:39:46
回答 1查看 110关注 0票数 0

试图理解代码流。插件顺序似乎是:https://github.com/coredns/coredns/blob/master/plugin.cfg

所以它的缓存比转发要早很多。如果存在Cache未命中,但Forward返回一个成功的DNS回复,我们在代码中添加了Cache条目-由于Cache插件在Forward之前运行,因此很奇怪。

我在缓存插件中看到:CoreDNS

代码语言:javascript
复制
// ServeDNS implements the plugin.Handler interface.
func (c *Cache) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error)
 // getIgnoreTTL unconditionally returns an item if it exists in the cache.
 i := c.getIgnoreTTL(now, state, server)
 if i == nil {
        // cache miss
        crr := &ResponseWriter{ResponseWriter: w, Cache: c, state: state, server: server, do: do}
        return c.doRefresh(ctx, state, crr)
    }

我猜ResponseWriter不会在缓存中添加任何条目,因为Forward还没有被调用-这是正确的吗?在forwarder插件中,我没有看到任何用于在缓存中添加DNS响应/结果条目的调用。在主转发解析DNS请求后,如何填充缓存?

EN

回答 1

Stack Overflow用户

发布于 2021-06-29 03:15:52

在插件/缓存/cache.go中,

代码语言:javascript
复制
func (w *ResponseWriter) WriteMsg(res *dns.Msg) error {}

“重写”dns.ResponseWriterWriteMsg(),因此在forward.gowhen it calls w.WriteMsg(ret)中,结果将被写入缓存(通过缓存插件重写的WriteMsg() )。

与在doRefresh()中一样,它传入*ResponseWriter而不是*dns.ResponseWriter:https://github.com/coredns/coredns/blob/master/plugin/cache/handler.go#L73

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66202118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档