Я пытаюсь сделать так, чтобы мое докеризованное приложение поддерживало HTTPS в работе. Я могу найти множество учебников по самозаверяющим сертификатам. Все они не дотягивают до производства. Они в основном заканчиваются словами: «Да, просто используйте Let's Encrypt». Это действительно не проясняет для меня, каков отраслевой стандарт для ситуации с балансировкой нагрузки на производстве.
Чтобы обеспечить некоторый контекст, я создал базовое приложение do tnet с этой командой:
dotnet new react -au Individual
Я следовал примеру документации по созданию Dockerfile для моего контейнера:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Эта часть вызвала много головных болей, так как приложение публикуется, оно переходит в рабочий режим и ожидает действующий сертификат. В любом случае, я пытался продвигаться вперед и тестировать в производстве. Это вызвало много вопросов вокруг сертификатов. После того, как я установил Certbot и получил подписанный сертификат. У меня остались эти четыре файла:
- cert.pem - я думаю, что это должно быть превращено в .pfx
- chain.pem - я знаю, что это такое, но не уверен кому это нужно.
- fullchain.pem - То же самое для этого файла.
- privkey.pem - я думаю, это используется для создания моего файла .pfx.
Мой основной вопрос в ситуации с балансировкой нагрузки. Будет ли certbot установлен на каждом контейнере, и должны ли сертификаты генерироваться на каждом контейнере?
Я думаю, что он должен быть создан только один раз, тогда каждый сервер приложений получит тот же сертификат и ключ, которые были сгенерированы. Возникает вопрос: где должен быть установлен certbot?
Я видел, как некоторые установки говорили, что nginx будет перед этими контейнерами и будет играть роль балансировщика нагрузки. Тогда nginx будет обрабатывать трафик https c. Мне это не кажется правильным, не только ваш трафик c с nginx на серверы приложений будет незашифрованным, но я думаю, что IdentityServer не позволит моему приложению работать без действительного сертификата.
Любое руководство о том, что отраслевой стандарт в этом отделе будет приветствоваться.