【kubernetes】プライベートリポジトリから image を Pull する方法（翻訳）

以下の引用元の手順に沿って作業を行った際のメモになります。
英文に慣れていないため、誤りや誤訳があればコメントください。
「※」マークで翻訳とは別に、メモを残している部分があります。
引用元とは関係ない文章になりますので、ご承知おきください。

引用元
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

===

このページでは、Secret を使用してプライベートな Docker Registry または、リポジトリからイメージを取得し、Pod を作成する方法を示します。

## はじめに

始める前に、Kubernetes cluster と、cluster へ接続・設定済みの kubectl コマンドラインツールがあること。もし、clusterを未作成であれば、Minikube や Kubernetes を利用して clusterを作成してください。

## Docker へのログイン

あなたのPCで、取得したい image が登録されているプライベートリポジトリへ Docker ログインしてください。

```
docker login
```
ユーザー名、パスワードを入力してください。
ログインに成功すると、`config.json`が作成/更新されます。
これには、認証トークン含まれます。

`config.json`を開いてください。 

```
cat ~/.docker/config.json
```

以下の例のような形で出力されます。

```
{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "c3R...zE2"
        }
    }
}
```

注：Docker credentials store を使用している場合、その認証エントリは表示されず、credsStore 項目にはストア名の値が表示されます。
※「Docker credentials store」こちら不勉強でわかりません。
  Dockerとの接続を外部の証明書を利用して接続できるサービスの様ですが、
  詳しい方がいれば、ご教示ください。

## 認証トークンを含めた cluster 接続用 Secret の作成

Kubernetes クラスタは、docker-registry の Secret を使用して container registry で認証し、プライベートイメージを取得します。

Secret を仮名で「regcred」とします。※コマンドの実行時、編集が必要となる項目があります！

```
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
```

括弧は、以下の通り。

- `<your-registry-server>`:接続するプライベートリポジトリのFQDNを記載します。
 (DockerHubの例 https://index.docker.io/v1/)
- `<your-name>`:Dockerのアカウント名を記載します。
- `<your-pword>`:Dockerのアカウント名に紐付くパスワードを入力します。
- `<your-email>`:Dockerのアカウント名に紐付くメールアドレスを入力します。

これで、cluster に「regcred」という名前の Secret を設定したことになります。

## 設定したSecret (regcred) の検証

作成した regcred (Secret) の内容を確認するために、YAML 形式で表示します。

```
kubectl get secret regcred --output=yaml
```

以下の例のような出力結果になります。

```
apiVersion: v1
data:
  .dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
kind: Secret
metadata:
  ...
  name: regcred
  ...
type: kubernetes.io/dockerconfigjson
```

`.dockerconfigjson`フィールドの値は、Docker の資格情報の base64 表現になります。
`.dockerconfigjson`フィールドの内容を理解するには、シークレットデータを読み取り可能な形式に変換します。

```
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
```

以下の例のような出力結果となります。

```
{"auths":{"yourprivateregistry.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}
```

auth フィールドの内容を理解するには、base64 でエンコードされたデータを読み込み可能な形式に変換します。

```
echo "c3R...zE2" | base64 --decode
```

「:」(コロン)で連結されたユーザー名とパスワードが出力されます。

Secret データには、あなたのローカルと同様の認証トークンが含まれています。

```
~/.docker/config.json
```

Docker 資格情報をクラスタ内の「regcred」という Secret として正常に設定しました。

## Secret を使った Pod の作成

以下は、regcred の Docker 資格情報にアクセスする必要がある Pod の設定ファイルです：

```pods/private-reg-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets: 
  - name: regcred
```

上記のファイルをダウンロードしてください：

```
wget -O my-private-reg-pod.yaml https://k8s.io/examples/pods/private-reg-pod.yaml
```

`my-private-reg-pod.yaml`ファイルで、`<your-private-image>`を次のようなプライベートレジストリ内のイメージのパスに置き換えます。

```
janedoe/jdoe-private:v1
```

プライベートリポジトリからイメージを取得するには、Kubernetes に資格情報が必要です。構成ファイル内のimagePullSecretsフィールドは、Kubernetes が、regcred という名前の Secret から資格情報を取得する必要があることを指定します。

Secret を使用するPodを作成し、Pod が実行中であることを確認します。

```
kubectl create -f my-private-reg-pod.yaml
kubectl get pod private-reg
```

引用元
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/