Kubernetes 部署中同一 URL 的多个 imagePullSecret

Que*_*tte 4 gitlab kubernetes

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

问题是,部署有一个imagePullSecrets引用多个 Secret 的全局列表。这些 Secret 本质上持有不同的凭据(每个 GitLab 容器注册表一个),但共享相同的 Docker 注册表 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
Run Code Online (Sandbox Code Playgroud)

秘密 1(秘密项目一):

{
  "auths": {
    "https://gitlab.company.com": {
      "username": "project_111_bot",
      "password": "password-project-one",
      "auth": "Password"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

{
  "auths": {
    "https://gitlab.company.com": {
      "username": "project_222_bot",
      "password": "password-project-two",
      "auth": "Password"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*att 5

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

我不会解释我如何发现这一点的整个过程,但这里有一些解释/证明:

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