Управление сетями и адресами

Модуль управления внешними IPv4-адресами сервисов (KubeVIP)

Модуль управления внешними IPv4-адресами сервисов предоставляет виртуальный IP для кластера и балансировщика, является компонентом сетевого балансировщика нагрузки Kube-VIP, который обеспечивает высокодоступную сетевую конечную точку и функции балансировки нагрузки для базовых сетевых служб.

Kube-Vip поднимает IP-адресы узлов, которые назначает shturval-vip-provider. Provider обеспечивает управление диапазонами IP-адресов.

Не требует ручной настройки.

С дополнительной информацией можно ознакомиться на официальном сайте. В текущем релизе используется Kube-VIP версии 0.8.9.

Модуль управления внешними подключениями (NGinx)

В этом разделе можно настроить маршрутизацию внешних подключений к кластеру (Ingress Controller). Он обеспечивает управление и маршрутизацию входящего трафика извне к различным сервисам и приложениям, развернутым в контейнерах.

Для настройки Ingress Controller в интерфейсе кластера Комплекса в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Установленные сервисы", найти "Модуль управления внешними подключениями" (shturval-ingress-controller) и нажать Управлять.

Если модуль не отображается, в боковом меню необходимо открыть раздел "Сервисы и репозитории" и перейти на страницу "Доступные чарты", на вкладке "shturval" найти чарт shturval-ingress-controller и нажать Установить.

С дополнительной информацией можно ознакомиться на официальном сайте. В текущем релизе используется Ingress Controller версии 1.12.1.

Замена VIP Ingress на внешний балансировщик

Если при добавлении кластера был указан внутренний виртуальный IP-адрес и возникла необходимость заменить его внешним балансировщиком, необходимо внести изменения в спецификацию (customvalues) модуля управления внешними подключениями (shturval-ingress-controller).

Пример customvalues (описание параметров ‒ в таблице 57):

controller:
hostPort:
enabled: true
service:
nodePorts:
http: <ваше значение параметра>
https: <ваше значение параметра>
type: NodePort
shturval:
commonName: <значение параметра>

После применения конфигурации узлы будут готовы принимать ingress-трафик на указанные порты, например на 30080 и 30443. См. п. Пример конфигурации haproxy.

Включение proxy-протокола

Все параметры из официальной документации, в том числе и proxy-протокол, можно установить в customvalues сервиса. Для этого в спецификации сервиса следует прописать значение параметра, как в примере customvalues ниже:

controller:
config:
use-proxy-protocol: "true"

Значения customvalues не перезаписываются при обновлении кластера.

Конфигурирование worker-processes, CPU, Memory

По умолчанию в Комплексе для Ingress Controller установлено ограничение на количество worker-processes и на лимиты, запросы ресурсов (CPU, Memory).

Значения по умолчанию приведены в спецификации (customvalues) (описание параметров ‒ в таблице 58):

controller:
config:
worker-processes: 4
resources:
limits:
memory: 400Mi
requests:
cpu: 200m
memory: 300Mi

При необходимости можно переопределить значения по умолчанию, заменив их в параметрах "worker-processes", "memory", "cpu".

Модуль управления сетями кластера (Cilium CNI)

Модуль сетевого взаимодействия обеспечивает сетевую функциональность и взаимодействие между различными компонентами кластера, такими как контейнеры, поды, узлы и сервисы.

Для настройки Cilium нужно в интерфейсе кластера управления Комплекса:

  1. в боковом меню открыть раздел "Сервисы и репозитории";
  2. перейти на страницу "Установленные сервисы";
  3. найти "Модуль управления сетями кластера";
  4. если модуль не отображается, в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Доступные чарты"; на вкладке "shturval" найти чарт shturval-networking и нажать Установить.

Пример customvalues (описание параметров ‒ в таблице 59):

k8sServiceHost: <ваше значение параметра>
k8sServicePort: <ваше значение параметра>
operator:
replicas: <ваше значение параметра>
sessionAffinity: "true"

Важно ‒ Если в кластере одновременно используются Cilium CNI и Multus CNI, то в спецификации "Модуля управления сетями кластера" (shturval-networking) необходимо прописать параметр exclusive, как в примере customvalues ниже:

cni:
exclusive: false

Cilium Hubble

Hubble обеспечивает наблюдение за сетевым взаимодействием между компонентами кластера и сетевой инфраструктурой. Для включения hubble у Cilium необходимо перейти в управление сервисом и в блоке "Спецификация сервиса" прописать параметры, как в примере customvalues ниже:

hubble:
enabled: true
relay:
enabled: true
ui:
enabled: true

Чтобы временно прокинуть порт со своей рабочей станции до UI Hubble, следует в CLI ввести команду:

kubectl -n kube-system port-forward services/hubble-ui 12000:80

Cilium Hubble будет доступен по адресу http://127.0.0.1:12000.

С дополнительной информацией можно ознакомиться на официальном сайте. В текущем релизе используется Cilium версии 1.16.8.

Модуль подключения нескольких сетевых интерфейсов (Multus)

Модуль подключения нескольких сетевых интерфейсов к модулям в Kubernetes (Multus CNI) является мета-плагином, который вызывает работу других плагинов CNI, таких как Flannel, Weave, Calico, Cilium, Macvlan. С помощью модуля возможно создать под с несколькими сетевыми интерфейсами, например: eth0, net0, net1.

По умолчанию модуль не установлен в кластерах. Чтобы установить модуль, нужно в графическом интерфейсе кластера в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Доступные чарты", на вкладке "shturval" найти чарт shturval-metacni и нажать Установить.

Далее следует выбрать необходимую версию чарта. После выбора версии чарта в правой части экрана отобразятся доступные "Параметры конфигурации для сервиса" (values). Следует прописать в блоке "Спецификация сервиса" необходимые параметры в качестве customvalues.

Следует обратить внимание, что требуется установка модуля в неймспейс kube-system.

Если требуется настройка сетевых интерфейсов в графическом интерфейсе Комплекса, то также в кластере должны быть установлены и включены:

  • оператор с SRIOV-интерфейсами (shturval-sriov);
  • CRD-оператор для работы с SRIOV-интерфейсами (shturval-sriov-crds).

После завершения установки модулей в графическом интерфейсе станут доступны для конфигурации дополнительный сети. Подробнее см. п. NetworkAttachmentDefinitions о ресурсах SR-IOV.

Для организации мультисетей с разными IP-адресами или диапазонами адресов модуль (Multus CNI) интегрирован с модулем назначения IP-адресов на интерфейсах, созданных Multus (shturval-metacni-ipam), который необходимо установить в кластере. Подробнее об установке см. "Модуль назначения IP-адресов на интерфейсах" (п. Модуль назначения IP-адресов (Metacni-ipam)).

В текущем релизе используется Multus CNI версии 4.1.3.

Создание дополнительных интерфейсов

Чтобы создать дополнительный интерфейс для использования подами, необходимо сконфигурировать пользовательский ресурс, который определяет конфигурацию CNI для интерфейсов. Таким ресурсом является NetworkAttachmentDefinition. Подробнее о ресурсе дополнительной сети см. NetworkAttachmentDefinition (п.NetworkAttachmentDefinitions).

Созданные NetworkAttachmentDefinitions подключаются к поду в блоке "annotations", с помощью параметра k8s.v1.cni.cncf.io/networks.

Пример пода с подключенными дополнительными интерфейсами:

apiVersion: v1
kind: Pod
metadata:
name: podname
annotations:
k8s.v1.cni.cncf.io/networks: macvlan-conf, name-conf
spec:
containers:
‒ name: containername
command: ["/bin/ash", "-c", "trap : TERM INT; sleep infinity & wait"]
image: alpine

где macvlan-conf и name-conf ‒ названия NetworkAttachmentDefinitions.

Модуль назначения IP-адресов (Metacni-ipam)

Модуль назначения IP-адресов на интерфейсах, созданных Multus (Whereabouts), отвечает за управление IP-адресами (IPAM) для сетевых интерфейсов подов.

Модуль позволяет:

  • назначить IP-адреса в пределах диапазона в нотации CIDR (без необходимости использования DHCP-сервера);
  • при необходимости добавить IP-адреса в список исключений адресов диапазона.

Когда IP-адрес назначается поду, модуль отслеживает этот IP-адрес в хранилище данных на протяжении всего жизненного цикла пода. Когда под удаляется, модуль "освобождает" IP-адрес и делает его доступным для назначения.

По умолчанию модуль не установлен в кластерах. Чтобы установить модуль, нужно в графическом интерфейсе кластера в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Доступные чарты", на вкладке "shturval" найти чарт shturval-metacni-ipam и нажать Установить.

Далее следует выбрать необходимую версию чарта. Следует обратить внимание, что требуется установка модуля в неймспейс kube-system.

После выбора версии чарта в правой части экрана отобразятся доступные "Параметры конфигурации для сервиса" (values). Следует прописать в блоке "Спецификация сервиса" необходимые параметры в качестве customvalues.

Опции управления IP-адресами сетевого интерфейса конфигурируются в ресурсе NetworkAttachmentDefinition. Следует перейти на страницу NetworkAttachmentDefinition (п. NetworkAttachmentDefinitions), чтобы ознакомиться с примером спецификации ресурса и конфигурации ipam.

В текущем релизе используется Whereabouts версии 0.8.0.

Модуль управления локальным DNS (NodeLocalDNS)

В РОСА Кубис модуль управления локальным DNS обеспечивает работу системы для разрешения имен DNS внутри кластера. Можно управлять записями, которые содержат соответствие доменных имен и IP-адресов объектов в вашем кластере. Для этого в графическом интерфейсе Комплекса требуется:

  1. в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Установленные сервисы";
  2. найти "Модуль управления локальным DNS" (shturval-caching-dns) и открыть страницу управления модулем;
  3. добавить или изменить в параметрах сервиса записи, используя config сервиса NodeLocaldns.

Пример customvalues (описание параметров ‒ в таблице 60):

config:
zones:
.:<ваше значение порта для DNS>:
plugins:
hosts:
entries:
‒ ip: <ваше значение параметра>
name: <ваше значение параметра>
fallthrough: <ваше значение параметра>
  1. когда настройка спецификации завершена, выбрать режим обновления "Автоматическое", если установлен "Ручной" режим, и сохранить внесенные изменения.

Необходимо подождать некоторое время, пока изменения в конфигурации сервиса shturval-caching-dns будут успешно применены.

В текущем релизе используется NodeLocaldns версии 1.25.0.

Оператор SR-IOV

SR-IOV (Single Root I/O Virtualization) – это технология, которая позволяет делить физическое устройство ввода/вывода на многие виртуальные.

Оператор SR-IOV использует Kubernetes CRDs и Operator SDK для управления ресурсами SriovNetwork и SriovNetworkNodePolicy. SR-IOV-оператор отвечает за автоматическое развертывание и настройку SR-IOV CNI плагина и device plugin на Worker-узлах в кластере, инициализацию поддерживаемых типов сетевых карт (NIC) SR-IOV на узлах, генерацию CR NetworkAttachmentDefinition для плагина SR-IOV CNI, поддержание работы в виртуализированном развертывании Kubernetes, обнаружение VF, подключенных к виртуальной машине (VM), а также возможность связать VF с SriovNetworks, выбрав соответствующий PciAddress в качестве RootDevice в SriovNetworkNodePolicy.

Перед установкой shturval-sriov требуется установка shturval-sriov-crds, shturval-metacni. При этом важно соблюдать последовательность установки:

  1. shturval-metacni-crds;
  2. shturval-metacni;
  3. shturval-sriov-crds;
  4. shturval-sriov.

Для установки оператора SR-IOV нужно перейти в клиентский кластер, в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Доступные чарты", найти shturval-sriov, нажать Установить.

Для настройки оператора SR-IOV необходимо перейти в клиентский кластер, в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Установленные сервисы".

Следует обратить внимание, что требуется установка в неймспейс kube-system.

После завершения установки оператора будет автоматически создана политика SR-IOV Network Node Policy с названием default для применения конфигурации сервиса на Worker-узлах кластера.

См. подробнее п. SriovNetwork о ресурсах SR-IOV.

Чтобы адаптировать развертывание сетевого оператора к потребностям кластера, нужно использовать параметры из таблицы 61.

С дополнительной информацией можно ознакомиться на github. В текущем релизе используется SR-IOV оператор версии 1.5.0, SR-IOV CNI ‒ версии 2.8.1.

CoreHA

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

Для включения в графическом интерфейсе кластера нужно в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Установленные сервисы", найти "Модуль поиска узлов с запущенными hostport-сервисами" и изменить значение переключателя.

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

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

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

В текущем релизе используется CoreHA версии 1.11.4.

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

Параметры конфигурации helm chart shturval-coreha приведены в таблице 62.

Пример customvalues:

config:
zoneName: <ваше значение параметра>

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

В графическом интерфейсе кластера в боковом меню необходимо открыть раздел "Сервисы и репозитории" и перейти на страницу "Установленные сервисы", найти модуль управления внешними подключениями (shturval-ingress-controller).

В блоке "Спецификация сервиса" следует прописать лейбл с ключом ingress.cluster/name.

Пример customvalues (описание параметров ‒ в таблице 63):

controller:
labels:
ingress.cluster/name: <ваше значение параметра>
hostPort:
enabled: true
service:
nodePorts:
http: <ваше значение параметра>
https: <ваше значение параметра>
type: NodePort

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

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>:30080 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:30080 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

После завершения настроек Ingress контроллер будет работать на портах узла 30080/30443.