第6章 Red Hat レジストリーへのアクセスおよびその設定
6.1. 認証が有効にされている Red Hat レジストリー
Red Hat Container Catalog で利用可能なすべてのコンテナーイメージはイメージレジストリーの registry.access.redhat.com
でホストされます。OpenShift Container Platform 3.11 では、Red Hat Container Catalog は registry.access.redhat.com
から registry.redhat.io
に移行しました。
新規レジストリーの registry.redhat.io
ではイメージおよび OpenShift Container Platform でホストされるコンテンツへのアクセスに認証が必要になります。新規レジストリーへの移行後も、既存レジストリーはしばらく利用可能になります。
OpenShift Container Platform はイメージを registry.redhat.io
からプルするため、これを使用できるようにクラスターを設定する必要があります。
新規レジストリーは、以下の方法を使用して認証に標準の OAuth メカニズムを使用します。
- 認証トークン。管理者によって生成される これらのトークンは、システムにコンテナーイメージレジストリーに対する認証機能を付与するサービスアカウントです。サービスアカウントはユーザーアカウントの変更による影響を受けないので、トークンの認証方法は信頼性があり、回復性があります。これは、実稼働クラスター用にサポートされている唯一の認証オプションです。
-
Web ユーザー名およびパスワード。これは、
access.redhat.com
などのリソースへのログインに使用する標準的な認証情報のセットです。OpenShift Container Platform でこの認証方法を使用することはできますが、これは実稼働デプロイメントではサポートされません。この認証方法の使用は、OpenShift Container Platform 外のスタンドアロンのプロジェクトに制限されます。
ユーザー名またはパスワード、または認証トークンのいずれかの認証情報を使用して docker login
を使用し、新規レジストリーのコンテンツにアクセスします。
すべてのイメージストリームは新規レジストリーを参照します。新規レジストリーにはアクセスに認証が必要となるため、OpenShift namespace には imagestreamsecret
という新規シークレットがあります。
認証情報は 2 つの場所に配置する必要があります。
- OpenShift namespaceOpenShift namespace のイメージストリームがインポートできるように、認証情報は OpenShift namespace に存在している必要があります。
- ホスト。Kubernetes でイメージをプルする際にホストの認証情報を使用するため、認証情報はホスト上になければなりません。
新規レジストリーにアクセスするには、以下を実行します。
-
イメージインポートシークレット
imagestreamsecret
が OpenShift namespace にあることを確認します。そのシークレットには、新規レジストリーへのアクセスを許可する認証情報があります。 -
クラスターノードのすべてに、マスターからコピーされた
/var/lib/origin/.docker/config.json
が含まれていることを確認します。 これは、Red Hat レジストリーへのアクセスを許可します。
6.1.1. ユーザーアカウントの作成
Red Hat 製品のエンタイトルメントを持たれる Red Hat のお客様は、ユーザー認証情報を持つアカウントをお持ちです。これは、お客様が Red Hat カスタマーポータルにログインされる際に使用されるユーザー名およびパスワードです。
アカウントをお持ちでない場合は、以下のオプションのいずれかに登録してアカウントを無料で取得することができます。
- Red Hat Developer Program。このアカウントを使用すると、開発者の各種ツールおよびプログラムにアクセスできます。
- 30 日間のトライアルサブスクリプション。このアカウントを使用すると、一部の Red Hat ソフトウェア製品にアクセスできる 30 日間のトライアルサブスクリプションを利用できます。
6.1.2. Red Hat レジストリー
お客様の企業が共有アカウントを管理されている場合には、トークンを作成する必要があります。管理者は、組織に関連付けられたすべてのトークンを作成し、表示し、削除することができます。
前提条件
- ユーザー認証情報
手順
トークンを順番に作成するには、docker login
を実行します。
-
registry.redhat.io
に移動します。 - Red Hat Network (RHN) のユーザー名とパスワードでログインします。
プロンプトが出されたら、同意書を読んでこれに同意します。
- 同意書の同意を求めるプロンプトがすぐに出されない場合、以下の手順に進むとプロンプトが出されます。
Registry Service Accounts ページから、Create Service Account をクリックします。
- サービスアカウントの名前を指定します。これには、ランダムの文字列が追加されます。
- 説明を入力します。
- Create をクリックしまう。
- サービスアカウントに戻ります。
- 作成したサービスアカウントをクリックします。
- 追加された文字列を含むユーザー名をコピーします。
- トークンをコピーします。
6.1.3. インストールおよびアップグレード時のレジストリー認証情報の管理
レジストリー認証情報は、Ansible インストーラーを使用してインストールまたはアップグレード時に管理することもできます。
これにより、以下がセットアップされます。
-
OpenShift namespace の
imagestreamsecret
。 - すべてのノードの認証情報。
Ansible インストーラーでは、openshift_examples_registryurl
または oreg_url
のいずれかのデフォルト値の registry.redhat.io
を使用している場合に認証情報が必要になります。
前提条件
- ユーザー認証情報
- サービスアカウント
- サービスアカウントトークン
手順
Ansible インストーラーを使用してインストールまたはアップグレード時にレジストリー認証情報を管理するには、以下を実行します。
-
インストールまたはアップグレード時に、インストーラーインベントリーに
oreg_auth_user
およびoreg_auth_password
変数を指定します。
トークンを作成した場合、oreg_auth_password
をトークンの値に設定します。
追加の認証されたレジストリーへのアクセスを必要とするクラスターは、openshift_additional_registry_credentials
を設定してレジストリーの一覧を設定できます。各レジストリーには、ホストおよびパスワードの値が必要であり、ユーザー名はユーザーを設定して指定できます。デフォルトで、指定された認証情報は、指定されたレジストリーでイメージ openshift3/ose-pod
の検査を試行することによって検証されます。
代替イメージを指定するには、以下のいずれかを実行します。
-
test_image
を設定します。 -
test_login
を False に設定して認証情報の検証を無効にします。
レジストリーがセキュアでない場合、tls_verify
を False に設定します。
この一覧のすべての認証情報には、OpenShift namespace で作成された imagestreamsecret
およびすべてのノードにデプロイされた認証情報が含まれます。
以下に例を示します。
openshift_additional_registry_credentials=[{'host':'registry.example.com','user':'name','password':'pass1','test_login':'False'},{'host':'registry2.example.com','password':'token12345','tls_verify':'False','test_image':'mongodb/mongodb'}]
6.1.4. Red Hat レジストリーでのサービスアカウントの使用
Red Hat レジストリーのサービスアカウントを作成し、トークンを生成した後に、追加のタスクを実行できます。
このセクションでは、インストールおよびアップグレード時のレジストリー認証情報の管理セクションで説明されているインベントリー変数を指定することによってインストール時に自動的に実行できる手動の手順について説明します。
前提条件
- ユーザー認証情報
- サービスアカウント
- サービスアカウントトークン
手順
Registry Service Accounts ページから、アカウント名をクリックします。このページから以下のタスクを実行できます。
- Token Informationタブで、ユーザー名 (指定したランダムの文字列が追加された名前) およびパスワード (トークン) を表示できます。このタブで、トークンを再生成できます。
OpenShift Secretタブで以下を実行できます。
- タブにあるリンクをクリックしてシークレットをダウンロードします。
シークレットをクラスターに送信します。
# oc create -f <account-name>-secret.yml --namespace=openshift
シークレットの参照を
imagePullSecrets
フィールドで Kubernetes Pod 設定に追加して Kubernetes 設定を更新します。apiVersion: v1 kind: Pod metadata: name: somepod namespace: all spec: containers: - name: web image: registry.redhat.io/REPONAME imagePullSecrets: - name: <numerical-string-account-name>-pull-secret
Docker Loginタブで、
docker login
を実行できます。以下に例を示します。# docker login -u='<numerical-string|account-name>' -p=<token>
正常にログインした後に、
~/.docker/config.json
を/var/lib/origin/.docker/config.json
にコピーし、ノードを再起動します。# cp -r ~/.docker /var/lib/origin/ systemctl restart atomic-openshift-node
Docker Configurationタブで、以下を実行できます。
- タブにあるリンクをクリックして認証情報の設定をダウンロードします。
ファイルを Docker 設定ディレクトリーに配置して設定をディスクに書き込みます。これにより、既存の認証情報が上書きされます。以下に例を示します。
# mv <account-name>-auth.json ~/.docker/config.json