Перейти к содержимому

Добавление статических DNS-записей

Компонент Node Hosts Injector позволяет автоматизировать управление статическими DNS-записями на узлах кластера Managed Kubernetes. После установки компонента на каждом узле кластера запускается контроллер DaemonSet, который переносит DNS-записи из ресурса ConfigMap в файл /etc/hosts и поддерживает файл в актуальном состоянии. При удалении компонента добавленные им DNS-записи удаляются автоматически.

Чтобы установить и начать использовать компонент Node Hosts Injector:

  1. Подготовьте окружение для работы с кластером Managed Kubernetes.
  1. Создайте сервисный аккаунт с именем sa-mk8s и ролью registry.puller.

  2. Для сервисного аккаунта sa-mk8s создайте API-ключ и сохраните его.

  3. Создайте кластер Managed Kubernetes с публичным эндпоинтом и группу узлов для него. При создании группы используйте сервисный аккаунт sa-mk8s.

  4. Создайте NAT-шлюз для подсети, в которой развернут кластер Managed Kubernetes.

  5. Для прохождения руководства вам понадобится устройство, поддерживающее работу с командной строкой. Используйте личный компьютер или создайте промежуточную ВМ в той же сети, где расположен кластер Managed Kubernetes.

  1. Подключитесь к терминалу на вашем компьютере или к промежуточной ВМ.

  2. Установите и настройте утилиту MWS CLI:

  3. Аутентифицируйтесь в Artifact Registry:

    bash
    helm registry login -u apikey -p <API-ключ> registry.mwsapis.ru
  4. Установите утилиту командной строки kubectl.

Создайте файл конфигурации values.yaml, в котором указываются DNS-записи и задаются параметры работы контроллера DaemonSet:

bash
cat <<EOF > values.yaml
image:
repository: registry.mwsapis.ru/mws-mk8s-images/customer/node-hosts-injector
tag: "1.0.0"
pullPolicy: IfNotPresent
imagePullSecrets: []
hostsEntries:
- ip: 10.0.0.10
hostnames: api.internal.example.com
- ip: 10.0.0.11
hostnames: db.internal.example.com
- ip: 10.0.0.12
hostnames: cache.internal.example.com
- ip: 10.0.0.13
hostnames: mq.internal.example.com
pollInterval: 30
tolerateControlPlane: true
tolerations: []
nodeSelector: {}
affinity: {}
resources:
requests:
cpu: 10m
memory: 16Mi
limits:
cpu: 20m
memory: 32Mi
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: "25%"
terminationGracePeriodSeconds: 15
podLabels: {}
podAnnotations: {}
EOF

Здесь:

  • hostsEntries — список DNS-записей, который будет сохранен в ресурсе ConfigMap.
  • pollInterval — частота (в секундах), с которой DaemonSet будет проверять наличие изменений в ресурсе ConfigMap.
  • tolerateControlPlane — параметр, который разрешает (true) или запрещает (false) запускать контроллер DaemonSet на управляющих узлах.

Подробнее конфигурация DaemonSet описана в официальной документации.

Файл values.yaml будет использоваться при установке компонента Node Hosts Injector.

  1. Установите компонент:

    bash
    helm install hosts-injector oci://registry.mwsapis.ru/mws-mk8s-images/customer/charts/hosts-injector --version 0.1.0 -f values.yaml

    Ожидаемый результат:

    bash
    ...
    NAME: hosts-injector
    LAST DEPLOYED: Tue Jun 23 12:25:04 2026
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    ...
  2. Убедитесь, что поды компонента запущены (Running) на нужных узлах:

    bash
    kubectl get pods -l app.kubernetes.io/name=hosts-injector -o wide

    Ожидаемый результат:

    bash
    NAME READY STATUS RESTARTS AGE IP NODE
    hosts-injector-pxfcg 1/1 Running 0 8m37s <IP-адрес узла> <имя узла>

Проверьте содержимое файла /etc/hosts на одном из узлов:

bash
kubectl debug node/<имя узла> \
--profile=general \
-it \
--image=busybox \
-- cat /host/etc/hosts

В выводе должны быть перечислены DNS-записи, которые вы указали в hostsEntries файла values.yaml:

bash
# BEGIN CUSTOM-HOSTS-INJECTOR
# Managed by DaemonSet custom-hosts-injector
# Source: ConfigMap custom-hosts-entries
# Updated: 2026-06-23T01:25:10Z
10.0.0.10 api.internal.example.com
10.0.0.11 db.internal.example.com
10.0.0.12 cache.internal.example.com
10.0.0.13 mq.internal.example.com
# END CUSTOM-HOSTS-INJECTOR

Ресурсы, созданные в руководстве, тарифицируются. Если вы больше не планируете использовать их:

  1. Удалите промежуточную ВМ, если вы ее создавали.