0

我正在尝试从订阅(DEV-Subscription)中的另一个 Azure 容器注册表(DEV-ACR)中提取订阅(QA-Subscription)的(QA-ACR)中的 docker 映像。

下面是详细的步骤。

  1. 在 Subscription DEV-Subscription 中创建了 docker 镜像(例如:docker-image-sample)

  2. 在 Subscription DEV-Subscption 中使用以下命令创建了 secret 文件

    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 中提取 docker 映像。

  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 失败。问题是“退出拉动图像......”

4

1 回答 1

0

由于您使用的是 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完全删除。

于 2020-08-15T16:23:28.557 回答