K8s DNS stack by Kubespray
For K8s cluster nodes, Kubespray configures a Kubernetes DNS
cluster add-on
to serve as an authoritative DNS server for a given dns_domain
and its
svc, default.svc
default subdomains (a total of ndots: 5
max levels).
Other nodes in the inventory, like external storage nodes or a separate etcd cluster node group, considered non-cluster and left up to the user to configure DNS resolve.
DNS variables
There are several global variables which can be used to modify DNS settings:
ndots
ndots value to be used in /etc/resolv.conf
It is important to note that multiple search domains combined with high ndots
values lead to poor performance of DNS stack, so please choose it wisely.
searchdomains
Custom search domains to be added in addition to the cluster search domains (default.svc.{{ dns_domain }}, svc.{{ dns_domain }}
).
Most Linux systems limit the total number of search domains to 6 and the total length of all search domains
to 256 characters. Depending on the length of dns_domain
, you're limited to less then the total limit.
Please note that resolvconf_mode: docker_dns
will automatically add your systems search domains as
additional search domains. Please take this into the accounts for the limits.
nameservers
This variable is only used by resolvconf_mode: host_resolvconf
. These nameservers are added to the hosts
/etc/resolv.conf
after upstream_dns_servers
and thus serve as backup nameservers. If this variable
is not set, a default resolver is chosen (depending on cloud provider or 8.8.8.8 when no cloud provider is specified).
upstream_dns_servers
DNS servers to be added after the cluster DNS. Used by all resolvconf_mode
modes. These serve as backup
DNS servers in early cluster deployment when no cluster DNS is available yet.
DNS modes supported by Kubespray
You can modify how Kubespray sets up DNS for your cluster with the variables dns_mode
and resolvconf_mode
.
dns_mode
dns_mode
configures how Kubespray will setup cluster DNS. There are four modes available:
coredns (default)
This installs CoreDNS as the default cluster DNS for all queries.
coredns_dual
This installs CoreDNS as the default cluster DNS for all queries, plus a secondary CoreDNS stack.
manual
This does not install coredns, but allows you to specify
manual_dns_server
, which will be configured on nodes for handling Pod DNS.
Use this method if you plan to install your own DNS server in the cluster after
initial deployment.
none
This does not install any of DNS solution at all. This basically disables cluster DNS completely and leaves you with a non functional cluster.
resolvconf_mode
resolvconf_mode
configures how Kubespray will setup DNS for hostNetwork: true
PODs and non-k8s containers.
There are three modes available: