web-dev-qa-db-ja.com

HelmチャートのデプロイとプライベートDockerリポジトリ

画像がたくさんあるプライベート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/[バージョン]:無許可:認証が必要です

4
Jayp

ヘルムチャートの出力によって異なります。 helm templateを使用すると、実際にデプロイせずに、結果のkubernetesリソースを確認できます。プライベートDockerレジストリのイメージを使用するには、次の2つのステップがあります。

  1. プライベートリポジトリに secret resource があることを確認してください。ここでのタイプはkubernetes.io/dockerconfigjsonまたはkubernetes.io/dockercfgであることに注意してください。

    Helmのテンプレートを使用してこれを作成する方法について説明します here

  2. 以下に示すように、そのプライベートリポジトリのイメージを使用するポッドでそのシークレットを参照してください。

ポッドのリソース/テンプレート:

spec:
  containers:
  - name: some-pod
    image: <image>
  imagePullSecrets:
  - name: <name-of your secret>

最初にヘルムなしでリソースを手動で構築できます。これは、リソース自体が正しいことを確認するのに役立ちます。次に、helmテンプレートを調整して、値を指定して正しいリソースを出力できます。

7

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>
4
Stefan Asseg