Partilhar via


Implementar a partir do registo de contentor privado no Kubernetes no local com o Azure Container Registry e o AKS Arc

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

Este artigo descreve como implementar imagens de contentor a partir de um registo de contentor privado com Azure Container Registry, que pode executar no seu próprio datacenter em implementações do AKS Arc. Implementa no cluster do Kubernetes no local alojado pelo AKS. O Azure Container Registry permite-lhe criar, armazenar e gerir imagens e artefactos de contentor num registo privado para todos os tipos de implementações de contentor.

O artigo descreve como criar um registo de contentor privado no Azure e enviar a imagem de contentor para o registo de contentor privado. Em seguida, pode implementar a partir do registo privado no cluster do Kubernetes no local alojado no AKS Arc.

Para obter mais informações sobre Azure Container Registry, veja a documentação do Azure Container Registry.

Pré-requisitos

Verifique se tem os seguintes requisitos:

Criar um registo de contentor privado no Azure

Para criar um registo de contentor, comece com um grupo de recursos. Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos. Crie um grupo de recursos com o comando az group create. O exemplo seguinte cria um grupo de recursos na região eastus :

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

Crie uma instância do Container Registry com o comando az acr create e forneça o seu próprio nome de registo. O nome do registo tem de ser exclusivo no Azure e conter 5 a 50 carateres alfanuméricos. No resto deste artigo, <acrName> é utilizado como um marcador de posição para o nome do registo de contentor, mas pode fornecer o seu próprio nome de registo exclusivo. O SKU Básico é um ponto de entrada otimizado para custos para fins de desenvolvimento que fornece um equilíbrio de armazenamento e débito:

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

Depois de criar o registo de contentor, utilize o seguinte comando para criar um principal de serviço, para que possa aceder ao seu registo de contentor a partir 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>

Azure Container Registry suporta três funções de acesso. A função Contribuidor é utilizada mais frequentemente pelos programadores de aplicações. No entanto, em cenários do mundo real, poderá ter de criar vários principais de serviço, consoante o tipo de acesso necessário:

  • Contribuidor: esta função oferece acesso push e pull ao repositório.
  • Leitor: esta função só permite o acesso pull ao repositório.
  • Proprietário: esta função permite-lhe atribuir funções a outros utilizadores, além do acesso push e pull ao repositório.

O comando anterior deve produzir um resultado semelhante ao seguinte texto:

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

Assim que o principal de serviço for criado com êxito, copie o appId e a palavra-passe numa localização segura para utilizar mais tarde na sua implementação.

Para obter mais informações sobre como trabalhar com os principais de serviço e o Azure Container Registry, veja Azure Container Registry authentication with service principals (Autenticação do Azure Container Registry com principais de serviço).

Iniciar sessão no registo de contentor privado

Para utilizar a instância do Container Registry, primeiro tem de iniciar sessão. Pode utilizar a CLI do Azure ou a CLI do Docker para iniciar sessão.

Opção 1: iniciar sessão a partir da CLI do Azure

Utilize o comando az acr sign in e forneça o nome exclusivo atribuído ao registo de contentor no passo anterior:

az acr login --name <REGISTRY_NAME>

Opção 2: iniciar sessão a partir da CLI do Docker

Para utilizar a CLI do Docker para aceder ao seu registo de contentor, escreva o seguinte comando num 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 devolver uma mensagem de início de sessão bem-sucedida quando for concluída.

Enviar uma imagem para o registo de contentor

Depois de iniciar sessão com êxito, pode começar a enviar a imagem para o Container Registry. Primeiro, execute o comando docker images para ver a lista de imagens no seu 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, identifique a imagem com o comando docker e, em seguida, utilize o tag docker push para enviá-la para o registo de contentor:

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

Verifique se a imagem foi etiquetada corretamente ao executar novamente o comando docker images. Depois de confirmar, execute docker push para enviar para o registo de contentor, da seguinte forma:

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

Para confirmar que a imagem foi enviada com êxito para o registo de contentor, execute o seguinte comando:

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

Implementar uma imagem do registo de contentor no AKS

Para implementar a imagem de contentor do registo de contentor no cluster do Kubernetes, crie Segredos do Kubernetes para armazenar as suas credenciais de registo. O Kubernetes utiliza um segredo de extração de imagens para armazenar as informações necessárias para efetuar a autenticação no seu registo. Para criar o segredo de solicitação para um registo de contentor, forneça o ID do principal de serviço, a palavra-passe e o URL do registo:

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

A tabela seguinte descreve os parâmetros de entrada:

Valor Descrição
secret-name Nome da imagem solicita segredo; por exemplo, acr-secret.
namespace Espaço de nomes do Kubernetes no qual pretende colocar o segredo. Só é necessário se quiser colocar o segredo num espaço de nomes que não seja o espaço de nomes predefinido.
<REGISTRY_NAME> Nome do registo de contentor. Por exemplo, myregistry. É --docker-server o nome completamente qualificado do servidor de início de sessão do registo.
appId ID do principal de serviço que o Kubernetes utiliza para aceder ao seu registo.
password Palavra-passe do principal de serviço.

Depois de criar o segredo de extração de imagens, pode utilizá-lo para criar pods e implementações do Kubernetes. Indique o nome do segredo imagePullSecrets em no ficheiro de implementação, conforme mostrado no exemplo seguinte:

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 solicitar do registo de contentor e acr-secret é o nome do segredo pull que criou para aceder ao registo. Quando implementa o pod, o Kubernetes extrai automaticamente a imagem do seu registo se a imagem ainda não estiver presente no cluster.

Pode guardar a configuração do pod acima num ficheiro como pod-example.yaml e, em seguida, implementá-la no Kubernetes, da seguinte forma:

kubectl create -f pod-example.yaml

Para confirmar que o pod foi criado com êxito com a imagem de contentor do registo de contentor, execute kubectl describe pod <POD_NAME>, que deve mostrar a imagem de contentor utilizada para criar o pod.

Passos seguintes