无法将映像从远程 Gitlab 注册表拉取到 Kubernetes

Pen*_*n74 7 docker gitlab-ci kubernetes

我一直在尝试创建 docker 映像到 Kubernetes 集群的部署,但没有成功,我的部署.yaml 如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: application-deployment
  labels:
    app: application
spec:
  serviceAccountName: gitlab
  automountServiceAccountToken: false
  containers:
  - name: application
    image: example.org:port1/foo/bar:latest
    ports:
      - containerPort: port2
  volumes:
    - name: foo
      secret:
        secretName: regcred
Run Code Online (Sandbox Code Playgroud)

但它无法获取图像。

无法提取图像“example.org:port1/foo/bar:latest”:rpc 错误:代码 = 未知 desc = 来自守护程序的错误响应:获取https://example.org:port1/v2/foo/bar/manifests/最新:拒绝:访问被禁止

中使用的秘密deployment.yaml是这样创建的:

kubectl create secret docker-registry regcred --docker-server=${CI_REGISTRY} --docker-username=${CI_REGISTRY_USER} --docker-password=${CI_REGISTRY_PASSWORD} --docker-email=${GITLAB_USER_EMAIL}
Run Code Online (Sandbox Code Playgroud)

尝试#1:添加 imagePullSecrets

...
imagePullSecrets:
  - name: regcred
Run Code Online (Sandbox Code Playgroud)

结果是:

无法提取图像“example.org:port1/foo/bar:latest”:rpc 错误:代码 = 未知 desc = 来自守护程序的错误响应:获取https://example.org:port1/v2/foo/bar/manifests/最新:未经授权:HTTP 基本:访问被拒绝

解决方案:

我已在“设置”>“存储库”>“部署令牌”>下创建了部署令牌(创建了一个具有 read_registry 范围的令牌)

并将给定值添加到环境变量中,适当的行现在看起来像:

kubectl create secret docker-registry regcred --docker-server=${CI_REGISTRY} --docker-username=${CI_DEPLOY_USER} --docker-password=${CI_DEPLOY_PASSWORD}
Run Code Online (Sandbox Code Playgroud)

我从教程和 Gitlab 文档中得到了有问题的行,他们在其中描述了部署令牌,但在示例中进一步使用了有问题的行。

Mar*_* K. 5

我重现了您的问题,问题在于您在创建存储库的秘密时使用的密码。为 gitlab 存储库创建机密时,您必须使用在 gitlab 中创建的个人令牌而不是密码。

您可以通过转至创建令牌Settings -> Access Tokens。然后,您必须为令牌选择名称、到期日期和令牌范围。

然后像以前一样通过运行创建一个秘密

kubectl create secret docker-registry regcred --docker-server=$docker_server --docker-username=$docker_username --docker-password=$personal_token
Run Code Online (Sandbox Code Playgroud)

创建 pod 时,您必须包含

  imagePullSecrets:
  - name: regcred
Run Code Online (Sandbox Code Playgroud)