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

私有GKE集群无法拉取GitLab私有镜像,求排查操作问题

问题描述

我有一个私有GKE Autopilot集群,集群防火墙规则允许访问互联网,能正常从quay.io和Docker Hub拉取公开镜像,但无法从私有GitLab容器仓库拉取镜像。我已创建kubernetes.io/dockerconfigjson类型的Secret,并在deployment.yaml中配置了镜像拉取密钥。在本地集群使用相同Secret时,可以正常拉取该私有仓库的镜像。目前我通过笔记本电脑将YAML文件部署到GKE集群测试,同时集群上也安装了ArgoCD负责部署工作。

错误信息

Failed to pull image "registry.gitlab.com/my-group/my-project:latest ": rpc error: code = Unknown desc = failed to pull and unpack image "registry.gitlab.com/verity/excel-?calculation-api:latest": failed to copy: httpReadSeeker: failed open: unexpected status code https://registry.gitlab.com/v2/my-group/my-repo/blobs/sha256:: 403 Forbidden

相关配置文件

Docker config.json

{
    "auths": {
        "registry.gitlab.com": {
            "auth": "base64-encoded-creds-in-username:password-format"
        }
    }
}

gitlab-secret.yaml

apiVersion: v1
kind: Secret
type: kubernetes.io/dockerconfigjson
metadata:
  name: gitlab-secret
data:
  .dockerconfigjson: <base-64-string>

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-api
spec:
  selector:
    matchLabels:
      app: my-api
  template:
    metadata:
      labels:
        app: my-api
    spec:
      imagePullSecrets:
      - name: gitlab-secret
      containers:
      - name: my-api
        image: registry.gitlab.com/my-group/my-repo
        imagePullPolicy: Always
        resources:
          limits:
            cpu: 1000m
            memory: 6Gi
          requests:
            cpu: 500m
            memory: 3Gi
        ports:
        - containerPort: 5000

排查方向与可能的错误点

  • Secret命名空间不匹配:检查gitlab-secret所在的命名空间是否与Deployment的命名空间一致。如果Secret在其他命名空间,Deployment无法引用,会导致拉取镜像时无有效凭证,返回403。
  • GitLab凭证权限不足:确认生成Secret的GitLab账号(或个人访问令牌)是否拥有目标镜像仓库的拉取权限。个人访问令牌需要勾选read_registry权限,同时要确保凭证对应正确的仓库,无权限变更。
  • Secret的base64编码错误:手动编码dockerconfigjson时可能出现换行或截断,导致Kubernetes解析凭证失败。建议用命令重新生成Secret,避免手动错误:
    kubectl create secret docker-registry gitlab-secret --docker-server=registry.gitlab.com --docker-username=<你的GitLab用户名> --docker-password=<你的个人访问令牌或密码> --docker-email=<你的邮箱>
    
  • GKE Autopilot网络限制:虽然防火墙允许访问互联网,但GKE Autopilot可能有默认出站规则限制。可以通过临时Pod测试连通性:
    kubectl run -it --rm --image=curlimages/curl curl-test -- curl -v https://registry.gitlab.com/v2/
    
    确认是否能正常返回响应。
  • ArgoCD配置干扰:如果通过ArgoCD部署,需确认ArgoCD使用的ServiceAccount是否能访问gitlab-secret,以及ArgoCD是否覆盖了Deployment的imagePullSecrets配置。检查ArgoCD应用配置,确保镜像拉取密钥被正确传递。
  • 镜像地址不一致:错误信息中出现的镜像地址registry.gitlab.com/verity/excel-?calculation-api:latest与Deployment中的registry.gitlab.com/my-group/my-repo不符,需确认实际部署的YAML是否存在拼写错误,或ArgoCD同步的是其他版本的配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:20:40