TKG サービス クラスタをプライベート コンテナ レジストリと統合するには、このトピックを参照してください。
プライベート コンテナ レジストリの使用事例
コンテナ レジストリは、Kubernetes 環境に重要な機能を提供し、コンテナ イメージを保存して共有するための一元的なリポジトリとして機能します。最もよく使用されるパブリック コンテナ レジストリは Docker Hubです。プライベート コンテナ レジストリのサービスは多数あります。VMware Harbor は、スーパーバイザー に付属するオープンソースのクラウド ネイティブなプライベート コンテナ レジストリです。
プライベート コンテナ レジストリの統合
プライベート レジストリを TKG サービス クラスタと統合するには、1 つ以上の自己署名 CA 証明書を使用して、HTTPS 経由でプライベート レジストリ コンテンツを提供するようにクラスタを構成します。そのためには、クラスタ仕様の trust
フィールドに additionalTrustedCAs
値を設定します。TKGS クラスタが信頼する自己署名 CA 証明書は、いくつでも定義できます。この機能を使用すると、証明書のリストを簡単に定義し、ローテーションが必要な証明書を更新できます。
最初にクラスタを作成するときにプライベート レジストリ証明書を構成することも、既存のクラスタを更新してプライベート レジストリ証明書を指定することもできます。既存のクラスタを編集し、プライベート レジストリ証明書フィールドを追加するには、kubectl edit
メソッドを使用してください。kubectl のテキスト エディタの構成を参照してください。
trust.additionalTrustedCAs
フィールドの実装は、TKGS クラスタのプロビジョニング用にサポートされている API 間で若干異なることに注意してください。詳細については、「v1alpha3 API の trust フィールド」および「v1beta1 API の trust 変数」を参照してください。
v1alpha3 API の例
次の例は、v1alpha3 API を使用してプロビジョニングされた TKG サービス クラスタを、CA 証明書を使用してプライベート コンテナ レジストリと統合する方法を示しています。
trust.additionalTrustedCAs
フィールドには 1 つ以上の名前とデータのペアが含まれており、それぞれにプライベート レジストリの TLS 証明書を含めることができます。
フィールド | 説明 |
---|---|
trust |
セクション マーカー。データを受け入れない。 |
additionalTrustedCAs |
セクション マーカー。それぞれの name と data を示す証明書の配列が含まれます。 |
name |
CA 証明書のユーザー定義名。 |
data |
double 型の base64 エンコードの PEM 形式の CA 証明書 (ca.crt ) の内容。
注: v1alpha3 API では、証明書の内容を single 型の base64 エンコード形式にする必要があります。内容が single 型の base64 エンコード形式でない場合は、結果の PEM ファイルを処理できません。
|
- Harbor Web インターフェイスの [レジストリ証明書] をダウンロードします。
CA 証明書ファイルが
ca.crt
としてダウンロードされます。
画面で Harbor - CA 証明書の内容を single 型の base64 エンコード形式にします。
- Linux:
base64 -w 0 ca.crt
- Windows:https://www.base64encode.org/
- Linux:
- クラスタ仕様に
trust.additionalTrustedCAs
フィールドを含めて、name
とdata
の値をポピュレートします。#tkc-with-trusted-private-reg-cert.yaml apiVersion: run.tanzu.vmware.com/v1alpha3 kind: TanzuKubernetesCluster metadata: name: tkc01 namespace: tkgs-cluster-ns spec: topology: controlPlane: replicas: 3 storageClass: tkgs-storage-policy vmClass: guaranteed-medium tkr: reference: name: v1.25.7---vmware.3-fips.1-tkg.1 nodePools: - name: nodepool-01 replicas: 3 storageClass: tkgs-storage-policy vmClass: guaranteed-medium tkr: reference: name: v1.25.7---vmware.3-fips.1-tkg.1 settings: storage: defaultClass: tkgs-storage-policy network: cni: name: antrea services: cidrBlocks: ["198.51.100.0/12"] pods: cidrBlocks: ["192.0.2.0/16"] serviceDomain: cluster.local trust: additionalTrustedCAs: - name: CompanyInternalCA-1 data: LS0tLS1C...LS0tCg== - name: CompanyInternalCA-2 data: MTLtMT1C...MT0tPg==
- 証明書をローテーションするには、クラスタ仕様に対して
kubectl edit
を実行し、trust.additionalTrustedCAs.data
値を更新してからローリング アップデートを開始します。
v1beta1 API の例
次の例では、v1beta1 API を使用してプロビジョニングされた TKG サービス クラスタを、CA 証明書を使用してプライベート コンテナ レジストリと統合する方法について説明します。
フィールド | 説明 |
---|---|
trust |
セクション マーカー。データを受け入れない。 |
additionalTrustedCAs |
セクション マーカー。それぞれの名前を示す証明書の配列が含まれます。 |
name |
double 型の base64 エンコードの PEM 形式の CA 証明書を含む Kubernetes シークレットの data マップ フィールドのユーザー定義名。
注: v1beta1 API では、証明書の内容を double 型の base64 エンコード形式にする必要があります。内容が double 型の base64 エンコード形式でない場合は、結果の PEM ファイルを処理できません。
|
- Harbor Web インターフェイスの [レジストリ証明書] をダウンロードします。
CA 証明書ファイルが
ca.crt
としてダウンロードされます。
画面で Harbor - CA 証明書の内容を double 型の base64 エンコード形式にします。
- Linux:
base64 -w 0 ca.crt | base64 -w 0
- Windows:https://www.base64encode.org/
- Linux:
- 次の内容の Kubernetes シークレット定義 YAML ファイルを作成します。
#additional-ca-1.yaml apiVersion: v1 data: additional-ca-1: TFMwdExTMUNSGlSzZ3Jaa...VVNVWkpRMEMwdExTMHRDZz09 kind: Secret metadata: name: cluster01-user-trusted-ca-secret namespace: tkgs-cluster-ns type: Opaque
ここで、- シークレットの
data
マップの値は、ユーザー定義の文字列です。これは CA 証明書の名前(この例ではadditional-ca-1
)であり、値は double 型の base64 エンコード形式の証明書です。 metadata
セクションで、シークレットCLUSTER-NAME-user-trusted-ca-secret
に名前を付けます。CLUSTER-NAME はクラスタの名前です。このシークレットは、クラスタと同じ vSphere 名前空間 で作成する必要があります。
- シークレットの
- Kubernetes シークレットを宣言によって作成します。
kubectl apply -f additional-ca-1.yaml
- シークレットの作成を確認します。
kubeclt get secret -n tkgs-cluster-ns cluster01-user-trusted-ca-secret NAME TYPE DATA AGE cluster01-user-trusted-ca-secret Opaque 12 2d22h
- シークレットのデータ マップの名前を参照するクラスタ仕様に
trust
変数を含めます。この例では、additional-ca-1
です。#cluster-with-trusted-private-reg-cert.yaml apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: cluster01 namespace: tkgs-cluster-ns spec: clusterNetwork: services: cidrBlocks: ["198.52.100.0/12"] pods: cidrBlocks: ["192.101.2.0/16"] serviceDomain: "cluster.local" topology: class: tanzukubernetescluster version: v1.26.5+vmware.2-fips.1-tkg.1 controlPlane: replicas: 3 workers: machineDeployments: - class: node-pool name: node-pool-01 replicas: 3 variables: - name: vmClass value: guaranteed-medium - name: storageClass value: tkgs-storage-profile - name: defaultStorageClass value: tkgs-storage-profile - name: trust value: additionalTrustedCAs: - name: additional-ca-1
- 証明書をローテーションするには、新しいシークレットを作成し、適切な値を使用してクラスタ仕様を編集します。これにより、クラスタのローリング アップデートがトリガされます。
注: システムは、
CLUSTER-NAME-user-trusted-ca-secret
への変更を監視しません。data
マップ値が変更された場合は、クラスタに反映されません。新しいシークレットを作成して、そのデータ マップのname
をtrust.additionalTrustCAs
にする必要があります。