Kubernetes拉取Pod失败 failed with status code [manifests v1]: 401 Unauthorized

Kubernetes拉取Pod失败

该错误消息 “401 Unauthorized” 指示尝试从指定镜像仓库拉取镜像时遇到了身份验证问题。
如果查看Pod的状态会看到:

kubectl get pod -n harbor-private
NAME                                         READY   STATUS             RESTARTS   AGE
harbor-private-deployment-5f98bbd88b-wf4bm   0/1     ImagePullBackOff   0          49m

如果进一步查看Pod Event信息可以看到"pulling from host harbor.example.com failed with status code [manifests v1]: 401 Unauthorized:" 这个错误明确提示了无法拉取镜像的原因是私有镜像仓库无法得到认证。

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  36s                default-scheduler  Successfully assigned harbor-private/harbor-private-deployment-5f98bbd88b-wf4bm to w2
  Normal   Pulling    20s (x2 over 36s)  kubelet            Pulling image "harbor.example.com/yiqi/nginx:v1"
  Warning  Failed     19s (x2 over 36s)  kubelet            Failed to pull image "harbor.example.com/yiqi/nginx:v1": rpc error: code = Unknown desc = failed to pull and unpack image "harbor.example.com/yiqi/nginx:v1": failed to resolve reference "harbor.example.com/yiqi/nginx:v1": pulling from host harbor.example.com failed with status code [manifests v1]: 401 Unauthorized
  Warning  Failed     19s (x2 over 36s)  kubelet            Error: ErrImagePull
  Normal   BackOff    6s (x3 over 35s)   kubelet            Back-off pulling image "harbor.example.com/yiqi/nginx:v1"
  Warning  Failed     6s (x3 over 35s)   kubelet            Error: ImagePullBackOff

方案1:通过创建docker-registry认证信息的Secret解决上述问题

1.使用 kubectl 命令来为 Docker registry 创建一个 Secret:

kubectl create secret docker-registry <secret-name> \
    --docker-server=DOCKER_REGISTRY_SERVER \
    --docker-username=DOCKER_USER \
    --docker-password=DOCKER_PASSWORD \
    --docker-email=DOCKER_EMAIL  #如果没有邮箱地址则随便填一个邮箱即可。

2.在你的 Deployment 资源定义中,你需要在 spec 下的每个容器中指定 imagePullSecrets 来引用上面创建的 Secret。例如:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: harbor-private-deployment
  namespace: harbor-private
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: harbor-private
    spec:
      containers:
      - name: harbor-private-container
        image: harbor.example.com/yiqi/nginx:v1
      imagePullSecrets:
      - name: <secret-name>   #指定之前创建的secret名称
  selector:
    matchLabels:
      app: harbor-private

方案2:修改当前名字空间默认的ServiceAccount为其添加imagePullSecrets

1.使用 kubectl 命令来为 Docker registry 创建一个 Secret:

kubectl create secret docker-registry <secret-name> \
    --docker-server=DOCKER_REGISTRY_SERVER \
    --docker-username=DOCKER_USER \
    --docker-password=DOCKER_PASSWORD \
    --docker-email=DOCKER_EMAIL  #如果没有邮箱地址则随便填一个邮箱即可。

2.可以设置 ServiceAccount,使其默认为 namespace 中的所有 Pods 使用此 Secret,这样当你创建新的 Pod 时,不必为每个 Pod 单独指定 imagePullSecrets。
首先,编辑 ServiceAccount:

kubectl edit serviceaccount default -n <namesapce-name>

#然后,在 ServiceAccount 的定义下添加 imagePullSecrets 字段
imagePullSecrets:
- name: <secret-name>
#保存并退出

对于已经在 namespace 中运行的 Pods,你需要重新创建它们以使用新的 imagePullSecret。你可以先删除这些Pod,然后再重新创建它们,或者更新相关的 Deployment、StatefulSet 等控制器,这样新的 Pods 会自动创建并使用新的 Secret。

之后,在该 namespace 中创建的所有新 Pods 都将默认使用此 imagePullSecret,允许它们从私有仓库拉取镜像。已经存在的 Pods 需要重新创建才能使用新的 imagePullSecret。

### Dify 凭证验证失败 (Status Code 404) 的解决方案 当遇到 `An error occurred during credentials validation: API request failed with status code 404` 错误时,通常表示请求的资源未找到。具体到此错误中的提示 `{“error”:“model “abc” not found, try pulling it first”}`[^4],可以推测问题可能源于指定的模型名称不正确或者该模型尚未被加载。 以下是针对此类问题的具体解决方法: #### 1. 验证模型名称 确认配置文件或代码中使用的模型名称是否正确。如果模型名设置为 `"abc"` 或其他不存在的名字,则需要将其替换为实际支持的模型名称。例如,在使用 OpenRouter 提供的服务时,应查阅官方文档获可用模型列表并更新配置。 ```python config = { 'model': 'deepseek-v3-free', # 替换为正确的模型名称 } ``` #### 2. 下载缺失模型 某些情况下,即使指定了有效的模型名称,仍需手动下载对应模型才能正常运行程序。按照错误消息建议尝试执行操作来完成这一过程: ```bash dify pull deepseek-v3-free ``` 上述命令假设存在名为 `dify` 的 CLI 工具用于管理相关依赖项;如果没有这样的工具,请参照项目文档了解如何通过其他方式同步所需资产。 #### 3. 检查网络连接状态 由于 HTTP 状态码 404 表明服务器端未能定位所请求的内容,因此还需要考虑是否存在临时性的网络中断影响到了数据传输环节。确保设备具备稳定互联网接入能力后再重试先前的操作步骤。 #### 4. 更新 SDK 版本 如果以上措施均无法解决问题,可能是当前安装版本过旧而导致兼容性冲突所致。此时应当升级至最新版SDK以获得更好的功能支持以及修复已知漏洞的能力。 ```bash pip install --upgrade dify-sdk openrouter-python ``` --- ### 总结 综上所述,处理 Dify 中出现的 `Credentials validation failed with status code 404` 主要涉及以下几个方面的工作:校正参数设定、补充必要组件、优化外部条件以及适时调整技术栈构成部分。只有全面排查各个环节潜在隐患之后才能够彻底消除这类异常现象的发生几率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值