Skip to content

Commit 44ae714

Browse files
authored
[ja] Translate docs/tasks/configure-pod-container/pull-image-private-registry.md (#48966)
* [ja] Translate docs/tasks/configure-pod-container/pull-image-private-registry.md * [ja] Apply suggestions from PR review
1 parent 4fdc1a7 commit 44ae714

File tree

1 file changed

+233
-0
lines changed

1 file changed

+233
-0
lines changed
Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
---
2+
title: イメージをプライベートレジストリから取得する
3+
weight: 130
4+
---
5+
6+
<!-- overview -->
7+
8+
このページでは、{{< glossary_tooltip text="Secret" term_id="secret" >}}を用いるPodを作成するためにイメージをプライベートコンテナイメージレジストリもしくはリポジトリから取得する方法について説明します。
9+
多くのプライベートレジストリが存在しますが、このタスクでは[Docker Hub](https://www.docker.com/ja-jp/products/docker-hub/)をレジストリの一例として使用します。
10+
11+
{{% thirdparty-content single="true" %}}
12+
13+
## {{% heading "prerequisites" %}}
14+
15+
* {{< include "task-tutorial-prereqs.md" >}}
16+
17+
* この演習を行うためには、`docker`コマンドラインツールと自身の[Docker ID](https://docs.docker.com/accounts/create-account/)が必要です。
18+
* 別のプライベートコンテナレジストリを使用している場合は、そのレジストリのコマンドラインツールとログイン情報が必要です。
19+
20+
<!-- steps -->
21+
22+
## Docker Hubにログインする
23+
24+
ラップトップ(ローカル環境)上では、プライベートイメージを取得するためにレジストリに認証する必要があります。
25+
26+
`docker`ツールを使用してDocker Hubにログインしてください。詳細は[Docker IDアカウント](https://docs.docker.com/accounts/create-account/#sign-in)_Sign in_ セクションを参照してください。
27+
28+
```shell
29+
docker login
30+
```
31+
32+
プロンプトが表示されたら、Docker IDと使用したい認証情報(アクセストークンまたはDocker IDのパスワード)を入力してください。
33+
34+
ログインプロセスは、認証トークンを保持する`config.json`ファイルを作成または更新します。[Kubernetesがこのファイルを解釈する方法](/ja/docs/concepts/containers/images#config-json)を確認してください。
35+
36+
以下のように`config.json`ファイルを確認します:
37+
38+
```shell
39+
cat ~/.docker/config.json
40+
```
41+
42+
出力には以下のような部分が含まれています:
43+
44+
```json
45+
{
46+
"auths": {
47+
"https://index.docker.io/v1/": {
48+
"auth": "c3R...zE2"
49+
}
50+
}
51+
}
52+
```
53+
54+
{{< note >}}
55+
Dockerの認証情報ストアを使用している場合、`auth`エントリの代わりに、ストア名を値とする`credsStore`エントリが表示されます。
56+
この場合、Secretを直接作成できます。
57+
[コマンドライン上で認証情報を入力してSecretを作成する](#create-a-secret-by-providing-credentials-on-the-command-line)を参照してください。
58+
{{< /note >}}
59+
60+
## 既存の認証情報を用いるSecretを作成する {#registry-secret-existing-credentials}
61+
62+
Kubernetesクラスターはプライベートイメージを取得するためのレジストリとの認証に`kubernetes.io/dockerconfigjson`タイプのSecretを使用します。
63+
64+
既に`docker login`を実行済みの場合、その認証情報をKubernetesにコピーできます:
65+
66+
```shell
67+
kubectl create secret generic regcred \
68+
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
69+
--type=kubernetes.io/dockerconfigjson
70+
```
71+
72+
新しいSecretをカスタマイズする必要がある場合(例えば、新しいSecretにNamespaceやLabelを設定する場合)は、保存する前にSecretをカスタマイズできます。
73+
必ず以下を行ってください:
74+
75+
- `data`項目の名前を`.dockerconfigjson`に設定する
76+
- Dockerの設定ファイルをbase64エンコードし、その文字列を分割せずに`data[".dockerconfigjson"]`の値として貼り付ける
77+
- `type``kubernetes.io/dockerconfigjson`に設定する
78+
79+
Secretをカスタマイズする場合のマニフェストの例:
80+
81+
```yaml
82+
apiVersion: v1
83+
kind: Secret
84+
metadata:
85+
name: myregistrykey
86+
namespace: awesomeapps
87+
data:
88+
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
89+
type: kubernetes.io/dockerconfigjson
90+
```
91+
92+
`error: no objects passed to create`をエラーメッセージとして受け取った場合、base64エンコードされた文字列が無効である可能性があります。
93+
`Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...`をエラーメッセージとして受け取った場合は、`data`内のbase64エンコードされた文字列は正常にデコードされたものの、`.docker/config.json`ファイルとして読み込むことができなかったことを意味します。
94+
95+
## コマンドライン上で認証情報を入力してSecretを作成する {#create-a-secret-by-providing-credentials-on-the-command-line}
96+
97+
このSecretを`regcred`という名前で作成します:
98+
99+
```shell
100+
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
101+
```
102+
103+
ここでは:
104+
105+
* `<your-registry-server>`は、プライベートDockerレジストリのFQDN(完全修飾ドメイン名)です。
106+
Docker Hubを使用する場合は、`https://index.docker.io/v1/`を設定して下さい。
107+
* `<your-name>`は、Dockerのユーザー名です。
108+
* `<your-pword>`は、Dockerのパスワードです。
109+
* `<your-email>`は、Dockerのメールアドレスです。
110+
111+
Dockerレジストリの認証情報がSecretとして`regcred`という名前でクラスターに正常に設定されました。
112+
113+
{{< note >}}
114+
コマンドラインで認証情報を入力すると、認証情報が保護されていない状態でシェルの履歴に保存される可能性があり、また`kubectl`実行中はPCの他のユーザーがそれらの認証情報を閲覧できる可能性があります。
115+
{{< /note >}}
116+
117+
## `regcred`Secretを確認する
118+
119+
作成した`regcred`Secretの内容を理解するために、まずYAML形式でSecretを表示します:
120+
121+
```shell
122+
kubectl get secret regcred --output=yaml
123+
```
124+
125+
出力は以下のようになります:
126+
127+
```yaml
128+
apiVersion: v1
129+
kind: Secret
130+
metadata:
131+
...
132+
name: regcred
133+
...
134+
data:
135+
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
136+
type: kubernetes.io/dockerconfigjson
137+
```
138+
139+
`.dockerconfigjson`フィールドの値は、Docker認証情報をbase64でエンコードしたものです。
140+
141+
`.dockerconfigjson`フィールドの内容を理解するために、認証情報のデータを読解可能な形式に変換します:
142+
143+
```shell
144+
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
145+
```
146+
147+
出力は以下のようになります:
148+
149+
```json
150+
{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}
151+
```
152+
153+
`auth`フィールドの内容を理解するために、base64エンコードされたデータを読解可能な形式に変換します:
154+
155+
```shell
156+
echo "c3R...zE2" | base64 --decode
157+
```
158+
159+
出力はユーザー名とパスワードが`:`で連結された以下のような形式になります:
160+
161+
```none
162+
janedoe:xxxxxxxxxxx
163+
```
164+
165+
Secretの`data`には、ローカルの`~/.docker/config.json`ファイルと同様の認証トークンが含まれていることが分かります。
166+
167+
クラスターに`regcred`という名前のSecretとしてDockerの認証情報が正常に設定されました。
168+
169+
## 作成したSecretを利用するPodを作成する
170+
171+
以下は`regcred`という名前のDockerの認証情報へのアクセスが必要なPodのマニフェストの例です:
172+
173+
{{% code_sample file="pods/private-reg-pod.yaml" %}}
174+
175+
上記のファイルをあなたのコンピューターにダウンロードします:
176+
177+
```shell
178+
curl -L -o my-private-reg-pod.yaml https://k8s.io/examples/pods/private-reg-pod.yaml
179+
```
180+
181+
`my-private-reg-pod.yaml`ファイル内の`<your-private-image>`を、以下のようなプライベートレジストリのイメージのパスに置き換えてください:
182+
183+
```none
184+
your.private.registry.example.com/janedoe/jdoe-private:v1
185+
```
186+
187+
プライベートレジストリからイメージを取得するために、Kubernetesは認証情報を必要とします。
188+
設定ファイル内の`imagePullSecrets`フィールドは、Kubernetesが`regcred`という名前のSecretから認証情報を取得することを指定します。
189+
190+
以下のようにして作成したSecretを使用するPodを作成し、Podが実行されていることを確認します:
191+
192+
```shell
193+
kubectl apply -f my-private-reg-pod.yaml
194+
kubectl get pod private-reg
195+
```
196+
197+
{{< note >}}
198+
イメージプルシークレットをPod(またはDeployment、あるいはPodテンプレートを使用するその他のオブジェクト)で使用するには、適切なSecretが正しいNamespaceに存在することを確認する必要があります。
199+
使用するNamespaceは、Podを定義したNamespaceと同一である必要があります。
200+
{{< /note >}}
201+
202+
また、Podのステータスが`ImagePullBackOff`になり起動に失敗した場合は、Podのイベントを確認してください:
203+
204+
```shell
205+
kubectl describe pod private-reg
206+
```
207+
208+
もし`FailedToRetrieveImagePullSecret`という理由を持つイベントが表示された場合は、Kubernetesが指定された名前のSecret(この例では`regcred`)を見つけることができないことを示します。
209+
210+
指定したSecretが存在し、その名前が正しく記載されていることを確認してください。
211+
```shell
212+
Events:
213+
... Reason ... Message
214+
------ -------
215+
... FailedToRetrieveImagePullSecret ... Unable to retrieve some image pull secrets (<regcred>); attempting to pull the image may not succeed.
216+
```
217+
218+
## 複数のレジストリ上のイメージを利用する
219+
220+
1つのPodは複数のコンテナを持つことができ、各コンテナのイメージは異なるレジストリから取得できます。
221+
1つのPodで複数の`imagePullSecrets`を使用でき、それぞれに複数の認証情報を含めることができます。
222+
223+
レジストリに一致する各認証情報を使用してイメージの取得が試行されます。
224+
レジストリに一致する認証情報がない場合、認証なしで、またはカスタムランタイム固有の設定を使用してイメージの取得が試行されます。
225+
226+
## {{% heading "whatsnext" %}}
227+
228+
* [Secret](/ja/docs/concepts/configuration/secret/)についてさらに学ぶ。
229+
* または{{< api-reference page="config-and-storage-resources/secret-v1" >}}でAPIリファレンスを読む。
230+
* [プライベートレジストリを使用する方法](/ja/docs/concepts/containers/images/#プライベートレジストリを使用する方法)についてさらに学ぶ。
231+
* [イメージプルシークレットをサービスアカウントへ追加する](/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account)についてさらに学ぶ。
232+
* [kubectl create secret docker-registry](/docs/reference/generated/kubectl/kubectl-commands/#-em-secret-docker-registry-em-)を参照する。
233+
* Podの[コンテナの定義](/docs/reference/kubernetes-api/workload-resources/pod-v1/#containers)内の`imagePullSecrets`フィールドを参照する。

0 commit comments

Comments
 (0)