Informationen zum Integrieren von TKG-Dienst-Clustern in eine private Containerregistrierung finden Sie in diesem Thema.

Anwendungsbeispiel für eine private Container-Registrierung

Container-Registrierungen stellen eine kritische Funktion für Kubernetes-Bereitstellungen zur Verfügung und dienen als zentrales Repository für die Speicherung und Freigabe von Container-Images. Die am häufigsten verwendete Registrierung für öffentliche Container ist Docker Hub. Es gibt viele Private Container-Registrierungsangebote. VMware Harbor ist eine native Cloud-Registrierung mit Open Source und privatem Container, die im Lieferumfang von Supervisor enthalten ist.

Integration der privaten Container-Registrierung

Zur Integration einer privaten Registrierung in ein TKG-Dienst-Cluster konfigurieren Sie den Cluster mit einem oder mehreren selbstsignierten CA-Zertifikaten, um private Registrierungsinhalte über HTTPS abzuwickeln. Hierzu fügen Sie in der Clusterspezifikation ein Feld vom Typ trust mit dem Wert additionalTrustedCAs ein. Sie können eine beliebige Anzahl selbstsignierter CA-Zertifikate definieren, denen der TKGS-Cluster vertrauen soll. Mit dieser Funktion können Sie problemlos eine Liste von Zertifikaten definieren und diese Zertifikate bei Bedarf aktualisieren.

Sie können das Zertifikat der privaten Registrierung bei der erstmaligen Erstellung des Clusters konfigurieren. Alternativ können Sie auch einen vorhandenen Cluster aktualisieren und das Zertifikat der privaten Registrierung bereitstellen. Um einen vorhandenen Cluster zu bearbeiten und die Felder für das Zertifikat der privaten Registrierung hinzuzufügen, verwenden Sie die Methode kubectl edit. Weitere Informationen hierzu finden Sie unter Konfigurieren eines Texteditors für Kubectl.

Beachten Sie, dass sich die Implementierung des Felds trust.additionalTrustedCAs bei den unterstützten APIs für die Bereitstellung von TKGS-Clustern geringfügig unterscheidet. Weitere Informationen finden Sie in den Tabellen Vertrauenswürdige v1alpha3-API-Felder und Vertrauenswürdige v1beta1-API-Variable.

Beispiel für die v1alpha3-API

Das folgende Beispiel zeigt die Integration eines mit der v1alpha3-API bereitgestellten TKG-Dienst-Clusters in eine private Containerregistrierung mithilfe des zugehörigen CA-Zertifikats.

Bei Verwendung der TanzuKubernetesCluster v1alpha3-API weist das Feld trust.additionalTrustedCAs ein oder mehrere Name-Daten-Paare auf, von denen jedes ein TLS-Zertifikat für eine private Registrierung enthalten kann.
Tabelle 1. Vertrauenswürdige v1alpha3-API-Felder
Bereich Beschreibung
trust Abschnittsmarkierung. Akzeptiert keine Daten.
additionalTrustedCAs Abschnittsmarkierung. Enthält ein Array von Zertifikaten mit den Feldern name und data für jedes Zertifikat.
name Benutzerdefinierter Name des CA-Zertifikats.
data Inhalt des CA-Zertifikats (ca.crt) im PEM-Format, das doppelt Base64-codiert ist.
Hinweis: Gemäß der v1alpha3-API muss der Zertifikatsinhalt einzeln Base64-codiert sein. Wenn der Inhalt nicht einzeln Base64-codiert ist, kann die resultierende PEM-Datei nicht verarbeitet werden.
Verwenden Sie das folgende Verfahren, um Harbor mithilfe des Harbor-Registrierungszertifikats in einen v1alpha3-API-Cluster zu integrieren.
  1. Laden Sie das Harbor-Registrierungszertifikat von der Harbor-Webschnittstelle im Bildschirm Projekte > Repositorys herunter.

    Die Datei mit dem Zertifizierungsstellenzertifikat wird als ca.crt heruntergeladen.

  2. Verwenden Sie für den Inhalt des CA-Zertifikats eine einzelne Base64-Codierung.
  3. Schließen Sie die Felder vom Typ trust.additionalTrustedCAs in die Clusterspezifikation ein und befüllen Sie sie mit den Werten name und 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==
  4. Führen Sie zum Rotieren eines Zertifikats den Befehl kubectl edit für die Clusterspezifikation aus und aktualisieren Sie den Wert trust.additionalTrustedCAs.data. Initiieren Sie anschließend ein paralleles Update.

Beispiel für die v1beta1-API

Im folgenden Beispiel wird die Integration eines mit der v1beta1-API bereitgestellten TKG-Dienst-Clusters in eine private Containerregistrierung mithilfe des zugehörigen CA-Zertifikats beschrieben.

Zur Integration der Registrierung eines privaten Containers in einen mit der Cluster-API v1beta1 bereitgestellten TKGS-Cluster verwenden Sie die Variable trust und befüllen sie mit einem geheimen Kubernetes-Schlüssel, der das Zertifikat der privaten Registrierung enthält.
Tabelle 2. Vertrauenswürdige v1beta1-API-Variable
Bereich Beschreibung
trust Abschnittsmarkierung. Akzeptiert keine Daten.
additionalTrustedCAs Abschnittsmarkierung. Enthält ein Array von Zertifikaten mit einem Namen für jedes Zertifikat.
name Der benutzerdefinierte Name für das Zuordnungsfeld data im geheimen Kubernetes-Schlüssel, der das doppelt Base64-codierte CA-Zertifikat im PEM-Format enthält.
Hinweis: Gemäß der v1beta1-API muss der Zertifikatsinhalt doppelt Base64-codiert sein. Wenn der Inhalt nicht doppelt Base64-codiert ist, kann die resultierende PEM-Datei nicht verarbeitet werden.
Verwenden Sie das folgende Verfahren, um Harbor mithilfe des Harbor-Registrierungszertifikats in einen v1beta1-API-Cluster zu integrieren.
  1. Laden Sie das Harbor-Registrierungszertifikat von der Harbor-Webschnittstelle im Bildschirm Projekte > Repositorys herunter.

    Die Datei mit dem Zertifizierungsstellenzertifikat wird als ca.crt heruntergeladen.

  2. Verwenden Sie für den Inhalt des CA-Zertifikats eine doppelte Base64-Codierung.
  3. Erstellen Sie eine YAML-Datei für die geheime Kubernetes-Definition mit den folgenden Inhalten.
    #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
    Dabei gilt:
    • Bei dem Wert der data-Zuordnung des geheimen Schlüssels handelt es sich um eine benutzerdefinierte Zeichenfolge, die den Namen des CA-Zertifikats darstellt (in diesem Beispiel additional-ca-1), dessen Wert ein doppeltes Base64-codiertes Zertifikat ist.
    • Versehen Sie den geheimen Schlüssel im Abschnitt metadata mit dem Namen CLUSTER-NAME-user-trusted-ca-secret, wobei CLUSTER-NAME als Name des Clusters fungiert. Dieser geheime Schlüssel muss im selben vSphere-Namespace wie der Cluster erstellt werden.
  4. Erstellen Sie den geheimen Kubernetes-Schlüssel deklarativ.
    kubectl apply -f additional-ca-1.yaml
  5. Überprüfen Sie die Erstellung des geheimen Schlüssels.
    kubeclt get secret -n tkgs-cluster-ns cluster01-user-trusted-ca-secret
    NAME                                             TYPE     DATA   AGE
    cluster01-user-trusted-ca-secret                 Opaque   12     2d22h
    
  6. Schließen Sie die Variable trust in die Clusterspezifikation ein, die auf den Namen der Datenzuordnung für den geheimen Schlüssel verweist, d. h. in diesem Beispiel auf 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
  7. Erstellen Sie zum Rotieren des Zertifikats einen neuen geheimen Schlüssel und bearbeiten Sie die Clusterspezifikation mit dem entsprechenden Wert. Auf diese Weise wird ein paralleles Update des Clusters ausgelöst.
    Hinweis: Änderungen am CLUSTER-NAME-user-trusted-ca-secret werden vom System nicht überwacht. Änderungen am Wert der data-Zuordnung spiegeln sich nicht im Cluster wider. Sie müssen einen neuen geheimen Schlüssel erstellen, dessen Angaben eine Zuordnung von name zu trust.additionalTrustCAs beschreiben.