Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Set cluster DNS correctly in case of nodelocal dns cache #3879

1 change: 1 addition & 0 deletions inventory/sample/group_vars/k8s-cluster/k8s-cluster.yml
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ dns_mode: coredns
#manual_dns_server: 10.x.x.x
# Enable nodelocal dns cache
enable_nodelocaldns: False
nodelocaldns_ip: 169.254.25.10

# Can be docker_dns, host_resolvconf or none
resolvconf_mode: docker_dns
Expand Down
1 change: 0 additions & 1 deletion roles/kubernetes-apps/ansible/defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ dns_prevent_single_point_failure: "{{ 'true' if dns_min_replicas|int > 1 else 'f

# nodelocaldns
nodelocaldns_cpu_requests: 100m
nodelocaldns_ip: 169.254.25.10
nodelocaldns_memory_limit: 170Mi
nodelocaldnsdns_memory_requests: 70Mi

Expand Down
26 changes: 24 additions & 2 deletions roles/kubernetes-apps/ansible/tasks/nodelocaldns.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@
---
- name: Kubernetes Apps | set up necessary nodelocaldns parameters
set_fact:
clusterIP: >-
{%- if dns_mode in ['kubedns', 'coredns', 'coredns_dual'] -%}
{{ skydns_server }}
{%- elif dns_mode == 'dnsmasq_kubedns' -%}
{{ dnsmasq_dns_server }}
{%- elif dns_mode == 'manual' -%}
{{ manual_dns_server }}
{%- endif -%}
secondaryclusterIP: "{{ skydns_server_secondary }}"

- name: Kubernetes Apps | Lay Down nodelocaldns Template
template:
src: "{{ item.file }}.j2"
Expand All @@ -9,8 +21,18 @@
- { name: nodelocaldns, file: nodelocaldns-deamonset.yml, type: daemonset }
register: nodelocaldns_manifests
vars:
clusterIP: "{{ skydns_server }}"
secondaryclusterIP: "{{ skydns_server_secondary }}"
forwardTarget: >-
{%- if secondaryclusterIP is defined and dns_mode == 'coredns_dual' -%}
{{ clusterIP }} {{ secondaryclusterIP }}
{%- else -%}
{{ clusterIP }}
{%- endif -%}
upstreamForwardTarget: >-
{%- if resolvconf_mode == 'host_resolvconf' and upstream_dns_servers is defined and upstream_dns_servers|length > 0 -%}
{{ upstream_dns_servers|join(' ') }}
{%- else -%}
/etc/resolv.conf
{%- endif -%}
when:
- enable_nodelocaldns == True
- inventory_hostname == groups['kube-master'] | first
Expand Down
40 changes: 12 additions & 28 deletions roles/kubernetes-apps/ansible/templates/nodelocaldns-config.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -14,58 +14,42 @@ data:
reload
loop
bind {{ nodelocaldns_ip }}
{% if secondaryclusterIP is defined and dns_mode == 'coredns_dual' %}
forward . {{ clusterIP }} {{ secondaryclusterIP }} {
{% else %}
forward . {{ clusterIP }} {
{% endif %}
force_tcp
forward . {{ forwardTarget }} {
force_tcp
}
prometheus :9253
health {{ nodelocaldns_ip }}:8080
}
}
in-addr.arpa:53 {
errors
cache 30
reload
loop
bind {{ nodelocaldns_ip }}
{% if secondaryclusterIP is defined %}
forward . {{ clusterIP }} {{ secondaryclusterIP }} {
{% else %}
forward . {{ clusterIP }} {
{% endif %}
force_tcp
forward . {{ forwardTarget }} {
force_tcp
}
prometheus :9253
}
}
ip6.arpa:53 {
errors
cache 30
reload
loop
bind {{ nodelocaldns_ip }}
{% if secondaryclusterIP is defined %}
forward . {{ clusterIP }} {{ secondaryclusterIP }} {
{% else %}
forward . {{ clusterIP }} {
{% endif %}
force_tcp
forward . {{ forwardTarget }} {
force_tcp
}
prometheus :9253
}
}
.:53 {
errors
cache 30
reload
loop
bind {{ nodelocaldns_ip }}
{% if resolvconf_mode == 'host_resolvconf' and upstream_dns_servers is defined and upstream_dns_servers|length > 0 %}
forward . {{ upstream_dns_servers|join(' ') }} {
{% else %}
forward . /etc/resolv.conf {
{% endif %}
force_tcp
forward . {{ upstreamForwardTarget }} {
force_tcp
}
prometheus :9253
}
}
3 changes: 3 additions & 0 deletions roles/kubernetes/node/templates/kubelet.kubeadm.env.j2
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ KUBELET_HOSTNAME="--hostname-override={{ kube_override_hostname }}"
{% else %}
{% set kubelet_args_cluster_dns %}{% endset %}
{% endif %}
{% if enable_nodelocaldns == True %}
{% set kubelet_args_cluster_dns %}--cluster-dns={{ nodelocaldns_ip }}{% endset %}
{% endif %}
{% set kubelet_args_dns %}{{ kubelet_args_cluster_dns }} --cluster-domain={{ dns_domain }} --resolv-conf={{ kube_resolv_conf }}{% endset %}

{# Kubelet node labels #}
Expand Down
1 change: 1 addition & 0 deletions roles/kubespray-defaults/defaults/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ dns_mode: coredns

# Enable nodelocal dns cache
enable_nodelocaldns: False
nodelocaldns_ip: 169.254.25.10

# Should be set to a cluster IP if using a custom cluster DNS
# manual_dns_server: 10.x.x.x
Expand Down