Implantar do registro de contêiner privado no Kubernetes local usando o Registro de Contêiner do Azure e o AKS Arc

Aplica-se a: Azure Stack HCI, versão 23H2

Este artigo descreve como implantar imagens de contêiner de um registro de contêiner privado usando Registro de Contêiner do Azure, que você pode executar em seu próprio datacenter em implantações do AKS Arc. Você implanta em seu cluster kubernetes local hospedado pelo AKS. O Registro de Contêiner do Azure permite criar, armazenar e gerenciar imagens e artefatos de contêiner em um registro privado para todos os tipos de implantações de contêiner.

O artigo descreve como criar um registro de contêiner privado no Azure e efetuar push da imagem de contêiner para o registro de contêiner privado. Em seguida, você pode implantar do registro privado em seu cluster kubernetes local hospedado no AKS Arc.

Para obter mais informações sobre Registro de Contêiner do Azure, consulte a documentação do Registro de Contêiner do Azure.

Pré-requisitos

Verifique se você tem os seguintes requisitos:

Criar um registro de contêiner privado no Azure

Para criar um registro de contêiner, comece com um grupo de recursos. Um grupo de recursos do Azure é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados. Crie um grupo de recursos com o comando az group create. O exemplo a seguir cria um grupo de recursos na região eastus :

az group create --name <RESOURCE_GROUP_NAME> --location eastus

Crie uma instância do Registro de Contêiner com o comando az acr create e forneça seu próprio nome de registro. O nome do registro deve ser exclusivo no Azure e conter de 5 a 50 caracteres alfanuméricos. No restante deste artigo, <acrName> é usado como um espaço reservado para o nome do registro de contêiner, mas você pode fornecer seu próprio nome de registro exclusivo. O SKU Básico é um ponto de entrada com otimização de custo para fins de desenvolvimento que fornece um equilíbrio entre armazenamento e taxa de transferência:

az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic

Depois de criar o registro de contêiner, use o seguinte comando para criar uma entidade de serviço, para que você possa acessar o registro de contêiner do Kubernetes:

az ad sp create-for-rbac /
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RG_NAME>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME> /
--role Contributor /
--name <SERVICE_PRINCIPAL_NAME>

Registro de Contêiner do Azure dá suporte a três funções de acesso. A função Colaborador é usada com mais frequência por desenvolvedores de aplicativos. No entanto, em cenários do mundo real, talvez seja necessário criar várias entidades de serviço, dependendo do tipo de acesso necessário:

  • Colaborador: essa função oferece push e acesso pull para o repositório.
  • Leitor: essa função só permite acesso pull ao repositório.
  • Proprietário: essa função permite que você atribua funções a outros usuários, além do push e acesso pull ao repositório.

O comando anterior deve produzir uma saída semelhante ao seguinte texto:

{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

Depois que a entidade de serviço for criada com êxito, copie a appId e a senha em um local seguro para usar posteriormente em sua implantação.

Para mais informações sobre como trabalhar com entidades de serviço e o Registro de Contêiner do Azure, confira Autenticação do Registro de Contêiner do Azure com entidades de serviço.

Entrar no registro de contêiner privado

Para usar a instância do Registro de Contêiner, primeiro você deve entrar. Você pode usar a CLI do Azure ou a CLI do Docker para entrar.

Opção 1: Entrar na CLI do Azure

Use o comando az acr sign in e forneça o nome exclusivo atribuído ao registro de contêiner na etapa anterior:

az acr login --name <REGISTRY_NAME>

Opção 2: Entrar na CLI do Docker

Para usar a CLI do Docker para acessar o registro de contêiner, digite o seguinte comando em um terminal do Bash ou do PowerShell:

docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>

Em qualquer uma das opções, o comando deve retornar uma mensagem de entrada bem-sucedida quando for concluída.

Enviar uma imagem por push para o registro de contêiner

Depois de fazer logon com êxito, você pode começar a enviar a imagem por push para o Registro de Contêiner. Primeiro, execute o comando docker images para exibir a lista de imagens no computador local:

REPOSITORY TAG IMAGE ID CREATED SIZE

mcr.microsoft.com/azure-functions/dotnet 3.0 9f8ad1bdee67 5 months ago
540MB

poemfinder-app latest 2d9bef425603 6 months ago 208MB

Para começar, marque a imagem usando o comando docker tag e, em seguida, use o docker push para efetuar push dela para o registro de contêiner:

docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0

Verifique se a imagem foi marcada corretamente executando o comando docker images novamente. Depois de confirmar, execute para enviar docker push por push para o registro de contêiner, da seguinte maneira:

docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0

Para confirmar se a imagem foi enviada por push com êxito para o registro de contêiner, execute o seguinte comando:

az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table

Implantar uma imagem do registro de contêiner no AKS

Para implantar sua imagem de contêiner do registro de contêiner no cluster do Kubernetes, crie Segredos do Kubernetes para armazenar suas credenciais do Registro. O Kubernetes usa um segredo de pull de imagem para armazenar as informações necessárias para a autenticação no registro. Para criar o segredo de pull para um registro de contêiner, forneça a ID da entidade de serviço, a senha e a URL do Registro:

kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>

A tabela a seguir descreve os parâmetros de entrada:

Valor Descrição
secret-name Nome do segredo de pull da imagem; por exemplo, acr-secret.
namespace Namespace do Kubernetes no qual colocar o segredo. Necessário somente se você quiser colocar o segredo em um namespace diferente do namespace padrão.
<REGISTRY_NAME> Nome do registro de contêiner. Por exemplo, myregistry. O --docker-server é o nome totalmente qualificado do servidor de entrada do Registro.
appId ID da entidade de serviço que o Kubernetes usa para acessar o registro.
password Senha da entidade de serviço.

Depois de criar o segredo de pull de imagem, você pode usá-lo para criar pods e implantações do Kubernetes. Forneça o nome do segredo imagePullSecrets em no arquivo de implantação, conforme mostrado no exemplo a seguir:

apiVersion: v1
kind: Pod
metadata:
 name: poemfinder-app
 namespace: mydemoapps
spec:
 containers:
  - name: poemfinder-app
    image: <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
    imagePullPolicy: IfNotPresent
 imagePullSecrets:
   - name: acr-secret

Neste exemplo, poemfinder-app:v1.0 é o nome da imagem a ser extraída do registro de contêiner e acr-secret é o nome do segredo de pull que você criou para acessar o registro. Quando você implanta o pod, o Kubernetes efetua pull automaticamente da imagem do registro se a imagem ainda não estiver presente no cluster.

Você pode salvar a configuração de pod acima em um arquivo como pod-example.yaml e implantá-la no Kubernetes da seguinte maneira:

kubectl create -f pod-example.yaml

Para confirmar se o pod foi criado com êxito usando a imagem de contêiner do registro de contêiner, execute kubectl describe pod <POD_NAME>, que deve mostrar a imagem de contêiner usada para criar o pod.

Próximas etapas