如何解决从另一个具有不同订阅的Azure容器存储库ACR引用Docker映像
我正在尝试从订阅(DEV-Subscription)中的另一个Azure容器注册表(DEV-ACR)中拉出订阅(QA-Subscription)中(QA-ACR)中的docker映像。
下面是详细步骤。
-
在Subscription DEV-Subscription中创建docker映像(例如:docker-image-sample)
-
在Subscription DEV-Subscption中使用以下命令创建了秘密文件
kubectl create secret docker-registry test-secret --docker-server=devsample.azurecr.io --docker-username=**** --docker-password=****
通过引用此机密, -
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
-
我正在尝试从其他订阅中的另一个ACR中提取docker映像。
-
在这里也像上面一样创建了相同的秘密。
-
下面是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
-
Pod从另一个具有不同订阅的ACR失败。问题是“退出拉取图像...”
解决方法
由于使用的是Azure容器注册表,因此与在Kubernetes机密中传递凭据相比,您可能会更容易在容器注册表上分配AKS服务主体权限。
$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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。