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

Kubernetes配置自建Gitlab私有镜像仓库遇403禁止错误

Kubernetes拉取自建Gitlab私有镜像报403 Forbidden的排查与解决

核心问题分析

从你提供的配置文件来看,有几个明显错误直接导致了权限拒绝:

  • 镜像仓库地址不匹配:Deployment里的镜像域名是private-registry.gitlab.com,但docker/config.json里配置的认证域名是gitlab-registry.al.rn.leg.br,两者不一致导致K8s找不到对应拉取凭证。
  • Secret类型错误:当前Secret的type是Opaque,但镜像拉取专用Secret必须设置为kubernetes.io/dockerconfigjson,否则K8s不会将其识别为镜像认证凭证。
  • 可能存在base64编码不规范、Gitlab账号权限不足的问题。

分步修复方案

1. 统一镜像仓库域名

修改docker/config.json,将认证的仓库域名改成和Deployment里镜像完全一致的地址:

{
  "auths": {
    "private-registry.gitlab.com": { 
      "username": "你的Gitlab用户名",
      "password": "你的Gitlab个人访问令牌(推荐用PAT,而非账号密码)"
    }
  }
}

提示:如果自建Gitlab镜像仓库带端口(比如gitlab.example.com:5050),域名必须完全包含端口,和镜像地址保持一致。

2. 修正Secret配置

更新secrets.yml,调整类型并确保base64编码正确:

apiVersion: v1
kind: Secret
metadata:
  name: regcred
  namespace: ns-app
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: <执行`cat docker/config.json | base64 -w 0`得到的编码字符串>

注意:-w 0参数用于避免编码结果换行,防止YAML解析出错。

3. 确认Gitlab账号权限

  • 如果使用个人访问令牌(PAT),必须勾选read_registry权限;
  • 确保该账号在Gitlab对应项目中拥有Developer及以上权限,或被明确授予镜像仓库的读取权限。

4. 重新部署资源

执行以下命令更新Secret并重启Deployment:

# 删除旧Secret
kubectl delete secret regcred -n ns-app
# 创建新Secret
kubectl apply -f secrets.yml
# 重启Deployment触发镜像拉取
kubectl rollout restart deployment app -n ns-app

额外排查方向

  • 检查K8s节点网络:在节点上执行curl -v https://private-registry.gitlab.com/v2/,确认能正常访问仓库;若使用自签证书,需在节点上配置信任。
  • 查看Pod事件:kubectl describe pod <Pod名称> -n ns-app,从事件日志中确认是否存在其他隐藏问题(如证书不被信任、仓库路径错误)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:57:45