組み込みの Harbor レジストリ を、Tanzu Kubernetes Grid サービス によってプロビジョニングされた Tanzu Kubernetes クラスタにデプロイするイメージのプライベート コンテナ レジストリとして使用することができます。

vSphere with Tanzu には、スーパーバイザー クラスタ で有効にできる Harbor レジストリ インスタンスが組み込まれていて、コンテナベースのワークロードを Tanzu Kubernetes クラスタにデプロイする場合に使用できます。

スーパーバイザー クラスタ で組み込みの Harbor レジストリ が有効になっている場合は、Tanzu Kubernetes Grid サービス によって、レジストリ インスタンスのルート CA 証明書が Tanzu Kubernetes クラスタ ノードにインストールされます。この証明書は、(調整ループを使用して)新しいクラスタと既存のクラスタの両方にインストールされます。クラスタ内のイメージを実行するには、ワークロード YAML 内でプライベート レジストリを指定します。

ワークフロー

次のワークフローを使用して、 Tanzu Kubernetes クラスタ ノードからプライベート レジストリに安全にアクセスし、コンテナ イメージをプルします。
手順 操作 方法
0 Tanzu Kubernetes クラスタで組み込みの Harbor レジストリを使用する際のワークフローを確認します。 vSphere with Tanzu ワークロードに対するコンテナ レジストリの使用を参照してください。
1 スーパーバイザー クラスタで組み込みの Harbor レジストリを有効にします。 スーパーバイザー クラスタ の組み込み Harbor レジストリ の有効化を参照してください。
2 レジストリ サービスのシークレットを使用して、各クラスタの kubeconfig を構成します。 以下の手順を参照してください:組み込みの Harbor レジストリ のイメージ プル シークレットを使用した Tanzu Kubernetes クラスタの構成。
3 プライベート コンテナ レジストリを指定するようにワークロード YAML を構成します。 以下の手順を参照してください:組み込みの Harbor レジストリ のイメージ プル シークレットを使用した Tanzu Kubernetes クラスタの構成。
4 組み込みの Harbor レジストリにイメージをプッシュするには、Docker クライアントを構成し、vSphere Docker 認証情報ヘルパーをインストールします。 組み込みの Harbor レジストリ 証明書を使用した Docker クライアントの構成組み込みの Harbor レジストリ へのイメージのプッシュを参照してください。

組み込みの Harbor レジストリ のイメージ プル シークレットを使用した Tanzu Kubernetes クラスタの構成

イメージ プル シークレットで kubeconfig を構成し、 Tanzu Kubernetes クラスタをプライベート コンテナ レジストリ、組み込みの Harbor レジストリ または外部プライベート レジストリに接続します。
  1. スーパーバイザー クラスタ に接続します。vCenter Single Sign-On ユーザーとして スーパーバイザー クラスタ に接続するを参照してください。
  2. ターゲット Tanzu Kubernetes クラスタがプロビジョニングされている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context tkgs-cluster-ns
  3. vSphere 名前空間 のイメージ プル シークレットを取得して、ファイルに保存します。
    kubectl get secret -n <vsphere-namespace> <vsphere-namespace>-default-image-pull-secret -o yaml > <path>/image-pull-secret.yaml
    例:
    kubectl get secret -n tkgs-cluster-ns tkgs-cluster-ns-default-image-pull-secret -o yaml > tanzu/image-pull-secret.yaml
  4. テキスト エディタで image-pull-secret.yaml を開きます。最小限必要な変更を行い、完了したらファイルを保存します。
    apiVersion: v1
    data:
      .dockerconfigjson: ewoJCQkJImF1dGhzJUV2s1ZVZwWVFuWmp...
    kind: Secret
    metadata:
      creationTimestamp: "2020-11-12T02:41:08Z"
      managedFields:
      - apiVersion: v1
        ...
      name: harbor-registry-secret   #OPTIONAL: Change if desired
      namespace: default           #REQUIRED: Enter the Kuberentes namespace
      ownerReferences:
      - apiVersion: registryagent.vmware.com/v1alpha1
        ...
      resourceVersion: "675868"
      selfLink: /api/v1/namespaces/tkgs-cluster-ns/secrets/tkgs-cluster-ns-default-image-pull-secret
      uid: 66606b41-7363-4b74-a3f2-4436f83f
    type: kubernetes.io/dockerconfigjson
    
    • 必須:namespace の値を、default など、クラスタ内の適切な Kubernetes 名前空間と一致するように変更します。
      注: イメージ プル シークレットを構成するには、Kubernetes 名前空間を指定します。 Tanzu Kubernetes クラスタがすでに存在する場合は、コンテキストをそのクラスタに切り替えて kubectl get namespaces を実行し、使用可能な Kubernetes 名前空間を一覧表示します。必要な場合は、先にターゲット名前空間を作成してから続行します。 Tanzu Kubernetes クラスタが存在しない場合は、 default 名前空間を使用できます。
    • オプション:name の値を harbor-registry-secretprivate-registry-secret などの意味のある値に変更します。
  5. Tanzu Kubernetes クラスタへのアクセスに使用可能な kubeconfig ファイルを作成します。
    kubectl get secret -n <vsphere-namespace> <cluster-name>-kubeconfig -o jsonpath='{.data.value}' | base64 -d > <path>/cluster-kubeconfig
    
    <vsphere-namespace> を、ターゲット Tanzu Kubernetes クラスタがプロビジョニングされている vSphere 名前空間 の名前に置き換えます。 <cluster-name>Tanzu Kubernetes クラスタの名前に置き換えます。
    kubectl get secret -n tkgs-cluster-ns tkgs-cluster-5-kubeconfig -o jsonpath='{.data.value}' | base64 -d > tanzu/cluster-kubeconfig
  6. Tanzu Kubernetes クラスタ内にレジストリ サービスのシークレットを作成します。ローカルで保存および更新していたイメージ プル シークレット ファイルを参照します。
    kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <path>/image-pull-secret.yaml
    例:
    kubectl --kubeconfig=tanzu/cluster-kubeconfig apply -f tanzu/image-pull-secret.yaml
    レジストリ サービスのシークレットが正常に作成されたことを確認します。
    secret/harbor-registry-secret created

プライベート コンテナ レジストリからイメージをプルするための Tanzu Kubernetes ワークロードの構成

Tanzu Kubernetes クラスタのワークロードのためにプライベート コンテナ レジストリからイメージをプルするには、プライベート レジストリの詳細を使用してワークロード YAML を構成します。

この手順は、プライベート コンテナ レジストリまたは組み込みの Harbor レジストリ からイメージをプルする場合に使用できます。この例では、組み込みの Harbor レジストリ に保存されているイメージを使用するポッド仕様を作成し、以前に構成したイメージ プル シークレットを利用します。
  1. プライベート レジストリの詳細を含むサンプルのポッド仕様を作成します。
    apiVersion: v1
    kind: Pod
    metadata:
      name: <workload-name>
      namespace: <kubernetes-namespace>
    spec:
      containers:
      - name: private-reg-container
        image: <Registry-IP-Address>/<vsphere-namespace>/<image-name>:<version>
      imagePullSecrets:
      - name: <registry-secret-name>
    • <workload-name> をポッド ワークロードの名前に置き換えます。
    • <kubernetes-namespace> を、ポッドが作成されるクラスタ内の Kubernetes 名前空間に置き換えます。この名前空間は、レジストリ サービスのイメージ プル シークレットが格納されている、Tanzu Kubernetes クラスタ内の Kubernetes 名前空間(デフォルトの名前空間など)と同じにする必要があります。
    • <Registry-IP-Address> を、スーパーバイザー クラスタ で実行されている組み込みの Harbor レジストリ インスタンスの IP アドレスに置き換えます。
    • <vsphere-namespace> を、ターゲット Tanzu Kubernetes がプロビジョニングされている vSphere 名前空間 に置き換えます。
    • <image-name> を、任意のイメージ名に置き換えます。
    • <version> を、イメージの適切なバージョン(「最新」バージョンなど)に置き換えます。
    • <registry-secret-name> を、以前に作成したレジストリ サービスのイメージ プル シークレットの名前に置き換えます。
  2. 定義したポッド仕様に基づいて、Tanzu Kubernetes クラスタ内にワークロードを作成します。
    kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <pod.yaml>

    ポッドは、レジストリからプルされたイメージに基づいて作成する必要があります。