LoginSignup
17
17

More than 5 years have passed since last update.

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

Posted at

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

引用元
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/

17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17