You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Red Hat OpenShift中使用ACR令牌作为拉取密钥遇权限问题求助

解决方案:ACR令牌生成拉取密钥失败导致ImagePullBackoff

核心问题定位

你的问题大概率出在令牌用户名格式错误或令牌权限配置不全,不需要额外配置服务主体,ACR令牌本身可直接作为拉取凭证使用。

步骤1:确认ACR令牌的配置正确性

  • 确保令牌处于启用状态
  • 令牌权限必须包含content/read(仅拉取镜像的最小权限)
  • 令牌用户名格式为:{ACR名称}_{令牌名称},而非单纯的ACR名称,这是最易出错的点

步骤2:正确生成令牌的访问密码

使用Azure CLI生成令牌的长期/临时密码:

az acr token credential generate --name <你的令牌名称> --registry <你的ACR名称> --expiration 365d --output tsv

执行后会输出密码值,请妥善保存。

步骤3:正确创建Docker Registry Secret

方法1:用oc命令快速创建

注意用户名必须是{ACR名称}_{令牌名称}:

oc create secret docker-registry scoped-acr-secret \
    --docker-server=<你的ACR名称>.azurecr.io \
    --docker-username=<你的ACR名称>_<你的令牌名称> \
    --docker-password=<步骤2生成的密码> \
    --docker-email=unused

方法2:手动编写Secret YAML

  1. 将用户名和密码拼接后做base64编码:
echo -n "<你的ACR名称>_<你的令牌名称>:<步骤2生成的密码>" | base64
  1. 将编码结果填入以下dockerconfigjson结构:
{"auths":{"<你的ACR名称>.azurecr.io":{"auth":"上面生成的base64字符串"}}}
  1. 将整个json内容做base64编码,填入Secret YAML:
apiVersion: v1
data:
  .dockerconfigjson: <整个json的base64编码值>
kind: Secret
metadata:
  name: scoped-acr-secret
type: kubernetes.io/dockerconfigjson
  1. 应用配置:oc apply -f <secret文件路径>

步骤4:关联Secret到Pod/Deployment

确保你的Deployment配置中引用了这个Secret:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-deployment
spec:
  replicas: 1
  template:
    spec:
      imagePullSecrets:
        - name: scoped-acr-secret
      containers:
        - name: your-container
          image: <你的ACR名称>.azurecr.io/你的镜像:标签

排查验证步骤

  1. 本地测试登录:用生成的令牌用户名和密码执行docker login <你的ACR名称>.azurecr.io,确认能正常登录
  2. 检查令牌权限:执行az acr token show --name <你的令牌名称> --registry <你的ACR名称>,查看permissions下是否包含content/read
  3. 查看Pod事件:执行oc describe pod <你的Pod名称>,检查事件日志中的认证细节,排除其他配置问题

内容的提问来源于stack exchange,提问作者Dom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:12:45