我使用 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?或者它会尝试每一个秘密,直到其中一个有效为止?
文档似乎没有涵盖这种情况。任何帮助,将不胜感激!
在源代码中,我发现它只是逐一尝试,并返回第一个成功的。
我不会解释我如何发现这一点的整个过程,但这里有一些解释/证明:
当PullImage函数被调用时,它会获取 docker 注册表凭据并循环遍历它们,尝试逐个获取映像,并返回它发现的第一个不会导致 error 的映像。
| 归档时间: |
|
| 查看次数: |
2252 次 |
| 最近记录: |