Azure Red Hat OpenShift (ARO) で Azure Container Registry を使用する
Azure Container Registry (ACR) は、geo レプリケーションなどのエンタープライズ機能を備えたプライベート Docker コンテナー イメージを格納するために使用できる、マネージド コンテナー レジストリ サービスです。 ARO クラスターから ACR にアクセスするために、クラスターは、Docker ログイン資格情報を Kubernetes シークレットに格納して ACR で認証できます。 同様に、ARO クラスターは、ポッド仕様の imagePullSecret を使用して、イメージをプルするときにレジストリに対して認証を行うことができます。 この記事では、プライベート Docker コンテナー イメージを格納およびプルするために、Azure Red Hat OpenShift クラスターで Azure Container Registry を設定する方法について説明します。
前提条件
このガイドでは、既存の Azure Container Registry があることを前提としています。 そうでない場合、Azure portal または Azure CLI の手順を使用して、コンテナー レジストリを作成します。
また、この記事では、既存の Azure Red Hat OpenShift クラスターがあり、oc
CLI がインストールされていることを前提としています。 そうでない場合、ARO クラスターの作成に関するチュートリアルの指示に従ってください。
プル シークレットを取得する
ARO クラスターからレジストリにアクセスするには、ACR のプル シークレットが必要です。
プル シークレット資格情報を取得するには、Azure portal または Azure CLI のいずれかを使用できます。
Azure portal を使用する場合は、ACR インスタンスに移動し、[アクセス キー] を選択します。 docker-username
は、お使いのコンテナー レジストリの名前です。docker-password
には password または password2 のいずれかを使用します。
代わりに、Azure CLI を使用してこれらの資格情報を取得できます。
az acr credential show -n <your registry name>
Kubernetes シークレットを作成する
ここでは、これらの資格情報を使用して、Kubernetes シークレットを作成します。 自分の ACR 資格情報を使用して次のコマンドを実行します。
oc create secret docker-registry \
--docker-server=<your registry name>.azurecr.io \
--docker-username=<your registry name> \
--docker-password=******** \
--docker-email=unused \
acr-secret
Note
このシークレットは、現在の OpenShift プロジェクト (Kubernetes 名前空間) に格納され、そのプロジェクトで作成されたポッドによってのみ参照可能になります。 クラスター全体のプル シークレットを作成する手順については、こちらのドキュメントを参照してください。
シークレットをサービス アカウントにリンクする
次に、ポッドがコンテナー レジストリに到達できるように、ポッドで使用されるサービス アカウントにシークレットをリンクします。 サービス アカウントの名前は、ポッドで使用されるサービス アカウントの名前と一致する必要があります。 default
は既定のサービス アカウントです。
oc secrets link default <pull_secret_name> --for=pull
プライベート レジストリ イメージを使用してポッドを作成する
ARO クラスターを ACR に接続したので、ACR からイメージをプルしてポッドを作成してみましょう。
まず podSpec を使用して、作成したシークレットを imagePullSecret として指定します。
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
- name: hello-world
image: <your registry name>.azurecr.io/hello-world:v1
imagePullSecrets:
- name: acr-secret
ポッドが起動して実行されていることをテストするには、このコマンドを実行し、状態が [実行中] になるまで待ちます。
$ oc get pods --watch
NAME READY STATUS RESTARTS AGE
hello-world 1/1 Running 0 30s