.NET и Amazon Elastic Container Registry (ECR)

Amazon Elastic Container Registry (ECR) — это система, предназначенная для хранения и управления образами Docker и Open Container Initiative (OCI) и OCI-совместимыми артефактами. ECR может выступать в качестве частного хранилища образов контейнеров, где вы можете хранить собственные образы, общедоступного хранилища образов контейнеров для управления общедоступными образами, а также для управления доступом к другим общедоступным хранилищам образов. ECR также предоставляет политики жизненного цикла, которые позволяют управлять жизненным циклом образов в вашем хранилище, сканирование образов, чтобы вы могли выявить любые потенциальные уязвимости программного обеспечения, а также межрегиональную и межаккаунтную репликацию образов, чтобы ваши образы были доступны везде, где они вам нужны.

Как и остальные сервисы AWS, ECR построен поверх других сервисов. Например, Amazon ECR хранит образы контейнеров в ведрах Amazon S3, поэтому шифрование на стороне сервера доступно по умолчанию. Или, при необходимости, вы можете использовать шифрование на стороне сервера с помощью ключей KMS, хранящихся в AWS Key Management Service (AWS KMS), все это можно настроить при создании реестра. Как вы, вероятно, догадались, IAM управляет правами доступа к образам, поддерживая все — от строгих правил до анонимного доступа для поддержки концепции публичного репозитория.

Существует несколько различных способов создания репозитория. Первый — через консоль ECR, выбрав кнопку Создать репозиторий. В результате вы перейдете на страницу создания репозитория, как показано на рисунке 1.

Рисунок 1. Создание репозитория ECR в консоли AWS

На этой странице вы можете задать параметры видимости, параметры сканирования изображений и параметры шифрования. Существует две настройки видимости — частная и публичная. Управление частными репозиториями осуществляется с помощью разрешений, управляемых в IAM, и является частью бесплатного уровня AWS Free Tier, предоставляющего 500 МБ в месяц в течение одного года для хранения ваших частных репозиториев. Публичные хранилища открыты и доступны для открытого извлечения. Amazon ECR предлагает вам 50 ГБ в месяц бесплатного хранения для ваших публичных хранилищ, и вы можете бесплатно передавать 500 ГБ данных в интернет из публичного хранилища каждый месяц анонимно (без использования учетной записи AWS). При авторизации в публичном хранилище на ECR вы можете бесплатно передавать 5 ТБ данных в интернет каждый месяц и получать неограниченную пропускную способность бесплатно при передаче данных из публичного хранилища в ECR на любые вычислительные ресурсы AWS в любом регионе.

Включение функции Scan on push on означает, что каждое изображение, загруженное в хранилище, будет сканироваться. Это сканирование призвано помочь выявить любые уязвимости программного обеспечения в загруженном образе и будет автоматически выполняться каждые 24 часа, но включение этой функции гарантирует, что образ будет проверен до того, как его можно будет использовать. Сканирование использует базу данных Common Vulnerabilities and Exposures (CVEs) проекта Clair, выводя список результатов сканирования.

Примечание: Clair — это проект с открытым исходным кодом, который был создан для статического анализа уязвимостей в контейнерах приложений (в настоящее время включающих OCI и Docker). Цель проекта — обеспечить более прозрачный взгляд на безопасность инфраструктуры на основе контейнеров — проект был назван Clair в честь французского термина, который переводится как ясный, яркий или прозрачный.

Последний раздел — настройки шифрования. Когда этот параметр включен, как показано на рисунке 2, ECR будет использовать AWS Key Management Service (KMS) для управления шифрованием образов, хранящихся в хранилище, вместо стандартного подхода к шифрованию.

Рисунок 2. Настройки шифрования

Вы можете использовать либо настройки по умолчанию, где ECR создает ключ по умолчанию (с псевдонимом aws/ecr), либо вы можете Настроить параметры шифрования и либо выбрать уже существующий ключ, либо создать новый ключ, который будет использоваться для шифрования.

Перебор репозиториев кэша

Все, что мы рассмотрели до сих пор, заключается в загрузке собственного образа контейнера в репозиторий. Однако, как мы подробно рассмотрим чуть позже в этом посте, в основе практически всех образов контейнеров лежит базовый образ контейнера, обычно созданный таким производителем, как Microsoft или Docker. Эти базовые образы обычно загружаются из публичного репозитория. Однако могут быть случаи, когда вы предпочитаете получать все образы из Amazon Elastic Container Registry, чтобы воспользоваться преимуществами его высокой доступности и безопасности. В таком случае кэш-репозитории pull-through могут быть именно тем, что вам нужно, поскольку они будут извлекать ссылающиеся образы из источника и кэшировать их в ECR.

Примечание: Функция pull-through cache repository была добавлена для re:Invent 2021, поэтому доступные публичные хранилища постепенно пополняются. Возможно, что хранилище, из которого вы хотите сделать сквозной доступ, еще не доступно.

Создание сквозного репозитория кэша — относительно простой процесс. Сначала выберите Private registry в левом меню, а затем нажмите кнопку Edit на панели Pull through cache, чтобы изменить настройки. Откроется страница конфигурации Pull through cache, на которой нажмите кнопку Add rule. Откроется окно Создать, как показано на рисунке 3.

Рисунок 3 Создание сквозного кэша

Первый выпадающий список, Публичный реестр, содержит все доступные предварительно настроенные публичные реестры; как вы видите, мы выбрали ECR Public. Нажав кнопку Сохранить, вы вернетесь к списку правил сквозного кэширования.

Поскольку это проходное правило, вам нужно объединить проходной URL и ссылающийся источник при использовании проходного URL, используя формат .dkr.ecr..amazonaws.com// :. Если вы посмотрите на определение образа контейнера, вы можете увидеть следующие строки:

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
Войти в полноэкранный режим Выйти из полноэкранного режима

Использование сквозного кэша означает, что если вы собираетесь использовать базовый образ ASP.NET Core от Bitnami, доступный из публичного репозитория ECR, вы должны изменить команду FROM, чтобы она ссылалась на сквозной источник, как показано ниже.

# Build runtime image
FROM xxxxxxxxx.dkr.ecr.use-east-2.amazonaws.com/ecr-public/bitnami/aspnet-core:latest
WORKDIR /app
Вход в полноэкранный режим Выход из полноэкранного режима

Имейте в виду, что это нечто большее, чем простое протаскивание, поскольку изображение, на которое вы ссылаетесь, будет кэшироваться в ECR, так что дополнительные обращения к этому же изображению не будут обращаться к конечному исходному хранилищу. Это означает, что использованное хранилище будет списано с вашего счета.

Другие подходы к созданию репозитория ECR

Как и в случае с другими сервисами, о которых мы говорили до сих пор, существует способ создания ECR с помощью пользовательского интерфейса, как мы только что рассмотрели, а также несколько других подходов к созданию репозитория.

AWS CLI

Вы можете создать репозиторий ECR в AWS CLI с помощью команды create-repository, являющейся частью службы ECR.

C:>aws ecr create-repository 
    --repository-name prodotnetonaws 
    --image-scanning-configuration scanOnPush=true 
    --region us-east-1
Вход в полноэкранный режим Выход из полноэкранного режима

Вы можете управлять всеми основными настройками репозитория через CLI так же, как и при создании репозитория через консоль ECR, включая назначение ключей шифрования и определение URI репозитория.

Инструменты AWS для PowerShell

И, как вы, вероятно, не слишком удивитесь, вы также можете создать репозиторий ECR с помощью AWS Tools for PowerShell:

C:> New-ECRRepository 
-RepositoryName prodotnetonaws
-ImageScanningConfiguration_ScanOnPush $true
Войти в полноэкранный режим Выход из полноэкранного режима

Как и в случае с CLI, у вас есть возможность полностью настроить репозиторий в процессе его создания.

AWS Toolkit для Visual Studio

При использовании AWS Toolkit для Visual Studio вы должны полагаться на встроенные в расширение значения по умолчанию, поскольку единственное, что вы можете контролировать через AWS Explorer — это имя хранилища, как показано на рисунке 4. Как вы можете заметить, AWS Explorer не имеет собственного узла для ECR и вместо этого помещает узел Repositories в узел Amazon Elastic Container Service (ECS). Это наследие прошлого, до того, как ECR действительно стал собственной службой, но это все еще эффективный способ доступа и работы с репозиториями в Visual Studio.

Рисунок 4, Создание репозитория в Visual Studio

После создания репозитория в Visual Studio, перейдя в консоль ECR и просмотрев созданный репозиторий, вы увидите, что он использовал настройки по умолчанию, то есть это частный репозиторий с отключенными «Сканирование при нажатии» и «Шифрование KMS».
На данный момент самый простой способ показать, как все это будет работать, — это создать изображение и загрузить его в хранилище. Затем мы сможем использовать этот образ контейнера при работе с различными службами управления контейнерами AWS.

Примечание: Вы не сможете выполнить многие из этих упражнений без установленного на вашей машине Docker. Инструкции по загрузке и установке Docker Desktop вы найдете на сайте https://www.docker.com/products/docker-desktop. После установки Desktop вы сможете локально создавать и запускать образы контейнеров.

Мы начнем с создания простого образца веб-приложения .NET ASP.NET Core в Visual Studio через File -> New Project и выбора шаблона проекта ASP.NET Core Web App (C#). Затем вы назовете свой проект и выберете место сохранения исходного кода. После этого появится новое окно с запросом дополнительной информации. Флажок Enable Docker по умолчанию не установлен, поэтому убедитесь, что вы его установили, а затем выберите используемую ОС Docker, в данном случае это Linux. В результате будет создано простое решение, включающее Dockerfile, как показано на рисунке 5.

Рисунок 5. Новое решение .NET с Dockerfile

Если вы посмотрите на содержимое созданного Dockerfile, то увидите, что он очень похож на Dockerfile, который мы рассмотрели ранее, содержащий инструкции по восстановлению и сборке приложения, публикации приложения, а затем копированию опубликованных битов приложения в конечный образ, задавая ENTRYPOINT.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["SampleContainer/SampleContainer.csproj", "SampleContainer/"]
RUN dotnet restore "SampleContainer/SampleContainer.csproj"
COPY . .
WORKDIR "/src/SampleContainer"
RUN dotnet build "SampleContainer.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "SampleContainer.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SampleContainer.dll"]
Вход в полноэкранный режим Выход из полноэкранного режима

Если вы посмотрите на опции сборки в Visual Studio, как показано на рисунке 6, вы увидите дополнительные опции, доступные для контейнеров. Выбор Docker, например, будет работать через Dockerfile, запускать конечный образ контейнера в Docker, а затем подключать отладчик к этому контейнеру, чтобы вы могли отлаживать как обычно.

Рисунок 6. Опции сборки в контейнерном приложении

Примечание: Если вы хотите увидеть, что происходит в процессе сборки контейнера, перейдите в окно вывода, измените выпадающее окно Show output from на Container Tools, а затем отладьте приложение в Docker. Вы увидите, как обрабатываются команды Docker.

Следующим шагом будет создание образа контейнера и сохранение его в хранилище. Для этого щелкните правой кнопкой мыши на имени проекта в Visual Studio Solution Explorer и выберите Publish Container to AWS, чтобы вызвать мастера, как показано на рисунке 7.

Рисунок 7. Мастер публикации контейнера в AWS

На рисунке 7 показано, что хранилище, которое мы только что создали, выбрано в качестве хранилища для сохранения, а опция Publish only the Docker image to Amazon Elastic Container Registry в Deployment Target была выбрана (это не значения по умолчанию для каждой из этих опций). Как только вы все настроите, нажмите кнопку Publish. Вы увидите, как окно мастера перемалывает множество процессов, затем может появиться консольное окно, показывающее фактическую загрузку образа, а затем мастер автоматически закроется в случае успеха.

Вы можете увидеть новый репозиторий в Visual Studio, а также войдя в Amazon ECR и зайдя в репозиторий prodotnetonaws (тот, в который мы загрузили изображение), как показано на рисунке 8, вы увидите, что теперь в репозитории доступно изображение с последним тегом, как и было настроено в мастере. Вы можете нажать на значок с текстом Copy URI, чтобы получить URL, который вы будете использовать при работе с этим изображением. Мы рекомендуем вам сделать это на данном этапе и вставить его в удобное место, так как это значение вы будете использовать для доступа к изображению.

Рисунок 8. Образ контейнера, сохраненный в Amazon ECR

Теперь, когда у вас есть образ контейнера, хранящийся в хранилище, в следующем посте мы рассмотрим, как вы можете его использовать!

Оцените статью
Procodings.ru
Добавить комментарий