升级到Kubernetes v1.6后,从GitLab私有注册表中提取容器映像失败

时间:2017-06-02 14:13:53

标签: kubernetes gitlab

我已经设置了一个Kubenetes集群来从GitLab私有存储库的注册表中提取容器映像。

当我使用gitlab-ci.yml构建图像时 - 我可以使用它成功登录注册表:

before_script:
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY

部署到我的Kubernetes集群时,我会产生一个秘密:

- kubectl create secret -n $KUBE_NAMESPACE docker-registry gitlab-registry \
  --docker-server="$CI_REGISTRY" \
  --docker-username="$CI_REGISTRY_USER" \
  --docker-password="$CI_REGISTRY_PASSWORD" \
  --docker-email="$GITLAB_USER_EMAIL" \
  -o yaml --dry-run | kubectl replace -n $KUBE_NAMESPACE --force -f -

然后我使用imagePullSecrets在我的部署脚本中引用此秘密。当我的集群是v1.5时,这很好用。但是,由于我升级到v1.6,我无法拉出容器图像。

我在Kubernetes控制台中遇到的错误是:

Failed to pull image "registry.gitlab.com/user/repo:branch": 
rpc error: code = 2 desc = unauthorized: HTTP Basic: Access denied
Error syncing pod, skipping: failed to "StartContainer" for "helm-chart" with 
ErrImagePull: "rpc error: code = 2 desc = unauthorized: HTTP Basic: Access denied"

为了测试,我尝试在自己的PC上运行以下命令:

docker login registry.gitlab.com

当我输入我的GitLab用户名和密码时,一切都很好。但是,如果我尝试以下内容:

docker login \
  -u "gitlab-ci-token" \
  -p "the-auth-code-in-my-secret" \
  registry.gitlab.com

我收到以下错误:

Error response from daemon: Get https://registry.gitlab.com/v2/:
unauthorized: HTTP Basic: Access denied

我不确定这是GitLab问题还是Kubernetes问题。我只是做错了吗?

1 个答案:

答案 0 :(得分:2)

事实证明,这是一个时间问题。我的部署脚本正在创建Kubernetes对象并且无需等待即可完成。因为这在过去有效,所以我认为部署脚本完成后$CI_REGISTRY_PASSWORD仍然有效。

我认为它工作的事实只是巧合(我的Kubernetes集群必须在CI管道清理其资源之前拉出容器)。将以下行添加到`gitlab-ci.yml':

- kubectl rollout status -n "$KUBE_NAMESPACE" -w "deployment/name"

我不再收到" HTTP Basic:拒绝访问"消息