Должны ли сертификаты TLS от LetsEncrypt быть на всех контейнерах? - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь сделать так, чтобы мое докеризованное приложение поддерживало 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 не позволит моему приложению работать без действительного сертификата.

Любое руководство о том, что отраслевой стандарт в этом отделе будет приветствоваться.

Ответы [ 2 ]

0 голосов
/ 26 января 2020

Вы можете использовать контроллер управления сертификатами Kubernetes cert-manager. Он может помочь с выдачей сертификатов из различных источников, таких как Let's Encrypt, HashiCorp Vault, Venafi, простая пара ключей подписи или самоподписанный.

Он обеспечит действительность и актуальность сертификатов, и попытаться обновить сертификаты в установленное время до истечения срока действия.

enter image description here

0 голосов
/ 26 января 2020

Ответ на этот вопрос прост: если вы используете https, вам нужно иметь действительный сертификат для каждого контейнера, который передает протокол https. Для обработки распространения сертификатов внутри вашего контейнера вы можете использовать service mesh инструменты, такие как Linkerd или Istio, используемые Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...