Лучшая мультикластерная конфигурация для mTLS между приложениями
Я хочу настроить 2 кластера Kubernetes с помощью мультикластера Istio, и я думаю об этих двух вариантах:
- Реплицированные плоскости управления (https://istio.io/docs/setup/install/multicluster/gateways/)
- Общая плоскость управления (одна сеть) (https://istio.io/docs/setup/install/multicluster/shared-vpn/)
Я бы предпочел использовать реплицированные плоскости управления из соображений доступности, но у меня возникает следующий вопрос: как в этом случае работает mTLS между приложениями?
Если 2 приложения одного кластера взаимодействуют друг с другом и включен mTLS, я могу создать AuthorizationPolicy, подобную этой:
apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
name: "allow-app-a"
namespace: app-b
spec:
rules:
- from:
- source:
principals: ["cluster.local/ns/app-a/sa/default"]
to:
- operation:
methods: ["GET"]
В app-a
идентифицируется своим принципалом, предоставленным mTLS.
Если у нас есть развертывание мультикластера с реплицированными плоскостями управления (версия 1), у нас будет что-то вроде этого:
мультикластер с реплицированными плоскостями управления
Как идентифицируются приложения в другом кластере (cluster.global)? Весь трафик проходит через шлюз, я предполагаю, что он никогда не будет читать принципала из исходного вызывающего абонента, он будет читать принципала из шлюза. Это правильно?
Есть ли способ решить эту проблему? Могу ли я получить реплицированные плоскости управления, но без развертывания шлюзов?
1 ответ
Выбирайте мультикластерную модель исходя из Ваших требований, а не наоборот. Согласно документации istio:
Модель общей плоскости управления (единая сеть) является самой простой и в основном используется как одна сетка, охватывающая несколько кластеров.
Что касается модели реплицированных плоскостей управления, она в основном используется для обеспечения доступности и резервирования при отказе, когда у вас есть своего рода реплики вашего кластера и сетки в нескольких регионах. Таким образом можно добиться одинаковой конфигурации и политики на обоих кластерах. Его также можно использовать продвинутым способом, как здесь.
Документация Istio резюмирует реплицированную плоскость управления со следующим:
Используя шлюзы Istio, общий корневой центр сертификации и записи службы, вы можете настроить единую сетку служб Istio для нескольких кластеров Kubernetes. После такой настройки трафик может быть прозрачно направлен на удаленные кластеры без участия приложений. Хотя этот подход требует некоторой ручной настройки для удаленного доступа к сервисам, процесс создания записи сервиса можно автоматизировать.
Что касается межкластерной коммуникации и mTLS согласно документации:
Для межкластерного взаимодействия требуется взаимное соединение TLS между сервисами. Чтобы обеспечить взаимную связь TLS между кластерами, Citadel каждого кластера будет настроен с использованием промежуточных учетных данных ЦС, сгенерированных общим корневым ЦС. В целях иллюстрации вы используете образец сертификата корневого ЦС, доступный в установке Istio в каталоге samples / certs.
Как идентифицируются приложения в другом кластере (cluster.global)?
Посредством host
назовите, что приложения вводятся в реестр сервисных сетей. Вы можете использоватьServiceEntry
объекты для настройки глобальной видимости сервисов. Вы можете найти пример здесь.
Одна из функций развертывания с несколькими сетками:
По умолчанию ни одна из служб в сетке не отображается, владельцы сетки должны явно указать, какие службы доступны.
Весь трафик проходит через шлюз, я предполагаю, что он никогда не будет читать принципала из исходного вызывающего абонента, он будет читать принципала из шлюза. Это правильно?
Это зависит от вашего Gateway
конфигурация. У вас может быть входной шлюз без завершения TLS, который инструктирует шлюз передавать входящий трафик КАК ЕСТЬ, без завершения TLS. Таким образом, исходный адрес будет сохранен.
Могу ли я получить реплицированные плоскости управления, но без развертывания шлюзов?
Нет, для мультикластерной модели с реплицированными плоскостями управления каждый кластер по-прежнему имеет свои Gateways
которые используются для маршрутизации.
Надеюсь это поможет.