diff --git a/roles/kubernetes/preinstall/handlers/main.yml b/roles/kubernetes/preinstall/handlers/main.yml
index 3fd0975779a50a23f51a53a77161de3c960aad95..81d13d4123bbdbde55bb34b30aee3c163ce03992 100644
--- a/roles/kubernetes/preinstall/handlers/main.yml
+++ b/roles/kubernetes/preinstall/handlers/main.yml
@@ -95,3 +95,8 @@
     - inventory_hostname in groups['kube-master']
     - dns_mode != 'none'
     - resolvconf_mode == 'host_resolvconf'
+
+- name: Preinstall | Restart systemd-resolved
+  service:
+    name: systemd-resolved
+    state: restarted
diff --git a/roles/kubernetes/preinstall/tasks/0040-set_facts.yml b/roles/kubernetes/preinstall/tasks/0040-set_facts.yml
index 4a6318cc9a05cb69f5d6870994beb4c612eab304..73b7515894281933e7d5bedc7d9b8e56afbedae2 100644
--- a/roles/kubernetes/preinstall/tasks/0040-set_facts.yml
+++ b/roles/kubernetes/preinstall/tasks/0040-set_facts.yml
@@ -43,6 +43,13 @@
   changed_when: false
   check_mode: no
 
+- name: check systemd-resolved
+  command: systemctl is-active systemd-resolved
+  register: systemd_resolved_enabled
+  failed_when: false
+  changed_when: false
+  check_mode: no
+
 - name: set dns facts
   set_fact:
     resolvconf: >-
diff --git a/roles/kubernetes/preinstall/tasks/0061-systemd-resolved.yml b/roles/kubernetes/preinstall/tasks/0061-systemd-resolved.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3811358629cc43964561f0bf0a1c37e6acda28a1
--- /dev/null
+++ b/roles/kubernetes/preinstall/tasks/0061-systemd-resolved.yml
@@ -0,0 +1,9 @@
+---
+- name: Write resolved.conf
+  template:
+    src: resolved.conf.j2
+    dest: /etc/systemd/resolved.conf
+    owner: root
+    group: root
+    mode: 0644
+  notify: Preinstall | Restart systemd-resolved
diff --git a/roles/kubernetes/preinstall/tasks/main.yml b/roles/kubernetes/preinstall/tasks/main.yml
index 63d20a923ab61c4c9f8420c9a0cb1e3f3c750a2a..9ae44f4a6efbaa85b91bace2f3bd5e7aa5a0d235 100644
--- a/roles/kubernetes/preinstall/tasks/main.yml
+++ b/roles/kubernetes/preinstall/tasks/main.yml
@@ -32,6 +32,16 @@
   when:
     - dns_mode != 'none'
     - resolvconf_mode == 'host_resolvconf'
+    - systemd_resolved_enabled.rc != 0
+  tags:
+    - bootstrap-os
+    - resolvconf
+
+- import_tasks: 0061-systemd-resolved.yml
+  when:
+    - dns_mode != 'none'
+    - resolvconf_mode == 'host_resolvconf'
+    - systemd_resolved_enabled.rc == 0
   tags:
     - bootstrap-os
     - resolvconf
diff --git a/roles/kubernetes/preinstall/templates/resolved.conf.j2 b/roles/kubernetes/preinstall/templates/resolved.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..6aac1a640de7461c55b7993c72c2becd786beff2
--- /dev/null
+++ b/roles/kubernetes/preinstall/templates/resolved.conf.j2
@@ -0,0 +1,13 @@
+[Resolve]
+{% if dns_late %}
+DNS={{ ( coredns_server + nameservers|d([]) + cloud_resolver|d([])) | unique | join(' ') }}
+{% else %}
+DNS={{ ( nameservers|d([]) + cloud_resolver|d([])) | unique | join(' ') }}
+{% endif %}
+#FallbackDNS=
+Domains={{ ([ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([])) | join(' ') }}
+#LLMNR=no
+#MulticastDNS=no
+DNSSEC=no
+Cache=no-negative
+#DNSStubListener=yes