Browse Source
Merge pull request #667 from bogdando/fix_dns
Merge pull request #667 from bogdando/fix_dns
Rework DNS stack to meet hostnet pods needspull/729/head
committed by
GitHub
8 changed files with 185 additions and 138 deletions
Split View
Diff Options
-
11docs/dns-stack.md
-
16roles/kubernetes/preinstall/handlers/main.yml
-
33roles/kubernetes/preinstall/tasks/dhclient-hooks.yml
-
139roles/kubernetes/preinstall/tasks/resolvconf.yml
-
6roles/kubernetes/preinstall/tasks/set_facts.yml
-
88roles/kubernetes/preinstall/tasks/set_resolv_facts.yml
-
13roles/kubernetes/preinstall/templates/dhclient_dnsupdate.sh.j2
-
17roles/kubernetes/preinstall/templates/dhclient_dnsupdate_rh.sh.j2
@ -0,0 +1,33 @@ |
|||
--- |
|||
- name: Configure dhclient to prepend nameservers and supersede search/domain |
|||
blockinfile: |
|||
block: |- |
|||
{% for item in [ supersede_domain, supersede_search, prepend_nameserver ] -%} |
|||
{{ item }} |
|||
{% endfor %} |
|||
dest: "{{dhclientconffile}}" |
|||
create: yes |
|||
state: present |
|||
insertbefore: BOF |
|||
backup: yes |
|||
follow: yes |
|||
marker: "# Ansible entries {mark}" |
|||
notify: Preinstall | restart network |
|||
|
|||
- name: Configue dhclient hooks for resolv.conf (non-RH) |
|||
template: |
|||
src: dhclient_dnsupdate.sh.j2 |
|||
dest: "{{ dhclienthookfile }}" |
|||
owner: root |
|||
mode: 0755 |
|||
notify: Preinstall | restart network |
|||
when: ansible_os_family != "RedHat" |
|||
|
|||
- name: Configue dhclient hooks for resolv.conf (RH-only) |
|||
template: |
|||
src: dhclient_dnsupdate_rh.sh.j2 |
|||
dest: "{{ dhclienthookfile }}" |
|||
owner: root |
|||
mode: 0755 |
|||
notify: Preinstall | restart network |
|||
when: ansible_os_family == "RedHat" |
@ -0,0 +1,88 @@ |
|||
--- |
|||
- name: check resolvconf |
|||
shell: which resolvconf |
|||
register: resolvconf |
|||
ignore_errors: yes |
|||
changed_when: false |
|||
|
|||
- set_fact: |
|||
resolvconf: >- |
|||
{%- if resolvconf.rc == 0 -%}true{%- else -%}false{%- endif -%} |
|||
|
|||
- set_fact: |
|||
private_domains: |- |
|||
{% for d in [ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([]) -%} |
|||
{{dns_domain}}.{{d}}./{{d}}.{{d}}./com.{{d}}./ |
|||
{%- endfor %} |
|||
default_resolver: >- |
|||
{%- if cloud_provider is defined and cloud_provider == 'gce' -%}169.254.169.254{%- else -%}8.8.8.8{%- endif -%} |
|||
|
|||
- name: check kubelet |
|||
stat: |
|||
path: "{{ bin_dir }}/kubelet" |
|||
register: kubelet |
|||
changed_when: false |
|||
|
|||
- name: check if early DNS configuration stage |
|||
set_fact: |
|||
dns_early: >- |
|||
{%- if kubelet.stat.exists -%}false{%- else -%}true{%- endif -%} |
|||
|
|||
- name: target resolv.conf files |
|||
set_fact: |
|||
resolvconffile: /etc/resolv.conf |
|||
base: >- |
|||
{%- if resolvconf|bool -%}/etc/resolvconf/resolv.conf.d/base{%- endif -%} |
|||
head: >- |
|||
{%- if resolvconf|bool -%}/etc/resolvconf/resolv.conf.d/head{%- endif -%} |
|||
when: ansible_os_family != "CoreOS" |
|||
|
|||
- name: target temporary resolvconf cloud init file (CoreOS) |
|||
set_fact: resolvconffile=/tmp/resolveconf_cloud_init_conf |
|||
when: ansible_os_family == "CoreOS" |
|||
|
|||
- name: target dhclient conf/hook files for Red Hat family |
|||
set_fact: |
|||
dhclientconffile: /etc/dhclient.conf |
|||
dhclienthookfile: /etc/dhcp/dhclient.d/zdnsupdate.sh |
|||
when: ansible_os_family == "RedHat" |
|||
|
|||
- name: target dhclient conf/hook files for Debian family |
|||
set_fact: |
|||
dhclientconffile: /etc/dhcp/dhclient.conf |
|||
dhclienthookfile: /etc/dhcp/dhclient-exit-hooks.d/zdnsupdate |
|||
when: ansible_os_family == "Debian" |
|||
|
|||
- name: generate search domains to resolvconf |
|||
set_fact: |
|||
searchentries: |
|||
search {{ ([ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([])) | join(' ') }} |
|||
domainentry: |
|||
domain {{ dns_domain }} |
|||
supersede_search: |
|||
supersede domain-search "{{ ([ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([])) | join('", "') }}"; |
|||
supersede_domain: |
|||
supersede domain-name "{{ dns_domain }}"; |
|||
|
|||
- name: decide on dns server IP |
|||
set_fact: |
|||
dns_server_real: >- |
|||
{%- if dns_early|bool -%}{{default_resolver}}{%- else -%}{{dns_server}}{%- endif -%} |
|||
|
|||
- name: pick dnsmasq cluster IP or default resolver |
|||
set_fact: |
|||
dnsmasq_server: |- |
|||
{%- if skip_dnsmasq|bool and not dns_early|bool -%} |
|||
{{ [ skydns_server ] + upstream_dns_servers|default([]) }} |
|||
{%- elif dns_early|bool -%} |
|||
{{ [ dns_server_real ] + upstream_dns_servers|default([]) }} |
|||
{%- else -%} |
|||
{{ [ dns_server ] }} |
|||
{%- endif -%} |
|||
|
|||
- name: generate nameservers to resolvconf |
|||
set_fact: |
|||
nameserverentries: |
|||
nameserver {{( dnsmasq_server|default([]) + nameservers|default([])) | join(',nameserver ')}} |
|||
prepend_nameserver: |
|||
prepend domain-name-servers {{( dnsmasq_server|default([]) + nameservers|default([])) | join(', ') }}; |
@ -0,0 +1,13 @@ |
|||
#!/bin/sh |
|||
# |
|||
# Prepend resolver options to /etc/resolv.conf after dhclient` |
|||
# regenerates the file. See man (5) resolver for more details. |
|||
# |
|||
if [ $reason = "BOUND" ]; then |
|||
if [ -n "$new_domain_search" -o -n "$new_domain_name_servers" ]; then |
|||
RESOLV_CONF=$(cat /etc/resolv.conf) |
|||
OPTIONS="options timeout:2\noptions attempts:2\noptions ndots:{{ ndots }}" |
|||
|
|||
printf "%b\n" "$RESOLV_CONF\n$OPTIONS" > /etc/resolv.conf |
|||
fi |
|||
fi |
@ -0,0 +1,17 @@ |
|||
#!/bin/sh |
|||
# |
|||
# Prepend resolver options to /etc/resolv.conf after dhclient` |
|||
# regenerates the file. See man (5) resolver for more details. |
|||
# |
|||
zdnsupdate_config() { |
|||
if [ -n "$new_domain_search" -o -n "$new_domain_name_servers" ]; then |
|||
RESOLV_CONF=$(cat /etc/resolv.conf) |
|||
OPTIONS="options timeout:2\noptions attempts:2\noptions ndots:{{ ndots }}" |
|||
|
|||
echo -e "$RESOLV_CONF\n$OPTIONS" > /etc/resolv.conf |
|||
fi |
|||
} |
|||
|
|||
zdnsupdate_restore() { |
|||
: |
|||
} |
Write
Preview
Loading…
Cancel
Save