我有一堆带有图片的私人Docker仓库。我正在使用Helm将它们部署到Kubernetes集群。
Helm values.yaml包含存储库凭据:
image:
repository: <repo>
tag: <version tag>
pullPolicy: IfNotPresent
imageCredentials:
registry: <repo>
username: <username>
password: <pw>
执行掌舵安装后
helm install myhelmchart --values values.yaml --version
pod的状态为Init:ErrImagePull。 kubectl describe pods给出了这个错误:
无法提取图像&#34;图像:标记&#34;:rpc错误:代码=未知desc = 来自守护程序的错误响应:获取[image] / manifests / [version]: 未经授权:需要身份验证
答案 0 :(得分:3)
这取决于掌舵图的输出。您可以使用helm template
查看生成的kubernetes资源,而无需实际部署它。使用私有docker注册表中的映像分为两个步骤:
确保私有存储库有secret
resource。请注意,此处的类型为kubernetes.io/dockerconfigjson
或kubernetes.io/dockercfg
。
如何使用helm中的模板创建此文件,请参阅here。
Pod资源/模板:
spec:
containers:
- name: some-pod
image: <image>
imagePullSecrets:
- name: <name-of your secret>
您可以先手动构建资源而无需掌舵。这有助于验证资源本身是否正确。然后,您可以调整helm模板,以根据您的值输出正确的资源。
答案 1 :(得分:2)
imageCredentials需要处于根级别,如下所示:
image:
repository: <repo>
tag: <version tag>
pullPolicy: IfNotPresent
imageCredentials:
registry: <repo>
username: <username>
password: <pw>
,因为
{{- define "imagePullSecret" }}
{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.imageCredentials.registry (printf "%s:%s" .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}
{{- end }}
引用.Values.imageCredentials。*而不是.Values.image.imageCredentials。*。
此外,您还需要添加
imagePullSecrets:
- name: {{ .Values.imageCredentials.name }}
到从私有注册表中提取图像的模板(例如pod或部署)。因为它引用了.Values.imageCredentials.name,它没有在你的代码片段中定义,你需要添加它,如下所示:
image:
repository: <repo>
tag: <version tag>
pullPolicy: IfNotPresent
imageCredentials:
name: <registry_name>_credentials
registry: <repo>
username: <username>
password: <pw>