Реализация шлюза API Ocelot в AKS

#azure #api-gateway #azure-aks #ocelot

#azure #api-шлюз #azure-aks #ocelot

Вопрос:

Я создаю кластер AKS и хочу использовать API gateway (Ocelot) для маршрутизации и аутентификации запросов к контейнерам (микросервисам) за шлюзом. Мой вопрос в том, как этого добиться? Я знаю, что должен развернуть шлюз API ocelot внутри узла, но я не знаю, как настроить весь трафик для прохождения через шлюз API. Не могу найти пример или указания, которые могли бы мне помочь. Какие шаги мне нужно предпринять? Или, может быть, есть лучший способ выполнить желаемый сценарий?

Комментарии:

1. «Не могу найти пример или указания, которые могли бы мне помочь» Простой поиск в Google приведет вас к learn.microsoft.com/en-us/dotnet/architecture/microservices /… и это ocelot.readthedocs.io/en/latest/features/kubernetes.html

2. @CSharpRocks Я уже читал это. Не на 100% ясно, как это сделать, поэтому я спрашиваю, например, должен ли я использовать Ingress или использовать сетевую политику, достаточно

3. Я хочу, чтобы ни один микросервис не был доступен напрямую, кроме как через шлюз API

Ответ №1:

Если вы используете Ocelot в качестве шлюза API, необходимо создать проект .NET с файлом конфигурации для маршрутов, которые вы хотите использовать. Затем вы развертываете это с помощью развертывания внутри своего кластера вместе с контейнерами, в которых работают ваши API, и подключаете свой шлюз API к службе ClusterIP. На этом этапе вам следует внутренне проверить, правильно ли маршрутизируются вызовы из ClusterIP в шлюз API и в ваши API. Затем вы можете предоставить доступ к своему шлюзу API в Интернете с помощью службы балансировки нагрузки, контроллера входа или шлюза приложений Azure.

Другой способ — вообще не использовать шлюз API Ocelot, используя контроллер входа и настраивая маршруты непосредственно в нем.

Комментарии:

1. Спасибо за помощь, у меня уже есть готовое приложение Ocelot, я просто не знаю, как реализовать это в кластере Kubernetes. По умолчанию все модули доступны из Интернета, верно? Поэтому я хочу предоставить только шлюз API Ocelot. Для этого мне нужно использовать сетевую политику Calico или Azure, я правильно понял? (или сделайте весь кластер закрытым — но это выглядит слишком сложно со стороны сети)

2. «По умолчанию все модули доступны из Интернета, верно?» Нет, все наоборот.

3. Вы уверены? По умолчанию модули не изолированы; они принимают трафик из любого источника / kubernetes.io/docs/concepts/services-networking /…

4. Посмотрите на это: youtube.com/watch?v=131_TIa_ftIamp;feature=youtu.beamp;t=38

5. Сеть K8s является плоской сетью, поэтому да, внутренне все модули видят друг друга по умолчанию.