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

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

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

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

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

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

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

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

apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-networking-cni
spec:
shturvalServiceConfigName: shturval-networking
customvalues:
cni:
exclusive: false

После загрузки манифеста нужно в разделе "Сервисы и репозитории" открыть страницу "Установленные сервисы", найти Модуль управления сетями кластера (shturval-networking) и перейти к управлению. На вкладке "Примененные PatchSSC" отобразится загруженный ShturvalServicePatch. Когда ShturvalServicePatch будет применен, на вкладке "Сервис" статус будет Patched.

Cilium Hubble

Hubble обеспечивает наблюдение за сетевым взаимодействием между компонентами кластера и сетевой инфраструктурой. Для включения hubble у Cilium необходимо загрузить в кластер с помощью импорта манифестов ShturvalServicePatch для Модуля управления сетями кластера (shturval-networking). В customvalues следует прописать параметры, как в примере customvalues ниже:

apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-networking-hubble
spec:
shturvalServiceConfigName: shturval-networking
customvalues:
hubble:
enabled: true
relay:
enabled: true
ui:
enabled: true

После загрузки манифеста нужно из раздела "Сервисы и репозитории" открыть страницу "Установленные сервисы", найти Модуль управления сетями кластера (shturval-networking) и перейти к управлению. На вкладке "Примененные PatchSSC" отобразится загруженный ShturvalServicePatch. Когда ShturvalServicePatch будет применен, на вкладке "Сервис" статус будет Patched.

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

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

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

С дополнительной информацией можно ознакомиться на официальном сайте.

Модуль управления виртуальными IP-адресами (Kube VIP)

Модуль управления виртуальными IP-адресами (Kube VIP) включает два компонента:

  • Компонент конфигурации сервисов (shturval-vip-provider). Данный компонент автоматически назначает IP-адреса сервисам (Services) с типом LoadBalancer. Контроллер shturval-vip-provider, при создании Service с типом LoadBalancer в кластере, выделяет и назначает IP-адрес из сконфигурированного CIDR или диапазона IP-адресов. Выделенный IP-адрес указывается в аннотации и параметре loadBalancerIP сервиса. Как настроить CIDR или диапазон IP-адресов подробнее см. в п. Конфигурация доступных IP-адресов.
  • Компонент конфигурации узлов (shturval-vip). Shturval-vip является DaemonSet, который поднимает назначенные IP-адреса сервисам (Services) с типом LoadBalancer на узлах кластера. В случае удаления сервиса из кластера, назначенный сервису IP-адрес "освобождается" с узлов кластера.

Компоненты модуля управления виртуальными IP-адресами не требуют ручной настройки.

С дополнительной информацией можно ознакомиться на официальном сайте.

Компонент конфигурации сервисов

Компонент конфигурации сервисов модуля управления виртуальными IP-адресами является критически важным сервисом для работы Комплекса (недоступен для отключения). Устанавливается по умолчанию в кластер управления и клиентские кластеры.

Для просмотра состояния сервиса в кластере нужно перейти на страницу "Сервисы и репозитории  Установленные сервисы раздела" и в строке "Модуль управления виртуальными IP-адресами. Компонент конфигурации сервисов" (shturval-vip-provider) нажать кнопку Управлять.

Для корректной работы сервиса в кластере должен быть установлен и включен "Модуль управления сетями кластера" (shturval-networking).

Компонент конфигурации узлов

Компонент конфигурации узлов модуля управления виртуальными IP-адресами является критически важным сервисом для работы Комплекса (недоступен для отключения). Устанавливается по умолчанию в кластер управления и клиентские кластеры.

Для просмотра состояния сервиса в кластере нужно перейти на страницу "Сервисы и репозитории  Установленные сервисы" и в строке "Модуль управления виртуальными IP-адресами. Компонент конфигурации узлов" (shturval-vip) нажать кнопку Управлять.

Для корректной работы сервиса в кластере должен быть установлен и включен "Модуль управления сетями кластера" (shturval-networking).

Конфигурация доступных IP-адресов

Настройку CIDR или диапазон IP-адресов для выделения и назначения IP-адресов Service с типом LoadBalancer можно выполнить в ConfigMap. Для этого требуется:

  1. в вашем кластере перейти в неймспейс kube-system и открыть страницу "ConfigMaps" раздела "Хранилище";
  2. найти ConfigMap с именем kubevip и перейти к редактированию. Если нет ConfigMap, создать с именем kubevip;
  3. добавить ключ, где в имени прописать необходимый параметр, а в значении указать CIDR или диапазон IP-адресов (таблица 102).

Пример конфигурации глобального CIDR:

apiVersion: v1
kind: ConfigMap
metadata:
name: kubevip
namespace: kube-system
data:
cidr-global: 192.168.0.216/29

Пример конфигурации для Service определенных неймспейсов:

apiVersion: v1
kind: ConfigMap
metadata:
name: kubevip
namespace: kube-system
data:
cidr-mynamespace: 192.168.0.216/29
range-mynamespace1: 192.168.1.220-192.168.1.230

После создания кластера, где не используется внешний балансировщик для Ingress, соответствующий IP-адрес системного Ingress Controller будет записан в ConfigMap kubevip.

Пример ConfigMap kubevip:

apiVersion: v1
kind: ConfigMap
metadata:
name: kubevip
namespace: kube-system
data:
cidr-ingress: 192.168.0.220/32

Если для неймспейса задан пул (CIDR или диапазон IP-адресов), Services будут назначаться только адреса из этого пула, игнорируя глобальный пул.

При необходимости можно задать вручную IP-адрес для Service с типом LoadBalancer одним из способов, даже если этот адрес не входит в заданный диапазон IP-адресов:

  • добавить аннотацию c ключом kube-vip.io/loadbalancerIPs для Service;
  • при создании Service в графическом интерфейсе задать IP-адрес в поле LoadBalancerIP.

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

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

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

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

С дополнительной информацией можно ознакомиться на официальном сайте.

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

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

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

apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-ingress-controller
customvalues:
controller:
hostPort:
enabled: true # При включении поды ингресс контроллера так же будут использовать на узлах кластера 80 и 443 порты
service:
nodePorts:
http: "<ваше значение параметра>"
https: "<ваше значение параметра>"
type: NodePort
shturval:
commonName: <ваше значение параметра>

Затем необходимо загрузить в кластер с помощью импорта манифестов подготовленный ShturvalServicePatch.

Когда ShturvalServicePatch будет загружен, потребуется некоторое время для применения конфигурации.

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

Пример настройки внешнего балансировщика (HAProxy) при установки кластера cм. в п. Пример настройки HAProxy.

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

Все параметры из официальной документации, в том числе и proxy-протокол, можно установить для Ingress Controller в Комплексе. Для этого нужно подготовить ShturvalServicePatch для применения к спецификации (SSC) Модуля управления внешними подключениями (shturval-ingress-controller), например:

apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-ingress-controller-proxy
spec:
shturvalServiceConfigName: shturval-ingress-controller
customvalues:
controller:
config:
use-proxy-protocol: true

Затем следует загрузить в кластер с помощью импорта манифестов подготовленный ShturvalServicePatch.

После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.

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

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

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

При необходимости можно переопределить значения по умолчанию, заменив их в параметрах worker-processes, memory, cpu. Для этого нужно подготовить ShturvalServicePatch для применения к спецификации (SSC) Модуля управления внешними подключениями (shturval-ingress-controller) (описание параметров ‒ в таблице 102):

apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-ingress-controller-proxy
spec:
shturvalServiceConfigName: shturval-ingress-controller
customvalues:
controller:
config:
worker-processes: <ваше значение параметра>
resources:
limits:
memory: <ваше значение параметра>
requests:
cpu: <ваше значение параметра>
memory: <ваше значение параметра>

Затем следует загрузить в кластер с помощью импорта манифестов подготовленный ShturvalServicePatch.

После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.

Включение snippet-аннотаций

Для работы сконфигурированных snippet-аннотаций в Ingress нужно подготовить ShturvalServicePatch для применения к спецификации (SSC) Модуля управления внешними подключениями (shturval-ingress-controller), где разрешить использование snippet-аннотаций (allowSnippetAnnotations) и установить уровень риска (Critical) аннотаций, которые могут быть применены (annotations-risk-level).

Пример ShturvalServicePatch:

apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: ingress-controller-snippet
spec:
shturvalServiceConfigName: shturval-ingress-controller
customvalues:
controller:
allowSnippetAnnotations: true
config:
annotations-risk-level: Critical

Затем следует загрузить в кластер с помощью импорта манифестов подготовленный ShturvalServicePatch.

После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.

Модуль подключения нескольких сетевых интерфейсов (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)).

Следует обратить внимание, что, если в кластере одновременно используется Cilium CNI и Multus CNI, то необходимо подготовить и загрузить в кластер с помощью импорта манифестов ShturvalServicePatch для Модуля управления сетями кластера (shturval-networking). При этом в customvalues требуется задать false для cni.exclusive, как приведено ниже:

apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-networking-cni
spec:
shturvalServiceConfigName: shturval-networking
customvalues:
cni:
exclusive: false

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

Чтобы создать дополнительный интерфейс для использования подами, необходимо сконфигурировать пользовательский ресурс, который определяет конфигурацию CNI для интерфейсов. Таким ресурсом является 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.

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

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

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

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

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

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

Оператор 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.

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

С дополнительной информацией можно ознакомиться на github.

Модуль поиска узлов с запущенными hostport сервисами (CoreHA)

Модуль поиска узлов с запущенными hostport-сервисами (shturval-coreha) предназначен для динамического добавления бэкендов в HAProxy. Сервис необходим, если используется внешний балансировщик для Ingress.

Модуль не является критически важным для работы Комплекса. По умолчанию он устанавливается в кластеры в отключенном состоянии.

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

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

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

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

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

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

Пример customvalues:

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

Изменения в модуле управления внешними подключениями

Если необходимо настроить поиск подов Ingress Controller и в кластере работает Модуль поиска узлов с запущенными hostport-сервисами (shturval-coreha), необходимо:

  1. подготовить ShturvalServicePatch для применения к спецификации (SSC) Модуля управления внешними подключениями (shturval-ingress-controller), где прописать лейбл с ключом ingress.cluster/name в customvalues, как в примере ниже (описание параметров ‒ в таблице 108):
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-ingress-controller
customvalues:
controller:
labels:
ingress.cluster/name: <ваше значение параметра>
hostPort:
enabled: true # При включении поды ингресс контроллера также будут использовать на узлах кластера 80 и 443 порты
service:
nodePorts:
http: "<ваше значение параметра>"
https: "<ваше значение параметра>"
type: NodePort

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

  1. в кластер загрузить с помощью импорта манифестов подготовленный ShturvalServicePatch. Когда ShturvalServicePatch будет загружен, потребуется время для применения конфигурации. После завершения настроек Ingress контроллер будет работать на портах узла 30080/30443 и портах 80/443;
  2. настроить конфигурацию HAProxy, как в приведенном примере ниже, используя свои значения параметров (описание параметров ‒ в таблице 109):
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

Следует обратить внимание, что в примере отсутствует секция frontend и backend для порта 443.

  1. чтобы проверить корректность настроек сервиса shturval-coreha, можно c балансировщика воспользоваться командой dig:
dig @<api-server-vip> -p 1053 <label_value>.<namespace>.<config.zoneName>

где:

  • api-server-vip — адрес API-сервера кластера (10.12.13.14);
  • config.zoneName — значение параметра config.zoneName в спецификации (SSC) модуля поиска узлов с запущенными hostport-сервисами "shturval-coreha" (cluster-prod01-dc1.shturval);
  • label_value — pначение лейбла с ключом "ingress.cluster/name" в примененном ShturvalServicePatch (default-nginx);
  • namespace — yеймспейс подов (ingress), которые необходимо отслеживать.

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

;; 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