FASTAPI: разрешать запросы только от приложения в другом контейнере

#python #fastapi

Вопрос:

Я не могу понять, что кажется тривиальной проблемой:

У меня есть докеризованный сервис FastAPI. Он состоит из 2 контейнеров: ServiceA и ServiceB.

Я хочу, чтобы ServiceB был доступен только для ServiceA, а не для всего мира.

Я попробовал это:

 from fastapi.middleware.trustedhost import TrustedHostMiddleware   def get_application():  app = FastAPI(title=server_config.PROJECT_NAME, version=server_config.VERSION)   app.add_middleware( TrustedHostMiddleware, allowed_hosts=["http://serviceA"] )   return app   # Connect to DB app = get_application()  

Но это не работает, запросы, поступающие от ServiceA, блокируются. Я также пробовал localhost, ServiceA:8000 и т. Д., Но ничего не работает…

Есть идеи?

Ответ №1:

То, что у вас есть, — это один из способов достичь этого, но http://serviceA он не сработает, он ожидает имя хоста. Теперь, как вы упомянули, вы могли бы попробовать, но это не сработало. Это потому, что это зависит от того, как выглядит ваша машина. убедитесь, что у вас есть правильное имя хоста для serviceA .

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

1. Спасибо! не могли бы вы подробнее рассказать о «убедитесь, что у вас есть правильное имя хоста для «? Кроме того, вы проверяете, есть ли другие/лучшие способы достижения того же результата?

2. Что-то быстрое и грязное заключалось бы в том, чтобы снять ограничение на хост, которое у вас есть, проверить заголовки и выяснить, как выглядит контейнер, который запускается serviceA , и добавить хост в список allowed_hosts serviceB . Да, есть и другие способы достичь того, что вы пытаетесь сделать, но это будет зависеть от многих вещей. То, что вы делаете, не является неразумным. Просто убедитесь, что вы разрешили правильное имя хоста, и при необходимости сделайте его параметризуемым.