画像がたくさんあるプライベート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
ポッドのステータスはInit:ErrImagePullです。 kubectl describe podsで次のエラーが発生します。
イメージ "image:tag"のプルに失敗しました:rpcエラー:コード=不明desc =デーモンからのエラー応答:Get [イメージ]/manifests/[バージョン]:無許可:認証が必要です
ヘルムチャートの出力によって異なります。 helm template
を使用すると、実際にデプロイせずに、結果のkubernetesリソースを確認できます。プライベートDockerレジストリのイメージを使用するには、次の2つのステップがあります。
プライベートリポジトリに secret
resource があることを確認してください。ここでのタイプはkubernetes.io/dockerconfigjson
またはkubernetes.io/dockercfg
であることに注意してください。
Helmのテンプレートを使用してこれを作成する方法について説明します here 。
ポッドのリソース/テンプレート:
spec:
containers:
- name: some-pod
image: <image>
imagePullSecrets:
- name: <name-of your secret>
最初にヘルムなしでリソースを手動で構築できます。これは、リソース自体が正しいことを確認するのに役立ちます。次に、helmテンプレートを調整して、値を指定して正しいリソースを出力できます。
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.image.imageCredentials。*ではなく、.Values.imageCredentials。*を参照します。
また、追加する必要があります
imagePullSecrets:
- name: {{ .Values.imageCredentials.name }}
プライベートレジストリからイメージをプルするテンプレート(ポッドやデプロイメントなど)に。そして、スニペットで定義されていない.Values.imageCredentials.nameを参照しているため、次のように追加する必要があります。
image:
repository: <repo>
tag: <version tag>
pullPolicy: IfNotPresent
imageCredentials:
name: <registry_name>_credentials
registry: <repo>
username: <username>
password: <pw>