Мультикластер средствами Istio
Доступно только в DKP Enterprise Edition (EE) и DKP Certified Security Edition Pro (CSE Pro 1.67+).
Требования к кластерам
-
У всех кластеров, входящих в мультикластер, значение параметра
clusterDomain
ресурса ClusterConfiguration должно совпадать. По умолчанию используется значениеcluster.local
. -
Подсети сервисов и подов в параметрах
serviceSubnetCIDR
иpodSubnetCIDR
ресурса ClusterConfiguration должны быть уникальными для каждого кластера.- При анализе HTTP и HTTPS запросов (в терминологии Istio) идентифицировать их и принять решение о дальнейшей маршрутизации, запрещении или разрешении возможно по заголовкам.
- А при анализе TCP запросов (в терминологии Istio) идентифицировать их и принять решение о дальнейшей маршрутизации, запрещении или разрешении возможно только по IP-адресу назначения и номеру порта.
Если IP адреса сервисов или подов пересекутся между кластерами, то под маршрутизирующие, запрещающие или разрешающие правила Istio могут попасть запросы других подов иных кластеров. Пересечение подсетей сервисов и подов жестко запрещено в single-network-режиме, и не рекомендуется в режиме multiple-networks (подробнее — в документации Istio)
- В режиме single-network поды разных кластеров могут взаимодействовать друг с другом напрямую.
- В режиме multiple-networks поды разных кластеров могут взаимодействовать друг с другом только при использовании Istio gateway.
Общие принципы
- Для работы мультикластера требуется взаимное доверие между кластерами. Это реализуется через обмен корневыми сертификатами между кластерами.
- Для сбора информации о соседних сервисах Istio подключается к API-серверу соседнего кластера. Настройку защищённого канала обеспечивает модуль
istio
в составе Deckhouse.
Включение мультикластера
При включении мультикластера (параметр модуля istio.multicluster.enabled = true
) происходит следующее:
- В кластер добавляется прокси для публикации доступа к API-серверу через стандартный Ingress-ресурс:
- Доступ защищён авторизацией на основе Bearer-токенов, подписанных доверенными ключами.
- Обмен доверенными публичными ключами происходит автоматически средствами Deckhouse при взаимной настройке мультикластера.
- Прокси имеет read-only-доступ к строго определённым ресурсам.
- В кластер добавляется сервис, который экспортирует метаданные кластера наружу:
- Корневой сертификат Istio (доступен без аутентификации).
- Публичный адрес, через который доступен API-сервер (доступен только для аутентифицированных запросов из соседних кластеров).
- Список публичных адресов сервиса
ingressgateway
(доступен только для аутентифицированных запросов из соседних кластеров). - Публичные ключи сервера для аутентификации запросов к API-серверу и закрытым метаданным.
Управление мультикластером
Для сборки мультикластера необходимо в каждом кластере создать набор ресурсов IstioMulticluster, описывающих остальные кластеры.
Пример устройства мультикластера из двух кластеров
Для устройства мультикластера средствами Istio используйте кастомный ресурс IstioMulticluster.
Кластер A:
apiVersion: deckhouse.io/v1alpha1
kind: IstioMulticluster
metadata:
name: cluster-a
spec:
metadataEndpoint: https://istio.k8s-a.example.com/metadata/
Кластер B:
apiVersion: deckhouse.io/v1alpha1
kind: IstioMulticluster
metadata:
name: cluster-b
spec:
metadataEndpoint: https://istio.k8s-b.example.com/metadata/