Для установки компонентов CoreDNS и управления DNS можно воспользоваться функциональностью модуля kube-dns.

Модуль удаляет ранее созданные с помощью kubeadm ресурсы: Deployment, ConfigMap и RBAC для CoreDNS.

Чтобы включить модуль kube-dns с настройками по умолчанию, примените ресурс ModuleConfig:

1d8 k apply -f - <<EOF
2apiVersion: deckhouse.io/v1alpha1
3kind: ModuleConfig
4metadata:
5  name: kube-dns
6spec:
7  enabled: true
8EOF

Подробности о возможностях настроек модуля описаны по ссылке.

Пример конфигурации DNS

Пример конфигурации модуля kube-dns с помощью ресурса ModuleConfig:

1d8 k apply -f - <<EOF
2apiVersion: deckhouse.io/v1alpha1
3kind: ModuleConfig
4metadata:
5  name: kube-dns
6spec:
7  version: 1
8  enabled: true
9  settings:
10    # Список IP-адресов рекурсивных DNS-серверов, которые CoreDNS будет использовать для разрешения внешних доменов.
11    # По умолчанию используется список из /etc/resolv.conf.
12    upstreamNameservers:
13      - 8.8.8.8
14      - 8.8.4.4
15    # Статический список хостов в стиле /etc/hosts:
16    hosts:
17      - domain: one.example.com
18        ip: 192.168.0.1
19      - domain: two.another.example.com
20        ip: 10.10.0.128
21    # Список дополнительных зон для обслуживания CoreDNS.
22    stubZones:
23      - zone: consul.local
24        upstreamNameservers:
25          - 10.150.0.1
26    # Список альтернативных доменов кластера, разрешаемых наравне с global.discovery.clusterDomain.
27    clusterDomainAliases:
28      - foo.bar
29      - baz.qux
30EOF

Подробности о возможностях конфигурации модуля kube-dns описаны по ссылке.

Изменение домена кластера

Чтобы изменить домен кластера с минимальным простоем, выполните следующие шаги:

  1. Отредактируйте настройки модуля control-plane manager, который отвечает за конфигурацию Deckhouse.

    Внесите изменения в секции по шаблону ниже:

    1 apiVersion: deckhouse.io/v1alpha1
    2 kind: ModuleConfig
    3 metadata:
    4   name: control-plane-manager
    5 spec:
    6   version: 1
    7   enabled: true
    8   settings:
    9     apiserver:
    10       # Список опций сертификата SANs, с которыми будет сгенерирован сертификат API-сервера.
    11       certSANs:
    12        - kubernetes.default.svc.<старый clusterDomain>
    13        - kubernetes.default.svc.<новый clusterDomain>
    14       serviceAccount:
    15         # Список API audience’ов, которые следует добавить при создании токенов ServiceAccount.
    16         additionalAPIAudiences:
    17         - https://kubernetes.default.svc.<старый clusterDomain>
    18         - https://kubernetes.default.svc.<новый clusterDomain>
    19         # Список дополнительных издателей API токенов ServiceAccount, которые нужно включить при их создании.
    20         additionalAPIIssuers:
    21         - https://kubernetes.default.svc.<старый clusterDomain>
    22         - https://kubernetes.default.svc.<новый clusterDomain>
    
  2. Укажите список альтернативных доменов кластера в настройках модуля kube-dns:

    1 apiVersion: deckhouse.io/v1alpha1
    2 kind: ModuleConfig
    3 metadata:
    4   name: kube-dns
    5 spec:
    6   version: 1
    7   enabled: true
    8   settings:
    9     clusterDomainAliases:
    10       - <старый clusterDomain>
    11       - <новый clusterDomain>
    
  3. Дождитесь перезапуска kube-apiserver.
  4. Поменяйте clusterDomain на новый домен в dhctl config edit cluster-configuration.