Управление сетями и адресами
Модуль управления сетями кластера (Cilium CNI)
Модуль сетевого взаимодействия обеспечивает сетевую функциональность и взаимодействие между различными компонентами кластера, такими как контейнеры, поды, узлы и сервисы.
Для настройки Cilium нужно в интерфейсе кластера управления Комплекса:
- в боковом меню открыть раздел "Сервисы и репозитории";
- перейти на страницу "Установленные сервисы";
- найти "Модуль управления сетями кластера";
- если модуль не отображается, в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Доступные чарты"; на вкладке "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. Для этого требуется:
- в вашем кластере перейти в неймспейс kube-system и открыть страницу "ConfigMaps" раздела "Хранилище";
- найти ConfigMap с именем kubevip и перейти к редактированию. Если нет ConfigMap, создать с именем kubevip;
- добавить ключ, где в имени прописать необходимый параметр, а в значении указать 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-адресов объектов в вашем кластере. Для этого в графическом интерфейсе Комплекса требуется:
- в боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Установленные сервисы";
- найти "Модуль управления локальным DNS" (shturval-caching-dns) и открыть страницу управления модулем;
- добавить или изменить в параметрах сервиса записи, используя config сервиса NodeLocaldns.
Пример customvalues (описание параметров ‒ в таблице 105):
config:
zones:
.:<ваше значение порта для DNS>:
plugins:
hosts:
entries:
‒ ip: <ваше значение параметра>
name: <ваше значение параметра>
fallthrough: <ваше значение параметра>
- когда настройка спецификации завершена, выбрать режим обновления "Автоматическое", если установлен "Ручной" режим, и сохранить внесенные изменения.
Необходимо подождать некоторое время, пока изменения в конфигурации сервиса 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. При этом важно соблюдать последовательность установки:
- shturval-metacni-crds;
- shturval-metacni;
- shturval-sriov-crds;
- 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), необходимо:
- подготовить 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.
- в кластер загрузить с помощью импорта манифестов подготовленный ShturvalServicePatch. Когда ShturvalServicePatch будет загружен, потребуется время для применения конфигурации. После завершения настроек Ingress контроллер будет работать на портах узла 30080/30443 и портах 80/443;
- настроить конфигурацию 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.
- чтобы проверить корректность настроек сервиса 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