chore: bump to v1.12.2 (#327)

Signed-off-by: Ville Vesilehto <ville@vesilehto.fi>
This commit is contained in:
Ville Vesilehto
2025-08-05 11:33:24 -07:00
committed by GitHub
parent e7d068e954
commit a2b2f028d2
11 changed files with 211 additions and 20 deletions
+33
View File
@@ -0,0 +1,33 @@
+++
title = "CoreDNS-1.12.1 Release"
description = "CoreDNS-1.12.1 Release Notes."
tags = ["Release", "1.12.1", "Notes"]
release = "1.12.1"
date = "2025-03-24T00:00:00+00:00"
author = "coredns"
+++
In this release:
* kubernetes: Revert recent change to only create PTR records for endpoints with hostname defined.
* forward: added option to return SERVFAIL immediately if all upstreams are unhealthy.
## Brought to You By
Adrian Moisey,
Arthur Outhenin-Chalandre,
Bartosz Borkowski,
Ben Kochie,
Chris O'Haver,
Min Woo Kim,
Puneet Loya,
Rich,
Viktor,
momantech
## Noteworthy Changes
* core: Increase CNAME lookup limit from 7 to 10 (https://github.com/coredns/coredns/pull/7153)
* plugin/kubernetes: Fix handling of pods having DeletionTimestamp set (https://github.com/coredns/coredns/pull/7119) (#7131)
* plugin/kubernetes: Revert "only create PTR records for endpoints with hostname defined (https://github.com/coredns/coredns/pull/6898)" (#7194)
* plugin/forward: added option `failfast_all_unhealthy_upstreams` to return servfail if all upstreams are down (https://github.com/coredns/coredns/pull/6999)
+50
View File
@@ -0,0 +1,50 @@
+++
title = "CoreDNS-1.12.2 Release"
description = "CoreDNS-1.12.2 Release Notes."
tags = ["Release", "1.12.2", "Notes"]
release = "1.12.2"
date = "2025-06-06T00:00:00+00:00"
author = "coredns"
+++
This release introduces significant improvements to plugin stability and extensibility.
It adds multicluster support to the Kubernetes plugin, fallthrough support in the file plugin,
and a new SetProxyOptions function for the forward plugin.
Notably, the QUIC (DoQ) plugin now limits concurrent streams, improving performance under load.
Several bug fixes and optimizations improve reliability across plugins, including rewrite, proxy, and metrics.
## Brought to You By
Ambrose Chua,
Arthur Outhenin-Chalandre,
Ben Kochie,
Colden Cullen,
Gleb Kogtev,
Hirotaka Tagawa,
Kevin Lyda,
Manuel Rüger,
Mark Mickan,
Parfenov Ivan,
skipper,
vdbe,
Viktor Oreshkin,
Ville Vesilehto,
Yannick Epstein,
Yong Tang
## Noteworthy Changes
* core: Enable plugins via environment during build (https://github.com/coredns/coredns/pull/7310)
* core: Ensure DNS query name reset in plugin.NS error path (https://github.com/coredns/coredns/pull/7142)
* plugin/forward: Added SetProxyOptions function for forward plugin (https://github.com/coredns/coredns/pull/7229)
* plugin/ready: Do not interrupt querying readiness probes for plugins (https://github.com/coredns/coredns/pull/6975)
* plugin/secondary: Make transfer property mandatory (https://github.com/coredns/coredns/pull/7249)
* plugin/rewrite: Truncated upstream response (https://github.com/coredns/coredns/pull/7277)
* plugin/quic: Limit concurrent DoQ streams and goroutines (https://github.com/coredns/coredns/pull/7296)
* plugin/kubernetes: Add multicluster support (https://github.com/coredns/coredns/pull/7266)
* plugin/bind: Remove zone for link-local IPv4 (https://github.com/coredns/coredns/pull/7295)
* plugin/metrics: Preserve request size from plugins (https://github.com/coredns/coredns/pull/7313)
* plugin/proxy: Avoid Dial hang after Transport stopped (https://github.com/coredns/coredns/pull/7321)
* plugin/file: Add fallthrough support (https://github.com/coredns/coredns/pull/7327)
* plugin/kubernetes: Optimize AutoPath slice allocation (https://github.com/coredns/coredns/pull/7323)
+6 -1
View File
@@ -4,7 +4,7 @@ description = "*file* enables serving zone data from an RFC 1035-style master fi
weight = 19
tags = ["plugin", "file"]
categories = ["plugin"]
date = "2021-03-08T11:28:22.8772283"
date = "2025-06-13T10:26:16.8771686"
+++
## Description
@@ -30,12 +30,17 @@ If you want to round-robin A and AAAA responses look at the *loadbalance* plugin
~~~
file DBFILE [ZONES... ] {
reload DURATION
fallthrough [ZONES...]
}
~~~
* `reload` interval to perform a reload of the zone if the SOA version changes. Default is one minute.
Value of `0` means to not scan for changes and reload. For example, `30s` checks the zonefile every 30 seconds
and reloads the zone when serial changes.
* `fallthrough` If zone matches and no record can be generated, pass request to the next plugin.
If **[ZONES...]** is omitted, then fallthrough happens for all zones for which the plugin
is authoritative. If specific zones are listed (for example `in-addr.arpa` and `ip6.arpa`), then only
queries for those zones will be subject to fallthrough.
If you need outgoing zone transfers, take a look at the *transfer* plugin.
+3 -1
View File
@@ -4,7 +4,7 @@ description = "*forward* facilitates proxying DNS messages to upstream resolvers
weight = 20
tags = ["plugin", "forward"]
categories = ["plugin"]
date = "2024-11-22T08:09:54.87754811"
date = "2025-06-13T10:26:16.8771686"
+++
## Description
@@ -54,6 +54,7 @@ forward FROM TO... {
health_check DURATION [no_rec] [domain FQDN]
max_concurrent MAX
next RCODE_1 [RCODE_2] [RCODE_3...]
failfast_all_unhealthy_upstreams
}
~~~
@@ -100,6 +101,7 @@ forward FROM TO... {
at least greater than the expected *upstream query rate* * *latency* of the upstream servers.
As an upper bound for **MAX**, consider that each concurrent query will use about 2kb of memory.
* `next` If the `RCODE` (i.e. `NXDOMAIN`) is returned by the remote then execute the next plugin. If no next plugin is defined, or the next plugin is not a `forward` plugin, this setting is ignored
* `failfast_all_unhealthy_upstreams` - determines the handling of requests when all upstream servers are unhealthy and unresponsive to health checks. Enabling this option will immediately return SERVFAIL responses for all requests. By default, requests are sent to a random upstream.
Also note the TLS config is "global" for the whole forwarding proxy if you need a different
`tls_servername` for different upstreams you're out of luck.
+19 -1
View File
@@ -4,7 +4,7 @@ description = "*kubernetes* enables reading zone data from a Kubernetes cluster.
weight = 28
tags = ["plugin", "kubernetes"]
categories = ["plugin"]
date = "2024-11-22T08:09:54.87754811"
date = "2025-06-13T10:26:16.8771686"
+++
## Description
@@ -45,6 +45,7 @@ kubernetes [ZONES...] {
noendpoints
fallthrough [ZONES...]
ignore empty_service
multicluster [ZONES...]
}
```
@@ -104,6 +105,10 @@ kubernetes [ZONES...] {
* `ignore empty_service` returns NXDOMAIN for services without any ready endpoint addresses (e.g., ready pods).
This allows the querying pod to continue searching for the service in the search path.
The search path could, for example, include another Kubernetes cluster.
* `multicluster` defines the multicluster zones as defined by Multi-Cluster
Services API (MCS-API). Specifying this option is generally paired with the
installation of an MCS-API implementation and the ServiceImport and ServiceExport
CRDs. The plugin MUST be authoritative for the zones listed here.
Enabling zone transfer is done by using the *transfer* plugin.
@@ -124,6 +129,11 @@ The *kubernetes* plugin watches Endpoints via the `discovery.EndpointSlices` API
This plugin reports readiness to the ready plugin. This will happen after it has synced to the
Kubernetes API.
## PTR Records
This plugin creates PTR records for every Pod selected by a Service. If a given Pod is selected by more than
one Service a separate PTR record will exist for each Service selecting it.
## Examples
Handle all queries in the `cluster.local` zone. Connect to Kubernetes in-cluster. Also handle all
@@ -155,6 +165,14 @@ kubernetes cluster.local {
}
~~~
Configure multicluster
~~~ txt
kubernetes cluster.local clusterset.local {
multicluster clusterset.local
}
~~~
## stubDomains and upstreamNameservers
Here we use the *forward* plugin to implement a stubDomain that forwards `example.local` to the nameserver `10.100.0.10:53`.
+2 -2
View File
@@ -4,7 +4,7 @@ description = "*prometheus* enables [Prometheus](https://prometheus.io/) metrics
weight = 34
tags = ["plugin", "prometheus"]
categories = ["plugin"]
date = "2023-08-15T20:06:20.8772088"
date = "2025-06-13T10:26:16.8771686"
+++
## Description
@@ -19,7 +19,7 @@ the following metrics are exported:
* `coredns_panics_total{}` - total number of panics.
* `coredns_dns_requests_total{server, zone, view, proto, family, type}` - total query count.
* `coredns_dns_request_duration_seconds{server, zone, view, type}` - duration to process each query.
* `coredns_dns_request_size_bytes{server, zone, view, proto}` - size of the request in bytes.
* `coredns_dns_request_size_bytes{server, zone, view, proto}` - size of the request in bytes. Uses the original size before any plugin rewrites.
* `coredns_dns_do_requests_total{server, view, zone}` - queries that have the DO bit set
* `coredns_dns_response_size_bytes{server, zone, view, proto}` - response size in bytes.
* `coredns_dns_responses_total{server, zone, view, rcode, plugin}` - response per zone, rcode and plugin.
+51
View File
@@ -0,0 +1,51 @@
+++
title = "quic"
description = "*quic* configures DNS-over-QUIC (DoQ) server options."
weight = 39
tags = ["plugin", "quic"]
categories = ["plugin"]
date = "2025-06-13T10:26:16.8771686"
+++
## Description
The *quic* plugin allows you to configure parameters for the DNS-over-QUIC (DoQ) server to fine-tune the security posture and performance of the server.
This plugin can only be used once per quic Server Block.
## Syntax
```txt
quic {
max_streams POSITIVE_INTEGER
worker_pool_size POSITIVE_INTEGER
}
```
* `max_streams` limits the number of concurrent QUIC streams per connection. This helps prevent DoS attacks where an attacker could open many streams on a single connection, exhausting server resources. The default value is 256 if not specified.
* `worker_pool_size` defines the size of the worker pool for processing QUIC streams across all connections. The default value is 512 if not specified. This limits the total number of concurrent streams that can be processed across all connections.
## Examples
Enable DNS-over-QUIC with default settings (256 concurrent streams per connection, 512 worker pool size):
```
quic://.:8853 {
tls cert.pem key.pem
quic
whoami
}
```
Set custom limits for maximum QUIC streams per connection and worker pool size:
```
quic://.:8853 {
tls cert.pem key.pem
quic {
max_streams 16
worker_pool_size 65536
}
whoami
}
```
+12 -5
View File
@@ -1,18 +1,17 @@
+++
title = "ready"
description = "*ready* enables a readiness check HTTP endpoint."
weight = 33
weight = 40
tags = ["plugin", "ready"]
categories = ["plugin"]
date = "2020-02-06T12:07:03.877382"
date = "2025-06-13T10:26:16.8771686"
+++
## Description
By enabling *ready* an HTTP endpoint on port 8181 will return 200 OK, when all plugins that are able
to signal readiness have done so. If some are not ready yet the endpoint will return a 503 with the
body containing the list of plugins that are not ready. Once a plugin has signaled it is ready it
will not be queried again.
body containing the list of plugins that are not ready.
Each Server Block that enables the *ready* plugin will have the plugins *in that server block*
report readiness into the /ready endpoint that runs on the same port. This also means that the
@@ -22,12 +21,20 @@ their readiness reported as the union of their respective readinesses.
## Syntax
~~~
ready [ADDRESS]
ready [ADDRESS] {
monitor until-ready|continuously
}
~~~
*ready* optionally takes an address; the default is `:8181`. The path is fixed to `/ready`. The
readiness endpoint returns a 200 response code and the word "OK" when this server is ready. It
returns a 503 otherwise *and* the list of plugins that are not ready.
By default, once a plugin has signaled it is ready it will not be queried again.
The *ready* directive can include an optional `monitor` parameter, defaulting to `until-ready`. The following values are supported:
* `until-ready` - once a plugin signals it is ready, it will not be checked again. This mode assumes stability after the initial readiness confirmation.
* `continuously` - in this mode, plugins are continuously monitored for readiness. This means a plugin may transition between ready and not ready states, providing real-time status updates.
## Plugins
+20 -7
View File
@@ -1,10 +1,10 @@
+++
title = "timeouts"
description = "*timeouts* allows you to configure the server read, write and idle timeouts for the TCP, TLS and DoH servers."
weight = 46
description = "*timeouts* allows you to configure the server read, write and idle timeouts for the TCP, TLS, DoH and DoQ (idle only) servers."
weight = 48
tags = ["plugin", "timeouts"]
categories = ["plugin"]
date = "2023-02-07T20:00:01.877182"
date = "2025-06-13T10:26:16.8771686"
+++
## Description
@@ -66,13 +66,26 @@ https://. {
}
~~~
Start a standard TCP/UDP server on port 1053. A read and write timeout has been
configured. The timeouts are only applied to the TCP side of the server.
Start a DNS-over-QUIC server that has the idle timeout set to two minutes.
~~~
.:1053 {
quic://.:853 {
tls cert.pem key.pem ca.pem
timeouts {
idle 2m
}
forward . /etc/resolv.conf
}
~~~
Start a standard TCP/UDP server on port 1053. A read and write timeout has been
configured. The timeouts are only applied to the TCP side of the server.
~~~
.:1053 {
timeouts {
read 15s
write 30s
write 30s
}
forward . /etc/resolv.conf
}
+14 -2
View File
@@ -1,10 +1,10 @@
+++
title = "view"
description = "*view* defines conditions that must be met for a DNS request to be routed to the server block."
weight = 52
weight = 53
tags = ["plugin", "view"]
categories = ["plugin"]
date = "2024-11-22T08:09:54.87754811"
date = "2025-06-13T10:26:16.8771686"
+++
## Description
@@ -34,6 +34,7 @@ Implement CIDR based split DNS routing. This will return a different
answer for `test.` depending on client's IP address. It returns ...
* `test. 3600 IN A 1.1.1.1`, for queries with a source address in 127.0.0.0/24
* `test. 3600 IN A 2.2.2.2`, for queries with a source address in 192.168.0.0/16
* `test. 3600 IN AAAA 2001:0DB8::1`, for queries with a source address in 2001:0DB8::/32
* `test. 3600 IN A 3.3.3.3`, for all others
```
@@ -55,6 +56,17 @@ answer for `test.` depending on client's IP address. It returns ...
}
}
. {
view v6_example1 {
expr incidr(client_ip(), '2001:0DB8::/32')
}
hosts {
2001:0DB8::1 test
}
}
}
. {
hosts {
3.3.3.3 test
+1 -1
View File
@@ -1,2 +1,2 @@
[release]
version = "1.12.0"
version = "1.12.2"