说明
这是 cache 的一个 fork。它添加了一个选项,用于先向带有标签 k8s-cache.coredns.io/early-refresh=true
的 Pod 发送经过刷新的有效缓存项。其他 Pod 仅在指定时间之后才能获取。这可以利用 Stable FQDNNetworkPolicies 在基于通过 DNS 解析的域名实现稳定的 NetworkPolicy 白名单。
该实现使用一个称为“延迟缓存”的附加缓存存储,延迟时间为若干秒。到期时,如果延迟缓存中存在相应项,则延迟缓存中的项将替换为早期缓存中的项。当有请求到来时,该插件通常首先检查响应是否缓存在延迟缓存中,然后检查是否缓存在早期缓存中。如果源 IP 匹配带有标签 k8s-cache.coredns.io/early-refresh=true
的 Pod,则会跳过延迟缓存并立即向早期缓存征询。
这款插件旨在替代cache插件,不应与之结合使用。
我们将尽最大可能保持这款插件的代码与cache同步。
语法
k8s_cache [TTL] [ZONES...] {
earlyrefresh [DURATION]
success CAPACITY [TTL] [MINTTL]
denial CAPACITY [TTL] [MINTTL]
prefetch AMOUNT [[DURATION] [PERCENTAGE%]]
serve_stale [DURATION] [REFRESH_MODE]
servfail DURATION
disable success|denial [ZONES...]
keepttl
}
有关详细信息,请参见 cache 文档。这款插件添加了一个参数,并稍微改变了一些其他参数的意义。
earlyrefresh
设置DURATION(例如,“5s”),在该时间之前,early-refresh
Pod 会获取新的回复。对于没有早期刷新标签的 Pod,此选项实际上增加了成功响应的缓存持续时间。每个客户端都会作为 TTL 响应收到其自己的当前缓存持续时间。prefetch
的工作方式与cache中相同,但它使用早期缓存的过期时间来计算是否应执行预取。serve_stale
的工作方式与cache中相同,但DURATION是从早期缓存的过期时间开始计算的。对于缓存在延迟缓存中的有效响应,serve_stale
仅在延迟缓存过期时才开始生效。延迟缓存过期后,无意义的服务将持续进行DURATION减去earlyrefresh
持续时间。具有早期刷新标签的 Pod 永远不会接收无意义响应。
示例
保留 10000(默认值)的有效和无效缓存大小,并向具有早期刷新标签的 Pod 提前 5 秒发送缓存刷新。
.:5300 {
k8s_cache {
success 10000
denial 10000
earlyrefresh 5s
}
forward . 8.8.8.8
}
有关一般缓存示例,请参见 cache 文档。