1

我使用 GitLab 的自托管实例来存储我的 Docker 图像。由于我们最近设置了项目访问令牌,因此我们希望使用每个注册表的单独机密在 AKS 上提取图像。这意味着我们对“同一个注册表”中的每个图像都有特定的凭据。

问题是,部署有一个imagePullSecrets引用多个秘密的全局列表。而那些本质上持有不同凭证(每个 GitLab Container Registry 一个)的 Secrets 共享相同的 Docker Registry URL!

简而言之,这里是一个示例部署:

spec:
  template:
    spec:
      containers:
        - name: one
          image: 'gitlab.company.com/project-one:1.0.0'
        - name: two
          image: 'gitlab.company.com/project-two:1.2.0'
      imagePullSecrets:
        - name: secret-project-one
        - name: secret-project-two

秘密 1(秘密项目一):

{
  "auths": {
    "https://gitlab.company.com": {
      "username": "project_111_bot",
      "password": "password-project-one",
      "auth": "Password"
    }
  }
}

还有秘密 2(秘密项目二):

{
  "auths": {
    "https://gitlab.company.com": {
      "username": "project_222_bot",
      "password": "password-project-two",
      "auth": "Password"
    }
  }
}

Kubernetes 应该如何区分使用哪个 Secret?它是否假设您有不同的 URL,并且会根据图像名称匹配正确的 Secret?或者它会尝试每一个秘密,直到一个成功?

文档似乎没有涵盖这种情况。任何帮助,将不胜感激!

4

1 回答 1

2

在源代码中,我发现它只是一个一个地尝试,并返回第一个成功的。

我不打算解释我如何找到这个的整个过程,但这里有一些解释/证明:

PullImage函数被调用时,它会获取 docker注册表凭据遍历它们以逐个尝试获取图像,并返回它发现的第一个不会导致错误的图像。

于 2021-04-13T12:50:20.863 回答