{"id":5945,"date":"2019-06-20T17:47:39","date_gmt":"2019-06-20T15:47:39","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=5945"},"modified":"2019-06-20T17:47:40","modified_gmt":"2019-06-20T15:47:40","slug":"k3s-mit-eigenem-upstream-dns-server-betreiben","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/k3s-mit-eigenem-upstream-dns-server-betreiben\/","title":{"rendered":"K3S mit eigenem Upstream DNS-Server betreiben"},"content":{"rendered":"<p>Oft m\u00f6chte man aus Kubernetes heraus auf einen eigenen, meist internen DNS-Server zugreifen. In Unternehmen k\u00f6nnte dies beispielsweise ein zentraler Datenbankserver sein. Vor allem zu Testzwecken kann das hilfreich sein. Aber auch im heimischen Umfeld bringen All-in-one-Router wie die Fritz! Box ihren eigenen DNS-Server mit. Soll von Kubernetes heraus ein solcher DNS-Name aufgel\u00f6st werden, geht das mit k3s aktuell leider noch schief.<\/p>\n<h2 class=\"wp-block-heading\">Hart kodierter Cloudflare-DNS<\/h2>\n<p>Das Problem liegt in der CoreDNS-Konfiguration: Hier wurde ein DNS-Server von Cloudflare (1.1.1.1) hart kodiert hinterlegt. Dort landen alle Anfragen, die lokal vom Cluster nicht aufgel\u00f6st werden k\u00f6nnen. Der im Host gesetzte Upstream-DNS wird somit auch nicht automatisch gesetzt. Man kann die ConfigMap wie folgt einsehen: <\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl get cm coredns -o yaml\n<\/pre>\n<\/div>\n<p>Wie leicht zu erkennen ist, wird der Upstream mit der Zeile <em>proxy . 1.1.1.1 <\/em>angegeben:<\/p>\n<pre class=\"wp-block-code\"><code class=\"\" data-line=\"\">apiVersion: v1\ndata:\n  Corefile: |\n    .:53 {\n        errors\n        health\n        kubernetes cluster.local in-addr.arpa ip6.arpa {\n          pods insecure\n          upstream\n          fallthrough in-addr.arpa ip6.arpa\n        }\n        prometheus :9153\n        proxy . 1.1.1.1\n        cache 30\n        loop\n        reload\n        loadbalance\n    }\nkind: ConfigMap<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Eigenen DNS-Server einf\u00fcgen<\/h2>\n<p>Um dies zu \u00e4ndern, kann man entweder die ConfigMap direkt bearbeiten<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nkubectl edit cm coredns\n<\/pre>\n<\/div>\n<p>Da ich den Workaround mit Ansible automatisieren wollte, habe ich die Konfiguration exportiert, mit sed den DNS-Server ersetzt und anschlie\u00dfend wieder importiert:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nkubectl get cm -n kube-system coredns -o yaml | sed &quot;s\/proxy . 1.1.1.1\/proxy . 192.168.0.19\/g&quot; &gt; coredns-fixed.yml\nkubectl apply -f coredns-fixed.yml\n<\/pre>\n<\/div>\n<p>In diesem Beispiel wird der DNS-Server 192.168.0.19 eingef\u00fcgt. <\/p>\n<h2 class=\"wp-block-heading\">Offizieller Fix in Aussicht<\/h2>\n<p>Das Problem ist mittlerweile seit einigen Wochen bekannt. Vor wenigen Tagen wurde der Release-Candidate  v0.3.0-rc3  ver\u00f6ffentlicht. Er erm\u00f6glicht es, den DNS-Server zu konfigurieren. Wahlweise per  &#8211;resolv-conf  Argument oder  K3S_RESOLV_CONF  Umgebungsvariable. Als Fallback dient der Google DNS-Server (8.8.8.8).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oft m\u00f6chte man aus Kubernetes heraus auf einen eigenen, meist internen DNS-Server zugreifen. In Unternehmen k\u00f6nnte dies beispielsweise ein zentraler Datenbankserver sein. Vor allem zu Testzwecken kann das hilfreich sein. Aber auch im heimischen Umfeld bringen All-in-one-Router wie die Fritz! Box ihren eigenen DNS-Server mit. Soll von Kubernetes heraus ein solcher DNS-Name aufgel\u00f6st werden, geht &#8230;<\/p>\n","protected":false},"author":5,"featured_media":6148,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[720,719],"class_list":["post-5945","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-dns","tag-kubernetes"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/5945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=5945"}],"version-history":[{"count":2,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/5945\/revisions"}],"predecessor-version":[{"id":6147,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/5945\/revisions\/6147"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/6148"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=5945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=5945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=5945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}