#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
. Да, есть и другие способы достичь того, что вы пытаетесь сделать, но это будет зависеть от многих вещей. То, что вы делаете, не является неразумным. Просто убедитесь, что вы разрешили правильное имя хоста, и при необходимости сделайте его параметризуемым.