mirror of
https://github.com/hanzoai/dns.git
synced 2026-10-30 18:40:55 +00:00
* Bump version to 1.14.2 (#7895) This PR bumps version to 1.14.2, as part of the release. Related to 7883 Signed-off-by: Yong Tang <[email protected]> * plugin/reload: Allow disabling jitter with 0s (#7896) This PR fixes #7894 by allowing reload 2s 0s as documented. Signed-off-by: Yong Tang <[email protected]> * Bump golang to 1.26.1 (#7902) * Update release note for upcoming 1.14.2 (#7897) * fix: release date for v1.14.2 notes (#7906) Updated release date for CoreDNS 1.14.2 to match the actual release date. This causes issues when rendering the coredns.io website. Signed-off-by: Ville Vesilehto <[email protected]> * chore(lint): bump golangci-lint to v2.11.1 (#7905) - Added nolint to plugin/auto/walk.go to avoid a symlink/TOCTOU warning, as it needs to follow symlink. - Replaced a few flagged integer conversions with safe equivalents in cache hashing, reuseport socket setup, and TLS arg handling - Preallocated response rule slices in plugin/rewrite/name.go - Replaced WriteString(fmt.Sprintf/Sprintln(...)) with direct fmt.Fprint* calls - Removed stale nolint directives from code and tests that are no longer needed Signed-off-by: Ville Vesilehto <[email protected]> * feat(secondary): Send NOTIFY messages after zone transfer (#7901) * feat(secondary): Send NOTIFY messages after zone transfer - Modified TransferIn() method to accept a transfer.Transfer parameter - Added NOTIFY message sending after successful zone transfer in secondary plugin - Updated Update() method to pass the transfer handler through the zone update cycle - Added comprehensive tests for the secondary notify functionality Closes #5669 Signed-off-by: liucongran <[email protected]> * fix(secondary): Fix TransferIn method call in test Update test to pass nil parameter to TransferIn method after signature change Signed-off-by: liucongran <[email protected]> * refactor(secondary): Clean up imports and add helper methods - Reorder imports for consistency - Add hasSOA() and getSOA() helper methods to Zone - Remove unnecessary blank lines in tests Signed-off-by: liucongran <[email protected]> * fix(test): Fix variable declaration in secondary test Change corefile variable assignment to use short declaration syntax (:=) to fix compilation error. Signed-off-by: liucongran <[email protected]> * refactor(secondary): Use getSOA helper method in shouldTransfer Replace direct SOA access with getSOA() helper method for consistency. Signed-off-by: liucongran <[email protected]> --------- Signed-off-by: liucongran <[email protected]> Co-authored-by: liucongran <[email protected]> * build(deps): bump github/codeql-action from 4.32.5 to 4.32.6 (#7911) * build(deps): bump docker/login-action from 3.7.0 to 4.0.0 (#7908) * build(deps): bump actions/dependency-review-action from 4.8.3 to 4.9.0 (#7909) * build(deps): bump github.com/aws/aws-sdk-go-v2/service/secretsmanager (#7920) * build(deps): bump google.golang.org/grpc from 1.79.1 to 1.79.2 (#7916) * build(deps): bump aquasecurity/trivy-action from 0.34.1 to 0.35.0 (#7910) * build(deps): bump k8s.io/klog/v2 in the k8s-io group (#7912) * build(deps): bump golang.org/x/sys from 0.41.0 to 0.42.0 (#7913) Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.41.0 to 0.42.0. - [Commits](https://github.com/golang/sys/compare/v0.41.0...v0.42.0) --- updated-dependencies: - dependency-name: golang.org/x/sys dependency-version: 0.42.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * build(deps): bump sigs.k8s.io/mcs-api from 0.3.0 to 0.4.0 (#7919) Bumps [sigs.k8s.io/mcs-api](https://github.com/kubernetes-sigs/mcs-api) from 0.3.0 to 0.4.0. - [Release notes](https://github.com/kubernetes-sigs/mcs-api/releases) - [Changelog](https://github.com/kubernetes-sigs/mcs-api/blob/master/RELEASE.md) - [Commits](https://github.com/kubernetes-sigs/mcs-api/compare/v0.3.0...v0.4.0) --- updated-dependencies: - dependency-name: sigs.k8s.io/mcs-api dependency-version: 0.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * build(deps): bump github.com/aws/aws-sdk-go-v2/service/route53 (#7917) Bumps [github.com/aws/aws-sdk-go-v2/service/route53](https://github.com/aws/aws-sdk-go-v2) from 1.62.2 to 1.62.3. - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/fsx/v1.62.2...service/fsx/v1.62.3) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2/service/route53 dependency-version: 1.62.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> * plugin/forward: add max_age option to enforce an absolute connection lifetime (#7903) * plugin/pkg/proxy: add max_age for per-connection lifetime cap Introduce a max_age setting on Transport that closes connections based on creation time, independent of idle-timeout (expire). Background: PR #7790 changed the connection pool from LIFO to FIFO for source-port diversity. Under FIFO, every connection is cycled through the pool and its used timestamp is refreshed continuously. When request rate is high enough that pool_size / request_rate < expire, no connection ever becomes idle and expire never fires. This prevents CoreDNS from opening new connections to upstreams that scale out (e.g. new Kubernetes pods behind a ClusterIP service with conntrack pinning). max_age addresses this by enforcing an absolute upper bound on connection lifetime regardless of activity: - persistConn gains a created field set at dial time. - Transport gains maxAge (default 0 = unlimited, preserving existing behaviour). - Dial(): rejects cached connections whose creation age exceeds max_age. - cleanup(): when maxAge > 0, uses a linear scan over both idle-timeout and max-age predicates; when maxAge == 0, preserves the original binary-search path on used time (sorted by FIFO insertion order). - Both hot paths pre-compute the deadline outside any inner loop to avoid repeated time.Now() calls. Tests added: - TestMaxAgeExpireByCreation: connection with old created but fresh used must be rejected even though idle-timeout would pass. - TestMaxAgeFIFORotation: three FIFO-rotated connections (old created, fresh used) must all be rejected, confirming that continuous rotation cannot prevent max-age expiry. Signed-off-by: cangming <[email protected]> * plugin/forward: add max_age option Expose Transport.SetMaxAge through the forward plugin so operators can set an absolute upper bound on connection lifetime via the Corefile. Usage: forward . 1.2.3.4 { max_age 30s } Default is 0 (unlimited), which preserves existing behaviour. A positive value causes connections older than max_age to be closed and re-dialled on the next request, ensuring CoreDNS reconnects to newly scaled-out upstream pods even under sustained load where the idle timeout (expire) would never fire. If max_age is set, it must not be less than expire; the parser rejects this combination at startup with a clear error message. Signed-off-by: cangming <[email protected]> --------- Signed-off-by: cangming <[email protected]> * build(deps): bump github.com/aws/aws-sdk-go-v2/feature/ec2/imds (#7914) * build(deps): bump github.com/aws/aws-sdk-go-v2/config (#7915) * Add optional TLS support to /metrics endpoint (#7255) * Use exporter-toolkit to enable optional TLS encryption on /metrics endpoint Signed-off-by: peppi-lotta <[email protected]> * Implement startup listener to signal server readiness Signed-off-by: peppi-lotta <[email protected]> --------- Signed-off-by: peppi-lotta <[email protected]> * refactor(test): replace deprecated pbutil dep (#7924) Replace github.com/matttproud/golang_protobuf_extensions/pbutil with google.golang.org/protobuf/encoding/protodelim for reading varint size-delimited protobuf messages in the metrics scraper. The new protodelim package is already available via the existing google.golang.org/protobuf dependency, so this removes pbutil as a direct dependency entirely. Signed-off-by: Ville Vesilehto <[email protected]> * Fix case-sensitive zone handling in the transfer plugin for AXFR/IXFR. (#7899) This PR fixes Fix case-sensitive zone handling in the transfer plugin for AXFR/IXFR, raised in 7898 Signed-off-by: Yong Tang <[email protected]> * core: Propagate TSIG secrets to DoT server (#7928) * build(deps): bump github/codeql-action from 4.32.6 to 4.33.0 (#7929) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.32.6 to 4.33.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/0d579ffd059c29b07949a3cce3983f0780820c98...b1bff81932f5cdfc8695c7752dcee935dcd061c8) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.33.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * build(deps): bump softprops/action-gh-release from 2.5.0 to 2.6.1 (#7930) Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.5.0 to 2.6.1. - [Release notes](https://github.com/softprops/action-gh-release/releases) - [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md) - [Commits](https://github.com/softprops/action-gh-release/compare/a06a81a03ee405af7f2048a818ed3f03bbf83c7b...153bb8e04406b158c6c84fc1615b65b24149a1fe) --- updated-dependencies: - dependency-name: softprops/action-gh-release dependency-version: 2.6.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * core: Avoid spawning waiter goroutines when QUIC worker pool is full (#7927) * build(deps): bump golang.org/x/crypto from 0.48.0 to 0.49.0 (#7939) * build(deps): bump github.com/aws/aws-sdk-go-v2 from 1.41.3 to 1.41.4 (#7938) * build(deps): bump golang.org/x/net from 0.51.0 to 0.52.0 (#7936) * build(deps): bump google.golang.org/api from 0.269.0 to 0.271.0 (#7933) * build(deps): bump github.com/aws/aws-sdk-go-v2/config (#7932) * build(deps): bump github.com/aws/aws-sdk-go-v2/service/route53 (#7937) * fix(file): protect Zone.Expired with mutex (#7940) * build(deps): bump github.com/aws/aws-sdk-go-v2/service/secretsmanager (#7935) * docs(cache): clarify TTL directive (#7941) * core: Reject oversized GET dns query parameter of DoH (#7926) * core: Reject oversized GET dns query parameter of DoH The DoH POST path limits request size using http.MaxBytesReader(..., 65536), but the GET path passes the dns query value directly to base64ToMsg() with no equivalent bound. This PR adds length check. Signed-off-by: Yong Tang <[email protected]> * Fix Signed-off-by: Yong Tang <[email protected]> --------- Signed-off-by: Yong Tang <[email protected]> * build(deps): bump google.golang.org/grpc from 1.79.2 to 1.79.3 (#7945) * Core: Propagate TSIG status in DoQ transport (#7947) This PR nsure DoQ writer preserves and returns TSIG verification status, preventing authentication bypass on DNS-over-QUIC. Signed-off-by: Yong Tang <[email protected]> * Update github workflow to release windows builds in zip format. (#7946) * feat: Add GitHub Actions workflow for drafting releases and update Makefile to build Windows releases as zip archives. Signed-off-by: John-Michael Mulesa <[email protected]> * Generate both tgz and zip for Windows to support any existing workflows. Signed-off-by: John-Michael Mulesa <[email protected]> --------- Signed-off-by: John-Michael Mulesa <[email protected]> * build(deps): bump github/codeql-action from 4.33.0 to 4.34.1 (#7952) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.33.0 to 4.34.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/b1bff81932f5cdfc8695c7752dcee935dcd061c8...38697555549f1db7851b81482ff19f1fa5c4fedc) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.34.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * build(deps): bump github.com/DataDog/dd-trace-go/v2 from 2.6.0 to 2.7.0 (#7955) Bumps [github.com/DataDog/dd-trace-go/v2](https://github.com/DataDog/dd-trace-go) from 2.6.0 to 2.7.0. - [Release notes](https://github.com/DataDog/dd-trace-go/releases) - [Commits](https://github.com/DataDog/dd-trace-go/compare/v2.6.0...v2.7.0) --- updated-dependencies: - dependency-name: github.com/DataDog/dd-trace-go/v2 dependency-version: 2.7.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * ci: use go-version-file instead of GITHUB_ENV (#7958) * ci(docker): scope secrets to publish step only (#7959) * ci(yamllint): replace third-party action with uvx (#7957) * build(deps): bump the k8s-io group with 3 updates (#7953) * build(deps): bump the go-etcd-io group with 2 updates (#7954) * ci(dependabot): add 7-day cooldown for updates (#7960) * fix(kubernetes): record cluster_ip services in dns_programming_duration metric (#7951) Signed-off-by: Azeez Syed <[email protected]> * plugin/cache: prefetch without holding a client connection (#7944) * ci: add persist-credentials: false to checkouts (#7964) * ci(release): use env vars for expressions in shell (#7965) * ci(depsreview): add version comment to pin (#7966) * plugin/transfter: Fix longestMatch to select the most specific zone correctly. (#7949) * plugin/transfter: Fix longestMatch to select the most specific zone correctly. This PR Fix longestMatch to select the most specific zone correctly.The previous implementation used lexicographic string comparison, which could choose the wrong zone; this change selects the longest matching zone instead. Signed-off-by: Yong Tang <[email protected]> * Tie breaker Signed-off-by: Yong Tang <[email protected]> * Fix Signed-off-by: Yong Tang <[email protected]> --------- Signed-off-by: Yong Tang <[email protected]> * core: Preserve TSIG status in gRPC transport (#7943) * ci: remove trivy-action (#7961) * feat: add support for running CoreDNS as a Windows service (#7962) * feat: add support for running CoreDNS as a Windows service Signed-off-by: John-Michael Mulesa <[email protected]> * Use non-deprecated service check function. Signed-off-by: John-Michael Mulesa <[email protected]> * refactor: remove deprecated build tags and clean up imports in service files Signed-off-by: John-Michael Mulesa <[email protected]> * ci: add Windows test workflow and fix log field access in service_windows.go Signed-off-by: John-Michael Mulesa <[email protected]> * test: implement cross-platform file permission restriction for Windows compatibility in run_test.go Signed-off-by: John-Michael Mulesa <[email protected]> * refactor: remove Windows-specific icacls test logic and restrict unreadable file test to non-Windows platforms Signed-off-by: John-Michael Mulesa <[email protected]> * docs: add documentation for -windows-service flag in man page Signed-off-by: John-Michael Mulesa <[email protected]> --------- Signed-off-by: John-Michael Mulesa <[email protected]> * test(dnssec): fix err in TestZoneSigningDouble (#7969) * chore(docs): regenerate man pages (#7971) * chore(docs): update Docker build command in README (#7972) * plugin/tsig: add require_opcode directive for opcode-based TSIG (#7828) Extend the tsig plugin to require TSIG signatures based on DNS opcodes, similar to the existing qtype-based requirement. The new require_opcode directive accepts opcode names (QUERY, IQUERY, STATUS, NOTIFY, UPDATE) or the special values "all" and "none". This is useful for requiring TSIG on dynamic update (UPDATE) or zone transfer notification (NOTIFY) requests while allowing unsigned queries. Example: ``` tsig { secret key. NoTCJU+DMqFWywaPyxSijrDEA/eC3nK0xi3AMEZuPVk= require_opcode UPDATE NOTIFY } ``` Signed-off-by: Seena Fallah <[email protected]> * plugin/tls: Add the keylog option to configure TLSConfig.KeyLogWriter (#7537) * tls: Add the keylog option to configure TLSConfig.KeyLogWriter Signed-off-by: Ilya Kulakov <[email protected]> * tls: Close keylog file on instance shutdown. Signed-off-by: Ilya Kulakov <[email protected]> --------- Signed-off-by: Ilya Kulakov <[email protected]> --------- Signed-off-by: Yong Tang <[email protected]> Signed-off-by: Ville Vesilehto <[email protected]> Signed-off-by: liucongran <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: cangming <[email protected]> Signed-off-by: peppi-lotta <[email protected]> Signed-off-by: John-Michael Mulesa <[email protected]> Signed-off-by: Azeez Syed <[email protected]> Signed-off-by: Seena Fallah <[email protected]> Signed-off-by: Ilya Kulakov <[email protected]> Co-authored-by: Yong Tang <[email protected]> Co-authored-by: Ville Vesilehto <[email protected]> Co-authored-by: liucongran <[email protected]> Co-authored-by: liucongran <[email protected]> Co-authored-by: cangming <[email protected]> Co-authored-by: Peppi-Lotta <[email protected]> Co-authored-by: John-Michael Mulesa <[email protected]> Co-authored-by: Syed Azeez <[email protected]> Co-authored-by: John-Michael Mulesa <[email protected]> Co-authored-by: Seena Fallah <[email protected]> Co-authored-by: Ilya Kulakov <[email protected]> Co-authored-by: Hanzo Dev <[email protected]>
211 lines
7.7 KiB
Plaintext
211 lines
7.7 KiB
Plaintext
.\" Generated by Mmark Markdown Processer - mmark.miek.nl
|
|
.TH "COREDNS-CACHE" 7 "March 2026" "CoreDNS" "CoreDNS Plugins"
|
|
|
|
.SH "NAME"
|
|
.PP
|
|
\fIcache\fP - enables a frontend cache.
|
|
|
|
.SH "DESCRIPTION"
|
|
.PP
|
|
With \fIcache\fP enabled, all records except zone transfers and metadata records will be cached for up to
|
|
3600s. Caching is mostly useful in a scenario when fetching data from the backend (upstream,
|
|
database, etc.) is expensive.
|
|
|
|
.PP
|
|
\fICache\fP will pass DNSSEC (DNSSEC OK; DO) options through the plugin for upstream queries.
|
|
|
|
.PP
|
|
This plugin can only be used once per Server Block.
|
|
|
|
.SH "SYNTAX"
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
cache [TTL] [ZONES...]
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.IP \(bu 4
|
|
\fBTTL\fP max TTL in seconds. If not specified, the maximum TTL will be used, which is 3600 for
|
|
NOERROR responses and 1800 for denial of existence ones.
|
|
Setting a TTL of 300: \fB\fCcache 300\fR would cache records up to 300 seconds.
|
|
.IP \(bu 4
|
|
\fBZONES\fP zones it should cache for. If empty, the zones from the configuration block are used.
|
|
|
|
|
|
.PP
|
|
Each element in the cache is cached according to its TTL (with \fBTTL\fP as the max).
|
|
Note that \fBTTL\fP only caps the cache duration and does not extend it. A record with a 30s TTL
|
|
will still be cached for 30s even with \fB\fCcache 600\fR. The minimum cache duration defaults to 5
|
|
seconds and can be adjusted per cache type using \fBMINTTL\fP in the \fB\fCsuccess\fR or \fB\fCdenial\fR directives.
|
|
|
|
.PP
|
|
A cache is divided into 256 shards, each holding up to 39 items by default - for a total size
|
|
of 256 * 39 = 9984 items.
|
|
|
|
.PP
|
|
If you want more control:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
cache [TTL] [ZONES...] {
|
|
success CAPACITY [TTL] [MINTTL]
|
|
denial CAPACITY [TTL] [MINTTL]
|
|
prefetch AMOUNT [[DURATION] [PERCENTAGE%]]
|
|
serve\_stale [DURATION] [REFRESH\_MODE]
|
|
servfail DURATION
|
|
disable success|denial [ZONES...]
|
|
keepttl
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.IP \(bu 4
|
|
\fBTTL\fP and \fBZONES\fP as above.
|
|
.IP \(bu 4
|
|
\fB\fCsuccess\fR, override the settings for caching successful responses. \fBCAPACITY\fP indicates the maximum
|
|
number of packets we cache before we start evicting (\fIrandomly\fP). \fBTTL\fP overrides the cache maximum TTL.
|
|
\fBMINTTL\fP overrides the cache minimum TTL (default 5), which can be useful to limit queries to the backend.
|
|
.IP \(bu 4
|
|
\fB\fCdenial\fR, override the settings for caching denial of existence responses. \fBCAPACITY\fP indicates the maximum
|
|
number of packets we cache before we start evicting (LRU). \fBTTL\fP overrides the cache maximum TTL.
|
|
\fBMINTTL\fP overrides the cache minimum TTL (default 5), which can be useful to limit queries to the backend.
|
|
There is a third category (\fB\fCerror\fR) but those responses are never cached.
|
|
.IP \(bu 4
|
|
\fB\fCprefetch\fR will prefetch popular items when they are about to be expunged from the cache.
|
|
Popular means \fBAMOUNT\fP queries have been seen with no gaps of \fBDURATION\fP or more between them.
|
|
\fBDURATION\fP defaults to 1m. Prefetching will happen when the TTL drops below \fBPERCENTAGE\fP,
|
|
which defaults to \fB\fC10%\fR, or latest 1 second before TTL expiration. Values should be in the range \fB\fC[10%, 90%]\fR.
|
|
Note the percent sign is mandatory. \fBPERCENTAGE\fP is treated as an \fB\fCint\fR.
|
|
.IP \(bu 4
|
|
\fB\fCserve_stale\fR, when serve_stale is set, cache will always serve an expired entry to a client if there is one
|
|
available as long as it has not been expired for longer than \fBDURATION\fP (default 1 hour). By default, the \fIcache\fP plugin will
|
|
attempt to refresh the cache entry after sending the expired cache entry to the client. The
|
|
responses have a TTL of 0. \fBREFRESH_MODE\fP controls the timing of the expired cache entry refresh.
|
|
\fB\fCverify\fR will first verify that an entry is still unavailable from the source before sending the expired entry to the client.
|
|
\fB\fCimmediate\fR will immediately send the expired entry to the client before
|
|
checking to see if the entry is available from the source. \fBREFRESH_MODE\fP defaults to \fB\fCimmediate\fR. Setting this
|
|
value to \fB\fCverify\fR can lead to increased latency when serving stale responses, but will prevent stale entries
|
|
from ever being served if an updated response can be retrieved from the source.
|
|
.IP \(bu 4
|
|
\fB\fCservfail\fR cache SERVFAIL responses for \fBDURATION\fP. Setting \fBDURATION\fP to 0 will disable caching of SERVFAIL
|
|
responses. If this option is not set, SERVFAIL responses will be cached for 5 seconds. \fBDURATION\fP may not be
|
|
greater than 5 minutes.
|
|
.IP \(bu 4
|
|
\fB\fCdisable\fR disable the success or denial cache for the listed \fBZONES\fP. If no \fBZONES\fP are given, the specified
|
|
cache will be disabled for all zones.
|
|
.IP \(bu 4
|
|
\fB\fCkeepttl\fR do not age TTL when serving responses from cache. The entry will still be removed from cache
|
|
when the TTL expires as normal, but until it expires responses will include the original TTL instead
|
|
of the remaining TTL. This can be useful if CoreDNS is used as an authoritative server and you want
|
|
to serve a consistent TTL to downstream clients. This is \fBNOT\fP recommended when CoreDNS is caching
|
|
records it is not authoritative for because it could result in downstream clients using stale answers.
|
|
|
|
|
|
.SH "CAPACITY AND EVICTION"
|
|
.PP
|
|
If \fBCAPACITY\fP \fIis not\fP specified, the default cache size is 9984 per cache. The minimum allowed cache size is 1024.
|
|
If \fBCAPACITY\fP \fIis\fP specified, the actual cache size used will be rounded down to the nearest number divisible by 256 (so all shards are equal in size).
|
|
|
|
.PP
|
|
Eviction is done per shard. In effect, when a shard reaches capacity, items are evicted from that shard.
|
|
Since shards don't fill up perfectly evenly, evictions will occur before the entire cache reaches full capacity.
|
|
Each shard capacity is equal to the total cache size / number of shards (256). Eviction is random, not TTL based.
|
|
Entries with 0 TTL will remain in the cache until randomly evicted when the shard reaches capacity.
|
|
|
|
.SH "METRICS"
|
|
.PP
|
|
If monitoring is enabled (via the \fIprometheus\fP plugin) then the following metrics are exported:
|
|
|
|
.IP \(bu 4
|
|
\fB\fCcoredns_cache_entries{server, type, zones, view}\fR - Total elements in the cache by cache type.
|
|
.IP \(bu 4
|
|
\fB\fCcoredns_cache_hits_total{server, type, zones, view}\fR - Counter of cache hits by cache type.
|
|
.IP \(bu 4
|
|
\fB\fCcoredns_cache_misses_total{server, zones, view}\fR - Counter of cache misses. - Deprecated, derive misses from cache hits/requests counters.
|
|
.IP \(bu 4
|
|
\fB\fCcoredns_cache_requests_total{server, zones, view}\fR - Counter of cache requests.
|
|
.IP \(bu 4
|
|
\fB\fCcoredns_cache_prefetch_total{server, zones, view}\fR - Counter of times the cache has prefetched a cached item.
|
|
.IP \(bu 4
|
|
\fB\fCcoredns_cache_drops_total{server, zones, view}\fR - Counter of responses excluded from the cache due to request/response question name mismatch.
|
|
.IP \(bu 4
|
|
\fB\fCcoredns_cache_served_stale_total{server, zones, view}\fR - Counter of requests served from stale cache entries.
|
|
.IP \(bu 4
|
|
\fB\fCcoredns_cache_evictions_total{server, type, zones, view}\fR - Counter of cache evictions.
|
|
|
|
|
|
.PP
|
|
Cache types are either "denial" or "success". \fB\fCServer\fR is the server handling the request, see the
|
|
prometheus plugin for documentation.
|
|
|
|
.SH "EXAMPLES"
|
|
.PP
|
|
Enable caching for all zones, but cap everything to a TTL of 10 seconds:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
\&. {
|
|
cache 10
|
|
whoami
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Proxy to Google Public DNS and only cache responses for example.org (or below).
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
\&. {
|
|
forward . 8.8.8.8:53
|
|
cache example.org
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Enable caching for \fB\fCexample.org\fR, keep a positive cache size of 5000 and a negative cache size of 2500:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
example.org {
|
|
cache {
|
|
success 5000
|
|
denial 2500
|
|
}
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|
|
.PP
|
|
Enable caching for \fB\fCexample.org\fR, but do not cache denials in \fB\fCsub.example.org\fR:
|
|
|
|
.PP
|
|
.RS
|
|
|
|
.nf
|
|
example.org {
|
|
cache {
|
|
disable denial sub.example.org
|
|
}
|
|
}
|
|
|
|
.fi
|
|
.RE
|
|
|