Sie können eine externe Containerregistrierung mit Tanzu Kubernetes-Pods verwenden. Dies ist eine Alternative zur Verwendung der eingebetteten Harbor-Registrierung.

Externe private Registrierung – Anwendungsfall

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 DockerHub. Es gibt viele Private Container-Registrierungsangebote. VMware Harbor ist eine native Cloud-Registrierung mit Open Source und privatem Container. vSphere with Tanzu Bettet eine Harbor-Instanz ein, die Sie als private Container-Registrierung für vSphere-Pods und für Pods, die auf Tanzu Kubernetes ausgeführt werden, verwenden können. Weitere Informationen finden Sie unter Aktivieren der eingebetteten Harbor-Registrierung auf dem Supervisor-Cluster.

Für die eingebettete Harbor-Registrierung, die im Lieferumfang von vSphere with Tanzu enthalten ist, ist ein NSX-T Netzwerk erforderlich. Wenn Sie ein vSphere-Netzwerk verwenden, können Sie diese Registrierung nicht verwenden. Darüber hinaus führen Sie unter Umständen bereits Ihre eigene private Container-Registrierung aus, die Sie in Ihre Tanzu Kubernetes-Cluster integrieren möchten. In diesem Fall können Sie die Tanzu Kubernetes Grid-Dienst so konfigurieren, dass privaten Registrierungen mit selbstsigniertem Zertifikat vertraut wird, sodass Kubernetes-Pods, die auf Tanzu Kubernetes-Clustern ausgeführt werden, die externe Registrierung verwenden können.

Anforderungen einer externen privaten Registrierung

Um eine externe private Registrierung mit Tanzu Kubernetes-Clustern verwenden zu können, müssen Sie vSphere with Tanzu Version 7 U2 oder höher verwenden.

Sie können Ihre eigene private Registrierung nur mit Kubernetes-Pods verwenden, die auf Tanzu Kubernetes-Clustern und Tanzu Kubernetes-Version-VMs ausgeführt werden. Sie können Ihre eigene private Registrierung nicht mit -vSphere-Pods verwenden, die nativ auf ESXi ausgeführt werden. Die unterstützte Registrierung für vSphere-Pods ist die Harbor-Registrierung, die in die vSphere with Tanzu eingebettet ist.

Sobald Sie den Tanzu Kubernetes Grid-Dienst für eine private Registrierung konfiguriert haben, unterstützt jeder neue bereitgestellte Cluster die private Registrierung. Damit vorhandene Cluster die private Registrierung unterstützen, ist ein rollierendes Update erforderlich, um die TkgServiceConfiguration anzuwenden. Weitere Informationen finden Sie unter Update von Tanzu Kubernetes-Clustern. Darüber hinaus initiiert das System beim ersten Erstellen einer benutzerdefinierten TkgServiceConfiguration ein paralleles Update.

Konfiguration externer privater Registrierungen

Um Ihre eigene private Registrierung mit Tanzu Kubernetes-Clustern zu verwenden, konfigurieren Sie den Tanzu Kubernetes Grid-Dienst mit einem oder mehreren selbstsignierten Zertifikaten, um private Registrierungsinhalte über HTTPS abzuwickeln.

Der TkgServiceConfiguration wurde aktualisiert, um selbstsignierte Zertifikate für die private Registrierung zu unterstützen. Insbesondere wird ein neuer trust mit dem additionalTrustedCAs-Feld hinzugefügt, sodass Sie eine beliebige Anzahl an selbstsignierten Zertifikate definieren können, die Tanzu Kubernetes-Clustern vertrauen sollten. Mit dieser Funktion können Sie problemlos eine Liste von Zertifikaten definieren und diese Zertifikate bei Bedarf aktualisieren.

Sobald die TkgServiceConfiguration aktualisiert und angewendet wurde, werden die TLS-Zertifikate auf neue Cluster angewendet, sobald der nächste Cluster erstellt wird. Mit anderen Worten: Das Anwenden eines Updates auf TkgServiceConfiguration.trust.additionalTrustedCAs löst kein automatisches rollierendes Tanzu Kubernetes-Update aus.

apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TkgServiceConfiguration
metadata:
  name: tkg-service-configuration
spec:
  defaultCNI: antrea
  trust:
    additionalTrustedCAs:
      - name: first-cert-name
        data: base64-encoded string of a PEM encoded public cert 1
      - name: second-cert-name
        data: base64-encoded string of a PEM encoded public cert 2
Führen Sie zur Anwendung des Updates den folgenden Befehl aus.
kubectl apply -f tkgserviceconfiguration.yaml

Da die Tanzu Kubernetes Grid-Dienst-Spezifikation mit den privaten Registrierungszertifikaten aktualisiert wird, müssen Sie den öffentlichen Schlüssel nicht wie bei der Verwendung der eingebetteten Harbor-Registrierung mit Tanzu Kubernetes-Clustern zur Tanzu Kubernetes-Cluster-Kubekonfig hinzufügen.

Konfigurieren einer Tanzu Kubernetes-Arbeitslast zum Extrahieren von Images aus einer privaten Containerregistrierung

Um Images aus einer privaten Containerregistrierung für eine Tanzu Kubernetes-Cluster-Arbeitslast abzurufen, konfigurieren Sie die Arbeitslast-YAML mit den Details der privaten Registrierung.

Mit diesem Verfahren können Images aus einer privaten Containerregistrierung oder aus der eingebetteten Harbor-Registrierung abgerufen werden. In diesem Beispiel erstellen wir eine Pod-Spezifikation, die ein in der eingebetteten Harbor-Registrierung gespeichertes Image verwendet und den zuvor konfigurierten Geheimschlüssel zum Ziehen von Images nutzt.
  1. Erstellen Sie eine Beispiel-Pod-Spezifikation mit den Details zur privaten Registrierung.
    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>
    • Ersetzen Sie <workload-name> durch den Namen der Pod-Arbeitslast.
    • Ersetzen Sie <kubernetes-namespace> durch den Kubernetes-Namespace im Cluster, in dem der Pod erstellt werden soll. Hierbei muss es sich um denselben Kubernetes-Namespace handeln, in dem der Geheimschlüssel zum Ziehen von Images für den Registrierungsdienst im Tanzu Kubernetes-Cluster (z. B. dem Standard-Namespace) gespeichert ist.
    • Ersetzen Sie <Registry-IP-Address> durch die IP-Adresse für die eingebettete Harbor-Registrierung-Instanz, die auf dem Supervisor-Cluster ausgeführt wird.
    • Ersetzen Sie <vsphere-namespace> durch den vSphere-Namespace, in dem der Ziel-Tanzu Kubernetes bereitgestellt wird.
    • Ersetzen Sie <image-name> durch einen Image-Namen Ihrer Wahl.
    • Ersetzen Sie <version> durch eine geeignete Version des Images, z. B. „neueste“.
    • Ersetzen Sie <registry-secret-name> durch den Namen des Ihnen zuvor erstellten Geheimschlüssel zum Ziehen von Images .
  2. Erstellen Sie eine Arbeitslast im Tanzu Kubernetes-Cluster basierend auf der von Ihnen definierten Pod-Spezifikation.
    kubectl --kubeconfig=<path>/cluster-kubeconfig apply -f <pod.yaml>

    Der Pod sollte aus dem Image erstellt werden, das aus der Registrierung gezogen wurde.

Vertrauenswürdige Felder für externe private Registrierungen

Fügen Sie einen Zertifikateintrag (Base64-codierte Zeichenfolge eines PEM-codierten öffentlichen Zertifikats) zum Abschnitt additionalTrustedCAs in der TkgServiceConfiguration hinzu. Die Daten sind öffentliche Zertifikate, die in Klartext in der TkgServiceConfiguration gespeichert sind.

Tabelle 1. Vertrauenswürdige Felder für private Registrierungen
Feld Beschreibung
trust Abschnittsmarkierung. Akzeptiert keine Daten.
additionalTrustedCAs Abschnittsmarkierung. Enthält ein Array von Zertifikaten mit dem Namen und den Daten für jedes Zertifikat.
name Name des TLS-Zertifikats
data Die Base64-codierte Zeichenfolge eines PEM-codierten öffentlichen Zertifikats.

Entfernen externer privater Registrierungszertifikate

Entfernen Sie ein Zertifikat aus der Liste der Zertifikate im Abschnitt additionalTrustedCAs der TkgServiceConfiguration und wenden Sie die TkgServiceConfiguration auf den Tanzu Kubernetes Grid-Dienst an.

Rotierende externe private Registrierungszertifikate

Um ein Zertifikat zu rotieren, ändert der VI-Administrator oder DevOps Engineer den Inhalt des Zertifikats in der TkgServiceConfiguration- oder der Tanzu Kubernetes-Clusterspezifikation und wendet diese Konfiguration an, um eine fortlaufende Aktualisierung dieses TKC auszulösen.

Fehlerbehebung bei externen privaten Registrierungszertifikaten

Wenn Sie dem Tanzu Kubernetes Grid-Dienst mit den vertrauenswürdigen Zertifikaten konfigurieren und das selbstsignierte Zertifikat zur Cluster-Kubeconfig hinzufügen, sollten Sie in der Lage sein, erfolgreich ein Container-Image aus einer privaten Registrierung, welche dieses selbstsignierte Zertifikat verwendet, abzurufen.

Mit dem folgenden Befehl können Sie ermitteln, ob das Container-Image für eine Pod-Arbeitslast erfolgreich abgerufen wurde:

kubectl describe pod PODNAME

Diese Befehle zeigen detaillierte Status- und Fehlermeldungen für einen bestimmten Pod an. Beispiel für den Versuch, ein Image vor dem Hinzufügen benutzerdefinierter Zertifikate zum Cluster abzurufen:

Events:
  Type     Reason                        Age               From               Message
  ----     ------                        ----              ----               -------
  Normal   Scheduled                     33s               default-scheduler  ...
  Normal   Image                         32s               image-controller   ...
  Normal   Image                         15s               image-controller   ...
  Normal   SuccessfulRealizeNSXResource  7s (x4 over 31s)  nsx-container-ncp  ...
  Normal   Pulling                       7s                kubelet            Waiting test-gc-e2e-demo-ns/testimage-8862e32f68d66f727d1baf13f7eddef5a5e64bbd-v10612
  Warning  Failed                        4s                kubelet            failed to get images: ... Error: ... x509: certificate signed by unknown authority
Und wenn Sie den folgenden Befehl ausführen:
kubectl get pods
Der ErrImagePull wird auch in der allgemeinen Pod-Statusansicht angezeigt:
NAME                                         READY   STATUS         RESTARTS   AGE
testimage-nginx-deployment-89d4fcff8-2d9pz   0/1     Pending        0          17s
testimage-nginx-deployment-89d4fcff8-7kp9d   0/1     ErrImagePull   0          79s
testimage-nginx-deployment-89d4fcff8-7mpkj   0/1     Pending        0          21s
testimage-nginx-deployment-89d4fcff8-fszth   0/1     ErrImagePull   0          50s
testimage-nginx-deployment-89d4fcff8-sjnjw   0/1     ErrImagePull   0          48s
testimage-nginx-deployment-89d4fcff8-xr5kg   0/1     ErrImagePull   0          79s
Die Fehler „x509: Zertifikat von unbekannter Zertifizierungsstelle signiert“ und „ErrImagePull“ geben an, dass der Cluster nicht mit dem korrekten Zertifikat konfiguriert ist, um eine Verbindung zur Registrierung des privaten Containers herzustellen. Entweder fehlt das Zertifikat oder es ist falsch konfiguriert.

Wenn nach der Konfiguration der Zertifikate Fehler beim Herstellen einer Verbindung zu einer privaten Registrierung auftreten, können Sie überprüfen, ob in der Konfiguration angewendete Zertifikate auf den Cluster angewendet werden. Sie können mithilfe von SSH überprüfen, ob die Zertifikate ordnungsgemäß in ihrer Konfiguration angewendet wurden.

Zwei Ermittlungsschritte können durchgeführt werden, indem eine Verbindung zu einem Worker-Knoten über SSH erfolgt.
  1. Überprüfen Sie den Ordner /etc/ssl/certs/ auf Dateien mit dem Namen tkg-<cert_name>.pem, wobei <cert_name> die Eigenschaft „name“ des Zertifikats ist, das in TkgServiceConfiguration hinzugefügt wurde. Wenn die Zertifikate mit jenen in der TkgServiceConfiguration übereinstimmen und die Verwendung einer privaten Registrierung weiterhin nicht funktioniert, fahren Sie mit der Diagnose fort, indem Sie den nächsten Schritt ausführen.
  2. Führen Sie mithilfe von selbstsigniertem Zertifikaten den folgenden openssl-Verbindungstest für den Zielserver durch, indem Sie den Befehl openssl s_client -connect hostname:port_num ausführen, wobei Hostname der Hostname/DNS-Name der privaten Registrierung ist, die selbstsignierte Zertifikate verwendet, und port_num die Nummer des Ports ist, auf dem der Dienst ausgeführt wird (für HTTPS in der Regel 443). Sie können überprüfen, welcher Fehler von openssl ausgegeben wird, wenn Sie versuchen, eine Verbindung mit dem Endpunkt herzustellen, der selbstsignierte Zertifikate verwendet, und die Situation von dort aus beheben, indem Sie beispielsweise die richtigen Zertifikate zur TkgServiceConfiguration hinzufügen. Wenn der Tanzu Kubernetes-Cluster mit dem falschen Zertifikat eingebettet ist, müssen Sie die Tanzu Kubernetes Grid-Dienst-Konfiguration mit den richtigen Zertifikaten aktualisieren, den Tanzu Kubernetes-Cluster löschen und ihn dann mit der Konfiguration neu erstellen, die die korrekten Zertifikate enthält.