CoreHA

shturval-coreha - helm-чарт для сервиса CoreDNS для динамического добавления бэкендов в HAProxy. Сервис необходим, если вы используете внешний балансировщик для Ingress. По умолчанию сервис устанавливается в клиентские кластеры в отключенном состоянии. Для включения перейдите на страницу “Установленные сервисы” раздела “Сервисы и репозитории”, найдите “Модуль поиска узлов с запущенными hostport сервисами” и измените значение переключателя.

Если в кластере такой сервис отсутствует, перейдите на страницу “Доступные чарты” раздела “Сервисы и репозитории”. На вкладке “shturval” выберите чарт shturval-corehaи нажмите “Установить”.

Выберите необходимую версию чарта, а также неймспейс kube-system. После выбора версии чарта в правой части экрана отобразятся доступные “Параметры конфигурации для сервиса” (values). Пропишите в блоке “Спецификация сервиса” необходимые параметры в качестве custom values.

Обратите внимание! Конфигурация CoreHA дополнительно требует изменения спецификации модуля управления внешними подключениями (shturval-ingress-controller).

Конфигурация helm chart shturval-coreha

Параметр Описание Пример
config.zoneName Имя dns-зоны cluster-prod01-dc1.shturval
config.labelKey Имя ключа лейбла, по которому сервис будет отслеживать поды. Значение этого ключа будет добавляться в dns запись ingress.cluster/name
config.dns_port Порт, который будет слушать dns сервер По умолчанию: 1053
config_name Имя кастомного файла конфигурации CoreDNS По умолчанию: shturval-coreha-config
strictHostPort Использовать строгую выборку подов использующих hostPort По умолчанию: false

Пример использования

values для helm чарта:

config:
  zoneName: cluster-prod01-dc1.shturval

Спецификация модуля управления внешними подключениями

В разделе “Сервисы и репозитории” найдите модуль управления внешними подключениями (shturval-ingress-controller).

В блоке “Спецификация сервиса” пропишите лейбл с ключом ingress.cluster/name. Значение лейбла, например, default-nginx будет использоваться при формировании DNS имени.

controller:
  labels:
    ingress.cluster/name: default-nginx

Сама запись будет выглядеть как <label_value>.<namespace>.<config.zoneName>, где namespace это пространство подов (ingress) которые необходимо отслеживать. Пример DNS записи default-nginx.ingress.cluster-prod01-dc1.shturval.

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

resolvers coredns-cluster
    nameserver ns1 <api-server-vip>:<config.dns_port>
    accepted_payload_size 8192

backend cluster-prod01-dc1-ingress-http
    balance source
    mode tcp
    server-template daemonset 2 <label_value>.<namespace>.<config.zoneName>:80 check resolvers coredns-cluster init-addr none

haproxy (в примере отсутствует секция frontend и backend для 443 порта)

resolvers coreha-cluster-prod01-dc1
    nameserver ns1 api.cluster-prod01-dc1.shturval:1053
    accepted_payload_size 8192

backend ingress-http-cluster-prod01-dc1
    balance source
    mode tcp
    server-template ingress 2 default-nginx.ingress.cluster-prod01-dc1.shturval:80 check resolvers coreha-cluster-prod01-dc1 init-addr none 

Чтобы проверить корректность настроек сервиса coreha, можно c балансировщика воспользоваться командой dig:

dig @api.cluster-prod01-dc1.shturval -p 1053 default-nginx.ingress.cluster-prod01-dc1.shturval

Пример вывода команды:

;; ANSWER SECTION:
default-nginx.ingress.cluster-prod01-dc1.shturval. 15 IN A  172.18.104.93
default-nginx.ingress.cluster-prod01-dc1.shturval. 15 IN A  172.18.104.92