プライベートコンテナレジストリからイメージをデプロイする¶
複数のサービスおよびリビジョンにわたって、プライベートレジストリからイメージをデプロイするようにKnativeクラスターを構成できます。これを行うには、レジストリの認証情報を使用して、Kubernetesシークレットのリスト(imagePullSecrets
)を作成する必要があります。次に、すべてのサービスのデフォルトのサービスアカウント、または単一のサービスのリビジョンテンプレートにそれらのシークレットを追加する必要があります。
前提条件¶
- Knative ServingがインストールされたKubernetesクラスターが必要です。
- コンテナイメージが保存されているプライベートコンテナレジストリの認証情報にアクセスできる必要があります。
手順¶
-
認証情報をシークレットのリストとして含む
imagePullSecrets
オブジェクトを作成します。kubectl create secret docker-registry <registry-credential-secrets> \ --docker-server=<private-registry-url> \ --docker-email=<private-registry-email> \ --docker-username=<private-registry-user> \ --docker-password=<private-registry-password>
ここで
-
<registry-credential-secrets>
は、シークレット(imagePullSecrets
オブジェクト)に使用する名前です。たとえば、container-registry
です。 -
<private-registry-url>
は、コンテナイメージが保存されているプライベートレジストリのURLです。例としては、Google Container RegistryやDockerHubなどがあります。 -
<private-registry-email>
は、プライベートレジストリに関連付けられているメールアドレスです。 -
<private-registry-user>
は、プライベートコンテナレジストリにアクセスするために使用するユーザー名です。 -
<private-registry-password>
は、プライベートコンテナレジストリにアクセスするために使用するパスワードです。
例
kubectl create secret docker-registry container-registry \ --docker-server=https://gcr.io/ \ --docker-email=my-account-email@address.com \ --docker-username=my-grc-username \ --docker-password=my-gcr-password
-
-
オプション。
imagePullSecrets
オブジェクトを作成したら、以下を実行してシークレットを表示できます。kubectl get secret <registry-credential-secrets> -o=yaml
-
オプション。
default
名前空間のdefault
サービスアカウントにimagePullSecrets
オブジェクトを追加します。注意
serviceAccountName
が指定されていない限り、Knativeクラスターの名前空間のそれぞれにあるdefault
サービスアカウントは、デフォルトでリビジョンによって使用されます。たとえば、シークレットに
container-registry
という名前を付けた場合、次のコマンドを実行してdefault
サービスアカウントを変更できます。kubectl patch serviceaccount default -p "{\"imagePullSecrets\": [{\"name\": \"container-registry\"}]}"
default
名前空間で作成された新しいポッドには、認証情報が含まれ、プライベートレジストリのコンテナイメージにアクセスできるようになります。 -
オプション。
imagePullSecrets
オブジェクトをサービスに追加します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello spec: template: spec: imagePullSecrets: - name: <secret-name> containers: - image: ghcr.io/knative/helloworld-go:latest ports: - containerPort: 8080 env: - name: TARGET value: "World"