Ссылка на образ докера из другого репозитория контейнеров Azure (ACR) другой подписки

Я пытаюсь получить образ докера в (QA-ACR) подписки (QA-Subscription) из другого реестра контейнеров Azure (DEV-ACR) в подписке (DEV-Subscription).

Ниже приведены подробные инструкции.

  1. Создал образ докера (пример: docker-image-sample) в подписке DEV-Subscription

  2. Создал секретный файл с помощью следующей команды в Subscription DEV-Subscption

    kubectl create secret docker-registry test-secret --docker-server=devsample.azurecr.io --docker-username=**** --docker-password=****
    
  3. Pod работает в DEV-подписке по этому секрету. ниже находится файл развертывания

     apiVersion: apps/v1beta1
     kind: Deployment
     metadata:
       name: test  
     spec:
       replicas: 2
       template:
         metadata:
           labels:
             app: test
         spec:
           containers:
           - image: devsample.azurecr.io/test_msdi:latest
             imagePullPolicy: Always
             name: test
             ports:
             - containerPort: 443
             env:
             - name: ASPNETCORE_ENVIRONMENT
               value: dev
           imagePullSecrets:
           - name: test-secret
    
  4. Я пытаюсь вытащить образ докера из другого ACR в другой подписке.

  5. Создан такой же секрет здесь, как и выше.

  6. Ниже представлено содержимое файла развертывания Kubernetes.

     apiVersion: apps/v1beta1
     kind: Deployment
     metadata:
       name: test  
     spec:
       replicas: 2
       template:
         metadata:
           labels:
             app: test
         spec:
           containers:
           - image: devsample.azurecr.io/test_msdi:latest
             imagePullPolicy: Always
             name: test
             ports:
             - containerPort: 443
             env:
             - name: ASPNETCORE_ENVIRONMENT
               value: qa
           imagePullSecrets:
           - name: test-secret
    
  7. Pod выходит из строя из-за другого ACR другой подписки. Проблема: Отказ от получения изображения ...


person Anandaraj    schedule 14.08.2020    source источник


Ответы (1)


Поскольку вы используете реестр контейнеров Azure, вам может быть проще назначить разрешения субъекта-службы AKS в реестре контейнеров, чем полагаться на передачу учетных данных с использованием секрета Kubernetes.

$Aks = Get-AzAks -ResourceGroupName QaSubscriptionAksResourceGroup -Name QaSubscriptionAks
New-AzRoleAssignment -ApplicationId $Aks.ServicePrincipalProfile.ClientId -RoleDefinitionName AcrPull -ResourceGroupName DevSubscriptionAcrResourceGroup

Вам может потребоваться выполнить Select-AzSubscription между двумя командами, чтобы перейти с подписки QA на подписку DEV. Как только это настроено, удалите

imagePullSecrets:
- name: test-secret

из вашего файла развертывания и перезапустите его.

В зависимости от того, как были развернуты ваши экземпляры AKS, вы можете обнаружить, что участникам служб AKS уже назначена роль AcrPull в их собственных подписках. В этом случае вы можете полностью удалить imagePullSecrets.

person Nick Graham    schedule 15.08.2020