コンテンツへスキップ

プライベートコンテナレジストリからイメージをデプロイする

複数のサービスおよびリビジョンにわたって、プライベートレジストリからイメージをデプロイするようにKnativeクラスターを構成できます。これを行うには、レジストリの認証情報を使用して、Kubernetesシークレットのリスト(imagePullSecrets)を作成する必要があります。次に、すべてのサービスのデフォルトのサービスアカウント、または単一のサービスのリビジョンテンプレートにそれらのシークレットを追加する必要があります。

前提条件

  • Knative ServingがインストールされたKubernetesクラスターが必要です。
  • コンテナイメージが保存されているプライベートコンテナレジストリの認証情報にアクセスできる必要があります。

手順

  1. 認証情報をシークレットのリストとして含む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 RegistryDockerHubなどがあります。

    • <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
    
  2. オプション。imagePullSecretsオブジェクトを作成したら、以下を実行してシークレットを表示できます。

    kubectl get secret <registry-credential-secrets> -o=yaml
    
  3. オプション。default名前空間のdefaultサービスアカウントにimagePullSecretsオブジェクトを追加します。

    注意

    serviceAccountNameが指定されていない限り、Knativeクラスターの名前空間のそれぞれにあるdefaultサービスアカウントは、デフォルトでリビジョンによって使用されます。

    たとえば、シークレットにcontainer-registryという名前を付けた場合、次のコマンドを実行してdefaultサービスアカウントを変更できます。

    kubectl patch serviceaccount default -p "{\"imagePullSecrets\": [{\"name\": \"container-registry\"}]}"
    

    default名前空間で作成された新しいポッドには、認証情報が含まれ、プライベートレジストリのコンテナイメージにアクセスできるようになります。

  4. オプション。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"
    

当社は、サイトのトラフィックを理解するために分析とCookieを使用しています。当社サイトの使用に関する情報は、その目的のためにGoogleと共有されます。詳しくはこちら。