我使用Azure Kubernetes服务从Azure容器注册表执行Docker映像部署。部署后,我得到:
Failed to pull image "<reg_name>.azurecr.io/service:latest": [rpc error: code = NotFound desc = failed to pull and unpack image "<reg_name>.azurecr.io/service:latest": failed to resolve reference "<reg_name>.azurecr.io/service:latest": <reg_name>.azurecr.io/service:latest: not found, rpc error: code = Unknown desc = failed to pull and unpack image "<reg_name>.azurecr.io/service:latest": failed to resolve reference "<reg_name>.azurecr.io/service:latest": failed to authorize: failed to fetch anonymous token: unexpected status: 401 Unauthorized]
我创建了服务主体并获取了主体名称和密码(基于:https://anupams.net/using-image-pull-secrets-with-azure-container-registry/),然后我把它放到kubernetes secret中。接下来在我的deployment.yml中,我使用了属性:imagePullSecrets与以前创建的secret。但在部署后仍然无法工作,并且kubectl get pod报告了相同的问题:
service-deployment-cbf49bcd9-vs2jz 0/1 ImagePullBackOff 0 27m
我试着用“docker login”命令和以前创建的服务主体凭证登录--它能用。但在AKS中不行...谢谢你的帮助。
1条答案
按热度按时间c3frrgcw1#
您应该使用利用RBAC的AKS ACR集成,而不是使用带有Kubernetes机密的服务主体。
Microsoft也推荐它:
虽然拉取机密是常用的,但它们会带来额外的管理开销。如果你正在使用Azure Kubernetes服务,我们建议使用其他选项,例如使用群集的托管身份或服务主体来安全地拉取映像,而无需在每个单元上进行额外的imagePullSecrets设置。
你可以通过在此处使用Azure CLI获取现有群集详细信息或在此处创建新群集详细信息来执行此操作。如果你使用Terraform或Bicep,你也可以自己创建角色分配。
地形示例: