私有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
相关产品推荐
相关产品推荐

