0

嘿,我正在创建一个 gitlab 管道,我有 2 个阶段:staging 和 qa。对于 staging 我使用 gitlabsauto-deploy脚本,对于 qa 我使用自定义脚本。

随着分期管道的工作。对于 qa,容器注册表告诉我用户名/密码错误:

Events:
  Type     Reason     Age                   From               Message
  ----     ------     ----                  ----               -------
  Warning  Failed     4m48s (x4 over 6m9s)  kubelet            Failed to pull image "<container-url>": rpc error: code = Unknown desc = unable to retrieve auth token: invalid username/password: unauthorized: HTTP Basic: Access denied
  Warning  Failed     4m48s (x4 over 6m9s)  kubelet            Error: ErrImagePull
  Normal   BackOff    4m8s (x7 over 6m8s)   kubelet            Back-off pulling image "<container-url>"
  Warning  Failed     64s (x20 over 6m8s)   kubelet            Error: ImagePullBackOff

在管道期间,我正在为注册表创建一个包含登录详细信息的秘密。两个管道都使用以下方法创建它:

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

由于我没有部署令牌,因此默认为username=$CI_REGISTRY_USERand password=$CI_REGISTRY_PASSWORD。我仔细检查过,在各自的命名空间中有一个秘密。除了密码之外,这两个秘密都是相同的,每次运行管道时都会生成密码(据我所知)。

最后,我将秘密放入部署文件中:

spec: 
  template:
    spec:
      imagePullSecrets:
        - <name-of-secret>

所以这应该让我可以访问容器注册表,但它给了我上面的错误。它可以正常工作auto-deploy但不适合我的原因是什么?秘密是以相同的方式创建的,因此它应该产生相同的结果。

谢谢你的帮助 :)

编辑:
我在下添加了一个部署令牌project > settings > repository > deploy tokens并调用它gitlab-deploy-token。它拥有所有权限,并且其登录详细信息通过$CI_DEPLOY_USER和传递给管道$CI_DEPLOY_PASSWORD

pod 中的错误更改为:

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  ...
  Warning  Failed     13m (x4 over 15m)  kubelet            Failed to pull image "<image-url>": rpc error: code = Unknown desc = Error reading manifest <container-tag> in <registry-url> errors: denied: requested access to the resource is denied unauthorized: authentication required

根据gitlab 文档,我应该能够使用buildah login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY. 但是当我在登录和退出注册表的阶段这样做时,我得到:

error authenticating creds for "<registry>": pinging docker registry returned: Get <link>: net/http: TLS handshake timeout

链接是一个 json 文件:

errors: 
   0:   
      code:     "UNAUTHORIZED"
      message:  "authentication required"
      detail:   null

由于我提供了用户名和密码,并且错误不会抱怨它们不匹配,我假设这是有效的。但是为什么认证仍然没有通过呢?是否还需要进行身份验证?也许一些证书?

auto-deploy现在也在使用的暂存管道(带有 的)gitlab-deploy-token仍然有效。

4

1 回答 1

1

您生成的密钥 ($CI_REGISTRY_PASSWORD) 仅在特定作业期间有效。所以工作完成的那一刻密码是无效的。

使用部署令牌。

于 2021-12-13T17:49:11.937 回答