Мультикластер средствами 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/