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
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.
- 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 .
- Ersetzen Sie
- 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.
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
kubectl get pods
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 79sDie 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.
- Überprüfen Sie den Ordner
/etc/ssl/certs/
auf Dateien mit dem Namentkg-<cert_name>.pem
, wobei<cert_name>
die Eigenschaft „name“ des Zertifikats ist, das inTkgServiceConfiguration
hinzugefügt wurde. Wenn die Zertifikate mit jenen in derTkgServiceConfiguration
übereinstimmen und die Verwendung einer privaten Registrierung weiterhin nicht funktioniert, fahren Sie mit der Diagnose fort, indem Sie den nächsten Schritt ausführen. - 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 zurTkgServiceConfiguration
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.