Использование службы Управления API Azure с микрослужбами, развернутыми в службе Kubernetes Azure
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API
Микрослужбы идеально подходят для создания интерфейсов программирования приложений. С помощью службы Azure Kubernetes Service (AKS) можно быстро развернуть и использовать архитектуру на основе микрослужб в облаке. Затем можно использовать службу управления API Azure (управления API) для публикации микрослужб как API для внутреннего и внешнего потребления. В этой статье описываются варианты развертывания управления API с помощью AKS. В ней предполагается наличие базовых знаний о Kubernetes, управлении API и сети Azure.
Общие сведения
При публикации микрослужб в качестве интерфейсов API для потребления может быть трудно управлять обменом данными между микрослужбами и клиентами, которые их используют. Существует множество перекрестных проблем, таких как проверка подлинности, авторизация, регулирование, кэширование, преобразование и мониторинг. Эти задачи являются допустимыми независимо от того, доступны ли микрослужбы внутренним или внешним клиентам.
Шаблон шлюза API предназначен для решения этих задач. Шлюз API выступает в качестве точки входа микрослужб, отделяет клиентов от микрослужб, добавляет дополнительный уровень безопасности и уменьшает сложность микрослужб за счет устранения проблем, связанных с обработкой перекрестных задач.
Управление API Azure — это готовое решение для решения ваших потребностей для шлюза API. Вы можете быстро создать единообразный и современный шлюз для микрослужб и опубликовать их в качестве интерфейса API. Будучи решением для управления API в полном жизненном цикле, оно также предоставляет дополнительные возможности, включая портал самообслуживания для разработчика для обнаружения API, управления жизненным циклом API и аналитики API.
При совместном использовании AKS и служба управления API предоставляют платформу для развертывания, публикации, защиты, мониторинга и управления интерфейсами API на основе микрослужб. В этой статье мы рассмотрим несколько вариантов развертывания AKS в сочетании с Управление API.
Службы Kubernetes и API
В кластере Kubernetes контейнеры развертываются в объекты pod, которые являются временными и имеют жизненный цикл. Когда рабочий узел выходит из строя, все объекты pod, работающие на узле, теряются. Таким образом, IP-адрес объекта pod может измениться в любое время. Мы не можем полагаться на него, чтобы взаимодействовать с модулем pod.
Чтобы решить эту проблему, Kubernetes представил концепцию служб. Служба Kubernetes — это уровень абстракции, который определяет группу логических модулей pod и обеспечивает для них возможность внешнего трафика, балансировку нагрузки и обнаружение служб.
Когда мы готовы опубликовать микрослужбы в качестве API-интерфейсов с помощью службы управления API, необходимо подумать о том, как сопоставлять наши службы в Kubernetes с API-интерфейсами в службе управления API. Не существует каких-либо установленных правил. Все зависит от конкретного изначального дизайна и способа разбиения ваших бизнес-возможностей или доменов на микрослужбы. Например, если модули pod, которые находятся за службой, отвечают за все операции с заданным ресурсом (например, customer), служба может быть сопоставлена с одним API. Если операции с ресурсом секционируются на несколько микрослужб (например, GetOrder, PlaceOrder), то несколько служб могут быть логически агрегированы в один API в управлении API (см. рис. 1).
Сопоставления также могут развиваться. Так как Управление API создает фасад перед микрослужбами, он позволяет нам рефакторинг и правильный размер наших микрослужб с течением времени.
Развертывание службы управления API на фронте AKS
Существует несколько вариантов развертывания службы управления API на фронте кластера AKS.
Хотя кластер AKS всегда развертывается в виртуальной сети, Управление API экземпляр не требуется развертывать в виртуальной сети. Если Управление API не находится в виртуальной сети кластера, кластер AKS должен публиковать общедоступные конечные точки для Управление API подключения. В этом случае необходимо защитить подключение между Управление API и AKS. Другими словами, необходимо обеспечить доступ к кластеру только через службу управления API. Давайте перейдем к вариантам.
Вариант 1: сделать службы общедоступными
Службы в кластере AKS можно предоставлять в общий доступ, используя типы служб NodePort, LoadBalancer и ExternalName. В данном случае доступ к службам можно получить напрямую из Интернета. После развертывания службы управления API на фронте кластера необходимо убедиться, что весь входящий трафик проходит через службу управления API, применяя проверку подлинности в микрослужбах. Например, служба управления API может включать маркер доступа в каждый запрос к кластеру. Каждая микрослужба отвечает за проверку маркера перед обработкой запроса.
Это может быть самым простым способом развертывания службы управления API на фронте AKS, особенно если логика аутентификации уже реализована в микрослужбах.
Преимущества.
- Простая настройка на стороне Управление API, так как она не требуется внедрять в виртуальную сеть кластера
- Отсутствие изменений на стороне AKS, если службы уже в общем доступе части, а логика проверки подлинности уже существует в микрослужбах
Недостатки.
- Потенциальная угроза безопасности из-за общедоступных конечных точек
- Нет точки с одним входом для входящего трафика кластера
- Усложняет микрослужбы из-за дублирующейся логики проверки подлинности
Вариант 2: установка контроллера объекта ingress
Хотя вариант 1 может быть проще, он имеет значительные недостатки, как упоминалось выше. Если экземпляр Управление API не находится в виртуальной сети кластера, взаимная проверка подлинности TLS (mTLS) — это надежный способ обеспечения безопасности и доверия трафика в обоих направлениях между экземпляром Управление API и кластером AKS.
Взаимная проверка подлинности TLS поддерживается нативно службой управления API и может быть включена в Kubernetes путем установки контроллера объекта ingress (рис. 3). В результате проверка подлинности будет выполняться в контроллере объекта ingress, что упрощает микрослужбы. Кроме того, можно добавить IP-адреса службы управления API в список разрешенных данных объекта ingress, чтобы обеспечить доступ к кластеру только для службы управления API. Если используется Управление API уровень "Премиум" или "Стандартный" уровня "Стандартный", изоляция на уровне сети может быть достигнута.
Преимущества.
- Простая конфигурация на стороне Управление API, так как она не требуется внедрять в виртуальную сеть кластера и mTLS изначально поддерживается.
- Централизует защиту входящего трафика кластера на уровне контроллера объекта ingress
- Уменьшение угроз безопасности за счет минимизации общедоступных конечных точек кластера
Недостатки.
- Повышает сложность конфигурации кластера из-за дополнительной работы по установке, настройке и обслуживанию контроллера объекта ingress и управлению сертификатами, используемыми для mTLS
- Риск безопасности из-за общедоступной видимости конечных точек контроллера входящего трафика, если не используется Управление API уровень "Стандартный" версии 2 или "Премиум".
При публикации API в Управлении API использование ключей подписки является самым простым способом защитить доступ к этим интерфейсам API. Разработчики, которым требуется использовать опубликованные API, должны включать действительный ключ подписки в HTTP-запросах при выполнении вызовов к этим API. Иначе все вызовы немедленно игнорируются шлюзом Управления API. Они не передаются в серверные службы.
Чтобы получить ключ подписки для доступа к API, нужна подписка. Подписка по сути является именованным контейнером для пары ключей подписки. Разработчики, которым требуется доступ к опубликованным API, могут получить подписки. Им не требуется согласие издателей API. Издатели API могут самостоятельно создавать подписки напрямую для пользователей API.
Вариант 3: развертывание управления API в виртуальной сети кластера
В некоторых случаях клиенты с ограничениями на соблюдение нормативных требований или строгими требованиями к безопасности могут найти вариант 1 и 2 неприемлемыми решениями из-за наличия общедоступных конечных точек. В других службах кластер AKS и приложения, использующие микрослужбы, могут находиться в одной виртуальной сети, поэтому нет причин для общедоступного предоставления кластера, так как весь трафик API останется в виртуальной сети. Для таких сценариев можно развернуть службу управления API в виртуальной сети кластера. Уровни Developer и Premium для службы управления API поддерживают развертывание в виртуальной сети.
Существует два режима развертывания службы управления API в виртуальной сети (внешний и внутренний).
Если потребители API не находятся в виртуальной сети кластера, следует использовать внешний режим (рис. 4). В этом режиме шлюз службы управления API внедряется в виртуальную сеть кластера, но становится доступным из Интернета через внешний балансировщик нагрузки. Это позволяет полностью скрыть кластер, в то же время позволяя внешним клиентам использовать микрослужбы. Кроме того, можно использовать сетевые возможности Azure, такие как группы безопасности сети (NSG), чтобы ограничить сетевой трафик.
Если все потребители API находятся в виртуальной сети кластера, можно использовать внутренний режим (рис. 5). В этом режиме шлюз службы управления API внедряется в виртуальную сеть кластера и доступен только в пределах этой виртуальной сети с помощью внутреннего балансировщика нагрузки. Нет способа связаться с шлюзом Управление API или кластером AKS из общедоступного Интернета.
В обоих случаях кластер AKS не отображается публично. По сравнению с вариантом 2, контроллер объекта ingress может не потребоваться. В зависимости от сценария и конфигурации проверка подлинности между службой управления API и микрослужбами все равно может оказаться необходимой. Например, при внедрении сетки служб всегда требуется взаимная проверка подлинности по протоколу TLS.
Преимущества.
- Наиболее безопасный вариант, так как у кластера AKS нет общедоступной конечной точки
- Упрощает настройку кластера, так как в нем нет общедоступной конечной точки
- У внутреннего режима есть возможность инкапсулировать службу управления API и AKS в виртуальной сети
- Возможность управления сетевым трафиком с помощью сетевых возможностей Azure, таких как группы безопасности сети (NSG)
Недостатки.
- Повышает сложность развертывания и настройки службы управления API для работы в виртуальной сети
Следующие шаги
- Дополнительные сведения в статье Основные сетевые понятия для приложений в AKS
- Дополнительные сведения в статье Как использовать службу управления API Azure с виртуальными сетями