IBM Cloud Docs
Image-Registry einrichten

Image-Registry einrichten

Red Hat® OpenShift® on IBM Cloud®-Cluster umfassen eine interne Registry zum lokalen Erstellen, Bereitstellen und Verwalten von Container-Images. Damit eine private Registry zum unternehmensweiten Verwalten und Steuern des Zugriffs auf Ihre Images verwendet werden kann, können Sie Ihren Cluster auch für die Nutzung von IBM Cloud® Container Registry einrichten.

Image-Registry-Lösung auswählen

Ihre Container-Images müssen in einer Container-Registry gespeichert werden, auf die Ihr Cluster zugreifen kann, um Anwendungen in Ihrem Cluster bereitzustellen. Sie können wahlweise die integrierte Registry Ihres Red Hat OpenShift-Clusters, eine private Registry mit Zugriffsbeschränkung auf ausgewählte Benutzer oder eine öffentliche Registry verwenden. Wählen Sie anhand der folgenden Tabelle die am besten geeignete Option für Ihren Anwendungsfall aus.

Interne Red Hat OpenShift Container Registry (OCR)

Für Ihren Cluster ist die interne Red Hat OpenShift Container Registry eingerichtet, d. h. Red Hat OpenShift kann den Anwendungslebenszyklus aus dem Cluster heraus automatisch erstellen, bereitstellen und verwalten. Images werden in einer unterstützenden, klassischen IBM Cloud-Dateispeichereinheit gespeichert, die beim Erstellen des Clusters bereitgestellt wird. Wenn Sie mehr Speicher benötigen, können Sie die Größe der Einheit ändern. Anwendungsfälle:

  • Red Hat OpenShift-nativer Prozess für Image-Streaming, Erstellung und App-Bereitstellung Bereitstellungsprozess auf Clusterbasis.
  • Images können für alle Projekte im Cluster gemeinsam genutzt werden. Dabei wird der Zugriff durch RBAC-Rollen gesteuert.
  • Integration der internen Registry mit anderen Red Hat-Produkten wie CloudForms für erweiterte Funktionen wie Schwachstellensuche.
  • (Optional) Die interne Registry kann durch eine Route zugänglich gemacht werden, damit Benutzer über das öffentliche Netz Images aus der Registry extrahieren können.
  • (Optional) Die interne Registry kann für das Extrahieren von Images oder für das Übertragen von Images in eine private Registry wie IBM Cloud Container Registry eingerichtet werden.

Weitere Informationen finden Sie in Interne Registry verwenden.

Private Registry

Private Registrys sind eine gute Möglichkeit, Ihre Images vor nicht autorisiertem Zugriff zu schützen. Private Registrys müssen vom Clusteradministrator eingerichtet werden, damit sichergestellt ist, dass der Zugriff, das Speicherkontingent, Image Trust und andere Funktionen erwartungsgemäß funktionieren. Ihre Red Hat OpenShift-Cluster sind standardmäßig mit dem privaten IBM Cloud Container Registry über geheime Schlüssel für Image-Pull-Operationen im default-Projekt integriert. IBM Cloud Container Registry ist eine hoch verfügbare private Multi-Tenant-Registry zum Speichern eigener Images. Von IBM bereitgestellte Images können außerdem aus der globalen Registry icr.io extrahiert werden und lizenzierte aus der berechtigten Registry. Mit IBM Cloud Container Registry können Sie Images für mehrere Cluster mit integrierten IBM Cloud-IAM-Funktionen und Abrechnung verwalten. IBM Cloud Container Registry hat gegenüber der kombinierten Verwendung mit der internen Registry folgende Vorteile:

  • Lokale Zwischenspeicherung der Images für schnellere Builds über die interne Registry
  • Der Image-Stream ist für Bereitstellungen in anderen Projekten sichtbar, d. h. die geheimen Schlüssel für Pull-Operationen müssen nicht in jedes Projekt kopiert werden.
  • Gemeinsame Nutzung von Images in mehreren Clustern, ohne die Images in mehrere Registrys zu übertragen
  • Automatische Überprüfung der Images auf Sicherheitslücken
  • Zugriffssteuerung durch IBM Cloud IAM-Richtlinien und separate regionale Registrys
  • Beibehalten von Images ohne zusätzlichen Speicherplatzbedarf in Ihrem Cluster oder in einer angehängten Speichereinheit Festlegen von Richtlinien zum Verwalten der Imageanzahl, um den Speicherplatzbedarf zu begrenzen
  • VPC-Infrastruktur: Verwendung des Endpunkts des privaten Registrierungsdienstes, damit auch Cluster, die nur einen Endpunkt des privaten Cloud-Dienstes verwenden, auf die Registrierung zugreifen können.
  • Festlegen von Kontingenten für den Datenverkehr bei Speicher- und Image-Pull-Operationen für eine optimierte Steuerung von Speicher, Nutzung und Abrechnung
  • Extrahieren lizenzierten IBM Inhalts mit einer Pull-Operation aus der Registry, für die Sie berechtigt sind.

Informationen zum Einstieg finden Sie in den folgenden Abschnitten:

Öffentliche Registry

Öffentliche Registrys wie Docker Hub bieten die Möglichkeit zur gemeinsamen Nutzung von Images über Teams, Unternehmen, Cluster und Cloud-Provider hinweg. Einige öffentliche Registrys bieten unter Umständen auch eine private Registry-Komponente. Anwendungsfälle:

  • Images im öffentlichen Netz mit Push- oder Pull-Operationen übertragen
  • Schnelle Tests für Container über Cloud-Provider hinweg.
  • Keine auf Unternehmen abgestimmte Funktionen wie Schwachstellensuche oder Zugriffsmanagement erforderlich.

Weitere Informationen finden Sie in der Dokumentation des öffentlichen Registers, z. B. in Quay oder Docker Hub.

Images in den internen Registrys speichern

Red Hat OpenShift-Cluster verfügen standardmäßig über eine interne Registry. Für die Images in der internen Registry werden Backups erstellt, sie variieren jedoch je nach Infrastrukturprovider Ihres Red Hat OpenShift on IBM Cloud-Clusters.

Klassische Cluster
Ihr Red Hat OpenShift-Cluster wird standardmäßig mit einer internen Registrierung eingerichtet, die File Storage for Classic als Sicherungsspeicher verwendet. Wenn Sie den Cluster löschen, werden die interne Registry und die zugehörigen Images ebenfalls gelöscht. Wenn Ihre Images dauerhaft gespeichert bleiben sollen, ziehen Sie die Verwendung einer privaten Registry z. B. IBM Cloud Container Registry, das Sichern Ihrer Images im permanenten Speicher z. B. Object Storage oder das Erstellen einer separaten eigenständigen Red Hat OpenShift Container Registry-Clusters (OCR-Cluster) in Betracht. Weitere Informationen finden Sie in der Dokumentation zuRed Hat OpenShift.
VPC-Cluster
Die interne Registrierung Ihres Red Hat OpenShift Clusters sichert Ihre Images in einem Bucket, der automatisch in einer IBM Cloud Object Storage Instanz in Ihrem Konto erstellt wird. Alle Daten, die im Object Storage-Bucket gespeichert sind, bleiben erhalten, selbst wenn Sie den Cluster löschen.
Klassische Cluster, VPC-Cluster oder Satellite-Cluster
Optional können Sie die interne Registrierung so einrichten, dass Daten im emptyDir des Arbeitsknotens gespeichert werden, auf dem der interne Registrierungs-Pod läuft. Dabei ist zu beachten, dass diese Daten nicht persistent sind. Wenn der Pod oder der Workerknoten neu gestartet wird, werden die gespeicherten Daten gelöscht und können nicht wiederhergestellt werden. Sie können die Images lokal im Verzeichnis emptyDir speichern, um die Leistung zu steigern, wenn Sie regelmäßig Container aus umfangreichen Images erstellen.

Sichern Sie Ihre interne Image-Registrierung auf IBM Cloud Object Storage

Virtual Private Cloud

Your images in your Red Hat OpenShift cluster internal registry are automatically backed up to an IBM Cloud Object Storage bucket. Alle Daten, die im Object Storage-Bucket gespeichert sind, bleiben erhalten, selbst wenn Sie den Cluster löschen.

Wenn das Bucket bei der Erstellung Ihres Clusters jedoch nicht erstellt wird, müssen Sie ein Bucket manuell erstellen und Ihren Cluster so einrichten, dass er das Bucket verwendet. Bis dahin verwendet die interne Registry einen Kubernetes-Datenträger emptyDir, der Ihre Container-Images auf der sekundären Platte Ihres Workerknotens speichert. Die emptyDir-Datenträger sind nicht als persistenter, hochverfügbarer Speicher eingestuft. Wenn Sie die Pods löschen, die das Image verwenden, wird das Image automatisch gelöscht.

Weitere Informationen zum manuellen Erstellen eines Buckets für Ihre interne Registry finden Sie in Clustererstellungsfehler für Cloud Object Storage-Bucket.

Images in der internen Registry in Classic-Clustern speichern

Standardmäßig verwendet die interne Registry Ihres Red Hat OpenShift Clusters ein IBM Cloud File Storage for Classic volume, um die Registry-Images zu speichern. Sie können die Standardgröße des Speicherdatenträgers überprüfen oder die Datenträgergröße aktualisieren.

Datenträgerdetails anzeigen

Zum Anzeigen von Datenträgerdetails, einschließlich Speicherklasse und -größe können Sie die Anforderung eines persistenten Datenträgers beschreiben.

oc describe pvc -n openshift-image-registry image-registry-storage

Datenträgerdetails ändern

Wenn Ihre Registry zusätzliche Gigabyte für Ihre Images benötigt, können Sie die Größe des Dateispeicherdatenträgers ändern. Weitere Informationen finden Sie in Größe und IOPS-Wert für vorhandene Speichereinheit ändern. Wenn Sie die Größe des Datenträgers in Ihrem IBM Cloud-Infrastrukturkonto ändern, wird die angehängte PVC-Beschreibung nicht aktualisiert. Stattdessen können Sie sich bei dem Pod openshift-image-registry anmelden, der den PVC registry-backing verwendet, um zu überprüfen, ob die Größe des Datenträgers geändert wird.

Images im leeren Verzeichnis des Workerknotens (emptyDir) speichern

Sie können die Images aus der internen Registry lokal im Verzeichnis emptyDir des Workerknotens (z. B. ein Bare-Metal-Workerknoten) speichern, um die Leistung zu steigern, wenn Sie regelmäßig Container aus umfangreichen Images erstellen.

Dabei ist zu beachten, dass diese Daten nicht persistent sind. Wenn der Pod oder der Workerknoten neu gestartet wird, werden die gespeicherten Daten gelöscht und können nicht wiederhergestellt werden.

  1. Rufen Sie Ihren Red Hat OpenShift-Cluster auf.
  2. Aktualisieren Sie die Configmap des Image-Registry-Operators, um den Speicher so einzustellen, dass er die emptyDir des Arbeitsknotens verwendet. Beachten Sie, dass durch die Aktualisierung der Konfigurationszuordnung für die Verwendung von emptyDir nicht der ursprüngliche PVC der Image-Registry entfernt wird.
    oc patch configs.imageregistry.operator.openshift.io/cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}'
    
  3. Wenn der Verwaltungsstatus des Bildregistrierungsbetreibers auf Unmanaged gesetzt ist, wie z. B. in Satellite-Clustern, aktualisieren Sie den Verwaltungsstatus auf Managed. Anschließend aktualisiert der Operator den Pod für die interne Registry.
    oc patch configs.imageregistry.operator.openshift.io/cluster --type merge -p '{"spec":{"managementState":"Managed"}}'
    
  4. Rufen Sie die Details für den Pod der internen Registry ab, um Ihre Änderungen zu überprüfen.
    1. Überprüfen Sie, ob der Pod image-registry aktiv ist und ob im Cluster ein Pod pro Workerknoten ausgeführt wird.

      oc get pods -n openshift-image-registry
      

      Beispielausgabe

      NAME                                               READY   STATUS    RESTARTS   AGE
      cluster-image-registry-operator-695bf78ffc-zvkhd   2/2     Running   0          33m
      image-registry-6774598589-65cnx                    1/1     Running   0          112s
      node-ca-gg66r                                      1/1     Running   0          113s
      node-ca-n8jpq                                      1/1     Running   0          113s
      node-ca-p2d7j                                      1/1     Running   0          113s
      
    2. Ermitteln Sie die öffentliche IP-Adresse des Node ab, auf der der image-registry-Pod läuft.

      oc describe pod -n openshift-image-registry <image-registry-pod> | grep Node
      

      Beispielausgabe

      Node:               169.xx.xxx.xxx/169.xx.xxx.xxx
      

      Wenn die IP-Adresse des Workerknotens privat ist, führen Sie ibmcloud oc worker ls -c <cluster> | grep <private_IP> aus und notieren Sie die entsprechende öffentliche IP-Adresse.

    3. Rufen Sie die UID des image-registry-Pods im Abschnitt metadata.uid in der YAML-Datei für den Pod ab (nicht die UID der Replikatgruppe im Abschnitt metadata.ownerReferences.uid).

      oc get pod -n openshift-image-registry <image-registry-pod> -o yaml
      

      Beispielausgabe

      apiVersion: v1
      kind: Pod
      metadata:
          uid: e8d7718d-b0bd-47e2-9aaa-05f3a608fd9b
      ...
      
  5. Vergewissern Sie sich, dass die interne Registry Daten im Datenträger emptyDir des Workerknotens speichert.
    1. Greifen Sie direkt vom Cluster auf die Registrierung zu, indem Sie den zuvor abgerufenen Arbeitsknoten verwenden. Befolgen Sie die Schritte zum Übertragen eines Testimage in die interne Registry.

      Zum Ausführen dieser Schritte, die in der Dokumentation für Red Hat OpenShift angegeben sind, benötigen Sie das CLI-Tool podman. Ihre Workerknoten verfügen möglicherweise nicht standardmäßig über dieses CLI-Tool. Die verfügbaren RHEL-Versionen finden Sie im Podman-Installationshandbuch.

    2. Navigieren Sie zum Ordner für Pods in der internen Registry, der in emptyDir gespeichert wird. Verwenden Sie für <pod_uid> die UID des Pods, die Sie zuvor abgerufen haben.

      cd var/lib/kubelet/pods/<pod_uid>/volumes/kubernetes.io~empty-dir/registry-storage/docker/registry/v2/repositories/openshift
      
    3. Stellen Sich sicher, dass Ihr Image im Repositoryverzeichnis enthalten ist.

      ls
      

      Beispielausgabe

      <myimage>  nginx  ...
      

Interne Image-Registry entfernen

Virtual Private Cloud

Die Bereitstellungen des Bildregisterbetreibers sind nur in Red Hat OpenShift on IBM Cloud Toolkit-verwalteten Clustern vorhanden. In HyperShift Clustern wird der Image-Registry-Operator in der Steuerungsebene ausgeführt.

Wenn Sie die interne Image-Registry nicht verwenden wollen, können Sie sie wie folgt entfernen.

  1. Speichern Sie eine Kopie Ihrer internen Registry-Konfigurationen.
    oc get configs.imageregistry.operator.openshift.io cluster -o yaml > configs.yaml
    
  2. Führen Sie den folgenden Patchbefehl aus, um den Verwaltungsstatus der Image-Registry in Removed zu ändern.
    kubectl patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"managementState":"Removed"}}' --type='merge'
    
  3. Nach dem Ändern des Managementstatus werden der Image-Registry-Service und die Bereitstellung aus dem openshift-image-registry-Namespace in Ihrem Cluster entfernt. Sie können die folgenden Befehle ausführen, um zu überprüfen, ob sie entfernt wurden. Beachten Sie, dass nur die Image-Registry-Implementierung und der Service entfernt werden. Die Bereitstellung und der Service des Image-Registry-Operators bleiben erhalten.
    oc get deployment -n openshift-image-registry
    
    oc get svc -n openshift-image-registry
    

Sichere externe Route für die interne Registry einrichten

Ihr Red Hat OpenShift-Cluster verfügt standardmäßig über eine interne Registry, die durch einen Service mit einer internen IP-Adresse zugänglich ist. Wenn Sie die interne Registry im öffentlichen Netz verfügbar machen möchten, können Sie eine sichere Route mit erneuter Verschlüsselung einrichten. Beispielsweise können Sie die interne Registry Ihres Clusters so einrichten, dass sie als öffentliche Registry für Bereitstellungen in anderen Projekten oder Clustern dient.

Vorbereitende Schritte:

Richten Sie für die Verwendung der internen Registry eine öffentliche Route für den Zugang zur Registry ein. Erstellen Sie anschließend einen geheimen Schlüssel zum Extrahieren von Images, der die Berechtigungsnachweise für den Zugriff auf die Registry enthält, damit Bereitstellungen in anderen Projekten Images aus dieser Registry extrahieren können.

  1. Stellen Sie über das Projekt openshift-image-registry sicher, dass der Service image-registry für die interne Registry vorhanden ist.

    oc get svc -n openshift-image-registry
    

    Beispielausgabe

    NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
    image-registry            ClusterIP      172.21.xxx.xxx    <none>          5000/TCP                     36d
    image-registry-operator   ClusterIP      None             <none>          60000/TCP                     36d
    
  2. Erstellen Sie eine geschützte Route für den Service image-registry, die reencrypt für die TLS-Terminierung verwendet. Wenn die erneute Verschlüsselung verwendet wird, beendet der Router die TLS-Verbindung mit einem Zertifikat und verschlüsselt die Verbindung zur internen Registry dann erneut mit einem anderen Zertifikat. Bei dieser Methode wird der vollständige Pfad der Verbindung zwischen Benutzer und interner Registry verschlüsselt. Wenn Sie Ihren eigenen Domänennamen angeben möchten, fügen Sie die Option --hostname hinzu.

    oc create route reencrypt --service=image-registry -n openshift-image-registry
    
  3. Rufen Sie den Hostnamen (HOST/PORT) und den PORT ab, die der Route für image-registry zugewiesen wurden.

    oc get route image-registry -n openshift-image-registry
    

    Beispielausgabe

    NAME              HOST/PORT                                                                                                  PATH      SERVICES          PORT       TERMINATION   WILDCARD
    image-registry   image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud             image-registry   5000-tcp   reencrypt     None
    
  4. Bearbeiten Sie die Route, um die Lastausgleichsstrategie auf source einzustellen, damit dieselbe Client-IP-Adresse denselben Server erreicht, wie bei einer Passthrough-Routeneinrichtung. Sie können die Strategie festlegen, indem Sie eine Annotation im Abschnitt metadata.annotations hinzufügen: haproxy.router.openshift.io/balance: source. Sie können die Konfigurationsdatei über die Red Hat OpenShift-Anwendungskonsole oder über Ihre Befehlszeile bearbeiten, indem Sie den folgenden Befehl ausführen.

    oc edit route image-registry -n openshift-image-registry
    

    Fügen Sie die Annotation hinzu.

    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
    annotations:
        haproxy.router.openshift.io/balance: source
    ...
    
  5. Wenn die Netzrichtlinien eines Unternehmens den Zugriff von Ihrem lokalen System auf öffentliche Endpunkte über Proxys oder Firewalls verhindern, lassen Sie den Zugriff auf die Unterdomäne der Route zu, die Sie in den folgenden Schritten für die interne Registry erstellen.

  6. Melden Sie sich bei der internen Registry an und verwenden Sie dabei die Route als Hostnamen.

    docker login -u $(oc whoami) -p $(oc whoami -t) image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud
    
  7. Versuchen Sie nach erfolgter Anmeldung, eine Beispielapp hello-world in die interne Registry zu übertragen.

    1. Extrahieren Sie das hello-world-Image aus DockerHub oder erstellen Sie ein Image auf Ihrer lokalen Maschine.

      docker pull hello-world
      
    2. Kennzeichnen Sie das lokale Image mit dem Hostnamen Ihrer internen Registry, dem Projekt, in dem Sie das Image bereitstellen möchten, und dem Namen und dem Tag des Images.

      docker tag hello-world:latest image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/<project>/<image_name>:<tag>
      
    3. Übertragen Sie das Image mit einer Push-Operation in die interne Registry Ihres Clusters.

      docker push image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/<project>/<image_name>:<tag>
      
    4. Überprüfen Sie, dass das Image zum Red Hat OpenShift-Image-Stream hinzugefügt wurde.

      oc get imagestream
      

      Beispielausgabe

      NAME          DOCKER REPO                                                            TAGS      UPDATED
      hello-world   image-registry-openshift-image-registry.svc:5000/default/hello-world   latest    7 hours ago
      
  8. Damit Bereitstellungen in Ihrem Projekt Images aus der internen Registry extrahieren können, erstellen Sie einen geheimen Schlüssel für Image-Pull-Operationen in Ihrem Projekt, der die Berechtigungsnachweise zum Aufrufen Ihrer internen Registry enthält. Fügen Sie den geheimen Schlüssel für Image-Pull-Operationen zum Standardservicekonto für jedes Projekt hinzu.

    1. Listen Sie die von dem Standardservicekonto verwendeten geheimen Schlüssel für Image-Pull-Operationen auf und notieren Sie sich den geheimen Schlüssel, der mit default-dockercfg beginnt.

      oc describe sa default
      

      Beispielausgabe

      ...
      Image pull secrets:
      all-icr-io
      default-dockercfg-mpcn4
      ...
      
    2. Rufen Sie die codierten Informationen zum geheimen Schlüssel im Feld data der Konfigurationsdatei ab.

      oc get secret <default-dockercfg-name> -o yaml
      

      Beispielausgabe

      apiVersion: v1
      data:
        .dockercfg: ey...=
      
    3. Decodieren Sie den Wert des Felds data.

      echo "<ey...=>" | base64 -D
      

      Beispielausgabe

      {"172.21.xxx.xxx:5000":{"username":"serviceaccount","password":"eyJ...
      
    4. Erstellen Sie einen neuen geheimen Schlüssel für Image-Pull-Operationen für die interne Registry.

      • secret_name: Geben Sie dem geheimen Schlüssel für Image-Pull-Operationen einen Namen, z. B. internal-registry.
      • --namespace: Geben Sie den Namen des Projekts ein, in dem der geheimen Schlüssel für Image-Pull-Operationen erstellt werden soll, z. B. default.
      • --docker-server: Geben Sie anstelle der internen Service-IP-Adresse (172.21.xxx.xxx:5000) den Hostnamen der image-registry-Route mit dem Port (image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud:5000) ein.
      • --docker-username: Kopieren Sie den Wert für "username" aus dem vorherigen geheimen Schlüssel für Image-Pull-Operationen, z. B. serviceaccount.
      • --docker-password: Kopieren Sie den Wert für "password" aus dem vorherigen geheimen Schlüssel für Image-Pull-Operationen.
      • --docker-email: Geben Sie Ihre Docker-E-Mail-Adresse ein, soweit vorhanden. Wenn nicht, geben Sie eine fiktive E-Mail-Adresse ein, z. B. a@b.c. Diese E-Mail-Adresse ist erforderlich, um einen geheimen Kubernetes-Schlüssel zu erstellen, wird aber nach der Erstellung nicht weiter genutzt.
      oc create secret docker-registry internal-registry --namespace default --docker-server image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud:5000 --docker-username serviceaccount --docker-password <eyJ...> --docker-email a@b.c
      
    5. Fügen Sie den geheimen Schlüssel für Image-Pull-Operationen zum Standardservicekonto Ihres Projekts hinzu.

      oc patch -n <namespace_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]'
      
    6. Wiederholen Sie diese Schritte für jedes Projekt, das Images aus der internen Registry extrahieren soll.

Nachdem Sie nun eine Zugangsroute für die interne Registry eingerichtet haben, können Sie sich anmelden und Images mit Push- oder Pull-Operationen in die Registry übertragen bzw. aus der Registry extrahieren. Weitere Informationen finden Sie in der Red Hat OpenShift-Dokumentation.

Images aus IBM Cloud Container Registry in den Image-Stream der internen Registry importieren

Standardmäßig ist Ihr Red Hat OpenShift on IBM Cloud-Cluster so eingerichtet, dass Images aus den privaten fernen IBM Cloud Container Registry-icr.io-Domänen in das Standardprojekt default extrahiert werden. Sie können ein Image von IBM Cloud Container Registry in die interne Registrierung Ihres Red Hat OpenShift Clusters importieren, indem Sie das Image als Image Stream markieren. Mit dieser Konfiguration können Sie Apps aus dem Image mithilfe des lokalen Caches der internen Registry bereitstellen. Dadurch können Ihre App-Bereitstellungen schneller erstellt werden. Auch können Bereitstellungen in anderen Projekten auf den Imagestream verweisen, damit Sie nicht in jedem Projekt Berechtigungsnachweise für geheime Image-Pull-Schlüssel zu IBM Cloud Container Registry erstellen müssen.

Wenn Sie Ihr Image in IBM Cloud Container Registry aktualisieren, wird das Image nicht automatisch in die interne Registry Ihres Red Hat OpenShift-Clusters übertragen. Konfigurieren Sie stattdessen den regelmäßigen Import oder wiederholen Sie diese Schritte, um das Bild zu markieren. Abhängig von der in Ihrer Bereitstellung verwendeten Image-Pull-Richtlinie, müssen Sie möglicherweise Ihre Bereitstellung erneut starten.

Sie möchten mehr über das Zusammenwirken von Builds, Image-Streams und interner Registry erfahren? Lesen Sie die Red Hat OpenShift-Dokumentationoder lesen Sie diesen Blog zur Verwaltung von Container-Images.

  1. Rufen Sie Ihren Red Hat OpenShift-Cluster auf.

  2. Wechseln Sie zum Projekt default, um Ihr Image in den Image-Stream zu extrahieren. Das Projekt default ist bereits mit den Berechtigungsnachweisen für den Zugriff auf die icr.io-Registrys eingerichtet.

    oc project default
    
  3. Listen Sie die verfügbaren Images in Ihrer IBM Cloud Container Registry auf. Notieren Sie das Repository und den Tag des Image, das Sie per Pull-Operation in die interne Registry Ihres Red Hat OpenShift-Clusters extrahieren möchten.

    ibmcloud cr images
    
  4. Markieren Sie das Image, um es aus Ihrem IBM Cloud Container Registry-Namensbereich als Imagestream in die interne Registry zu extrahieren. Weitere Informationen finden Sie in der Dokumentation Red Hat OpenShift oder führen Sie oc tag --help aus.

    oc tag <region>.icr.io/<namespace>/<image>:<tag> default/<image>:<tag> --reference-policy=local [--scheduled]
    
    • <region>.icr.io/<namespace>/<image>:<tag>: Verwenden Sie die zuvor abgerufenen Repository- und Tag-Informationen, um die IBM Cloud Container Registry Region, den Namensraum, das Bild und den Tag-Namen des Bildes zu vervollständigen, das Sie abrufen möchten.
    • default/<image>:<tag>: Geben Sie die Informationen für den internen Image-Stream ein, den Sie aus dem mit IBM Cloud Container Registry gekennzeichneten Image erstellen. Sie erstellen diesen Imagestream im default-Projekt, welches auch das Projekt ist, wo der Imagestream erstellt wird, wenn Sie kein Projekt angeben. Die Werte für <image>:<tag> stimmen normalerweise mit den Werten überein, die Sie zuvor abgerufen haben.
    • --reference-policy=local: Legen Sie diesen Wert auf local fest, damit eine Kopie des Image von IBM Cloud Container Registry in den lokalen Cache der internen Registry importiert wird und als Imagestream für die Projekte des Clusters verfügbar wird. Wenn Sie diesen Wert nicht angeben, verweist der Imagestream zurück auf IBM Cloud Container Registry, wenn Sie ihn in Ihren Bereitstellungen verwenden und erfordert daher Berechtigungsnachweise in dem Projekt.
    • --scheduled: Setzen Sie diese optionale Option, um einen regelmäßigen Import des Bildes von IBM Cloud Container Registry in die interne Registrierung einzurichten. Das Standardintervall beträgt 15 Minuten. Weitere Informationen finden Sie in der Red Hat OpenShift-Dokumentation.
  5. Überprüfen Sie, ob Ihr Image-Stream erstellt wird.

    oc get imagestreams
    
  6. Überprüfen Sie, dass der Image-Stream die Images erfolgreich aus IBM Cloud Container Registry extrahiert hat. Überprüfen Sie in der Ausgabe, ob das zuletzt getaggt von-Image mit Ihrem * <region>.icr.io/<namespace>/<image>@<digest>-Image übereinstimmt.

    oc describe is/<imagestream>
    

    Beispielausgabe

    NAME:            <imagestream>
    Namespace:        default
    Created:        2 days ago
    Labels:            <none>
    Annotations:        openshift.io/image.dockerRepositoryCheck=2020-03-31T09:41:36Z
    Image Repository:    image-registry.openshift-image-registry.svc:5000/default/ant1
    Image Lookup:        local=false
    Unique Images:        1
    Tags:                1
    
    latest
        tagged from <region>.icr.io/<namespace>/<image>:<tag>
    
        * <region>.icr.io/<namespace>/<image>@<digest>
            2 days ago
    

Jetzt können Ihre Entwickler den Imagstream in einer App-Bereitstellung verwenden. Das Image wird erfolgreich aus dem lokal extrahierten Image in der internen Registry erstellt. Sie müssen keinen geheimen Image-Pull-Schlüssel in dem Projekt für IBM Cloud Container Registry erstellen, denn der Imagestream ist lokal für den Cluster.

Builds in der internen Registry einrichten, um Images in IBM Cloud Container Registry zu übertragen

Wenn Sie einen Build in Ihrem Red Hat OpenShift on IBM Cloud Cluster erstellen, können Sie die interne Registrierung so einrichten, dass das Image in Ihr externes Repository in IBM Cloud Container Registry übertragen wird. Der geheime Schlüssel für Image-Pull-Operationen im Projekt default Ihres Clusters verfügt standardmäßig nur über Lesezugriff zum Extrahieren von Images aus IBM Cloud Container Registry. Zum Übertragen von Images mit Push-Operationen müssen Sie einen geheimen Schlüssel mit Schreibzugriff hinzufügen.

  1. Rufen Sie Ihren Red Hat OpenShift-Cluster auf.

  2. Wechseln Sie zum Projekt default.

    oc project default
    
  3. Führen Sie die Schritte aus, um einen IBM Cloud IAM-API-Schlüssel mit der Servicezugriffsrolle Reader und Writer einzurichten und damit Images aus Ihren icr.io-Registrys zu extrahieren bzw. mit Push-Operation dorthin zu übertragen.

    Dabei ist zu beachten, dass jeder Benutzer mit Zugriff auf das Projekt diesen geheimen Schlüssel verwenden kann, um Images in ihre private Registry zu übertragen. Sie können bei Bedarf Tools zum Anmelden und Überwachen einrichten, um zu beobachten, welche Benutzer bestimmte Aktionen in Ihrem Cluster ausführen.

  4. Wiederholen Sie den vorherigen Schritt für jede icr.io-Region, in die Sie Images übertragen möchten.

  5. Fügen Sie den geheimen Schlüssel zum Buildservicekonto hinzu und verweisen Sie auf die geheimen Schlüssel in der Buildkonfigurationsdatei. Weitere Informationen finden Sie in der Red Hat OpenShift-Dokumentation.

    1. Fügen Sie den geheimen Schlüssel zum Build-Servicekonto hinzu, indem Sie auf den geheimen Schlüssel verweisen, den Sie soeben für die Rolle builder erstellt haben, die von allen Builds im Cluster verwendet wird.

      oc secrets link builder <secret_name>
      
    2. Listen Sie die Buildkonfigurationen auf und notieren Sie sich die Buildkonfigurationen, denen Sie Push- und Pull-Zugriff auf die IBM Cloud Container Registry erteilen möchten.

      oc get bc
      
    3. Legen Sie den geheimen Schlüssel für Image-Push-Operationen für die Buildkonfiguration fest, damit sie den geheimen Schlüssel verwenden, den Sie soeben mit dem Servicezugriff Writer auf die IBM Cloud Container Registry erstellt haben.

      oc set build-secret --push bc/<build_config_name> <secret_name>
      
    4. Richten Sie den geheimen Schlüssel für Image-Pull-Operationen für die Buildkonfiguration so ein, dass Images aus der Registry extrahiert, aus der das ursprüngliche Build-Image extrahiert werden soll. Sie können beispielsweise den geheimen Schlüssel verwenden, den Sie gerade mit dem Servicezugriff Reader auf die IBM Cloud Container Registry erstellt haben, wenn sich das Quellenimage in einem IBM Cloud Container Registry-Repository befindet.

      oc set build-secret --pull bc/<build_config_name> <secret_name>
      
  6. Nachdem Sie das Build-Servicekonto und die Buildkonfigurationsdatei aktualisiert haben, sodass sie mit Push-Operation in die IBM Cloud Container Registry übertragen werden können, starten Sie Ihren Build erneut.

    oc start-build <build_name>
    
  7. Rufen Sie den Namen Ihres Build-Pods ab, wie z. B. <build>-2-build.

    oc get pods
    
  8. Überprüfen Sie die Protokolle des Builds und notieren Sie sich, wohin das Image übertragen wurde.

    oc logs <build_pod>
    

    Beispiel für ein erfolgreiches Image-Push-Protokoll

    ...
    Successfully pushed <region>.icr.io/<namespace>/<build_name>@sha256:<hash>
    Push successful
    
  9. Überprüfen Sie Ihre Images in Ihrer privaten Registry, um festzustellen, ob das Image erstellt wurde.

    ibmcloud cr image list
    

    Beispielausgabe

    Repository                                Tag       Digest     Namespace     Created         Size     Security status   
    <region>.icr.io/<namespace>/<build_name>  latest    <digest>   <namespace>   2 minutes ago   182 MB   33 Issues  
    

Ihr Red Hat OpenShift-Build kann jetzt mit Pull- bzw. Push-Operationen Images in IBM Cloud Container Registry übertragen bzw. daraus extrahieren.

IBM Cloud Container Registry verwenden

Standardmäßig ist Ihr Red Hat OpenShift on IBM Cloud-Cluster so eingerichtet, dass Images aus den privaten fernen IBM Cloud Container Registry-icr.io-Domänen in das Standardprojekt default extrahiert werden. Wenn Sie Images, die in IBM Cloud Container Registry gespeichert sind, für andere Projekte verwenden möchten, können Sie entweder das Image als Image-Stream in die interne Registry extrahieren oder geheime Schlüssel für Image-Pull-Operationen für jede globale und regionale Registry in jedem Projekt erstellen.

Images in die interne Registry importieren: Weitere Informationen finden Sie in Images aus IBM Cloud Container Registry in den Image-Stream der internen Registry importieren.

Images direkt aus der externenIBM Cloud Container Registry extrahieren: Weitere Informationen finden Sie in den folgenden Abschnitten.

Informationen zur Autorisierung Ihres Clusters zum Extrahieren von Images aus einer privaten Registry

Zum Extrahieren von Images aus einer Registry verwendet Ihr Red Hat OpenShift on IBM Cloud-Custer einen speziellen Typ eines geheimen Kubernetes-Schlüssels, einen geheimen Schlüssel für Image-Pull-Operationen (imagePullSecret). In diesem geheimen Schlüssel für Image-Pull-Operationen werden die Berechtigungsnachweise für den Zugriff auf eine Container-Registry gespeichert.

Bei der Container-Registry kann es sich um Folgendes handeln:

  • Ein privater Namensbereich in Ihrer eigenen Instanz von IBM Cloud Container Registry.
  • Ein privater Namensbereich in IBM Cloud Container Registry, der zu einem anderen IBM Cloud-Konto gehört.
  • Eine beliebige andere private Registry wie beispielsweise Docker.

Ihr Cluster ist jedoch standardmäßig so eingerichtet, dass er nur Images aus den Namensbereichen Ihres Kontos in IBM Cloud Container Registry extrahiert und Container aus diesen Images im default Red Hat OpenShift-Projekt in Ihrem Cluster bereitstellt. Wenn Sie Images in andere Projekte des Clusters oder aus anderen Container-Registrys extrahieren müssen, müssen Sie Ihre eigenen geheimen Schlüssel für Image-Pull-Operationen konfigurieren.

Standardeinrichtung eines geheimen Schlüssels für Image-Pull-Operationen

Im Allgemeinen ist Ihr Red Hat OpenShift on IBM Cloud-Cluster so konfiguriert, dass nur Images aus allen IBM Cloud Container Registry icr.io-Domänen aus dem default Red Hat OpenShift-Projekt extrahiert werden. Lesen Sie die folgenden FAQ, um mehr darüber zu erfahren, wie Sie Bilder in anderen Red Hat OpenShift Projekten oder Konten abrufen können, wie Sie den Zugriff auf Bilder einschränken können oder warum Ihr Cluster möglicherweise nicht über die standardmäßigen Bildabrufgeheimnisse verfügt.

Wie ist mein Cluster so eingerichtet, dass er Bilder aus dem Projekt default Red Hat OpenShift bezieht?
Wenn Sie einen Cluster erstellen, hat der Cluster eine IBM Cloud IAM-Service-ID, der eine Richtlinie für die IAM-Servicezugriffsrolle Leseberechtigter für IBM Cloud Container Registry zugeordnet wird. Die Service-ID-Berechtigungsnachweise werden als Identität durch einen nicht ablaufenden API-Schlüssel dargestellt, der in geheimen Schlüsseln für Image-Pull-Operationen (imagePullSecrets) in Ihrem Cluster gespeichert wird. Die geheimen Schlüssel für Image-Pull-Operationen werden zum Kubernetes-Namensbereich default hinzugefügt und zur Liste der geheimen Schlüssel im Servicekonto default für dieses Red Hat OpenShift-Projekt. Wenn Sie geheime Schlüssel für Image-Pull-Operationen verwenden, können Ihre Bereitstellungen Images (Lesezugriff) aus der globalen und regionalen IBM Cloud Container Registry extrahieren, um Container im default Red Hat OpenShift-Projekt bereitzustellen.
  • Die globale Registry speichert in sicherer Weise öffentliche Images, die von IBM zur Verfügung gestellt werden. Sie können auf diese öffentlichen Images in allen Ihren Bereitstellungen verweisen, sodass es nicht notwendig ist, unterschiedliche Verweise für Images zu verwenden, die in den einzelnen regionalen Registrys gespeichert sind.
  • Die regionale Registry dient der sicheren Speicherung Ihrer eigenen privaten Docker-Images.
Was ist, wenn ich keine Bildzugriffsgeheimnisse im Projekt default Red Hat OpenShift habe?
Sie können die geheimen Schlüssel für Image-Pull-Operationen überprüfen, indem Sie sich bei Ihrem Cluster anmelden und oc get secrets -n default | grep "icr-io" ausführen. Wenn keine geheimen icr-Schlüssel aufgelistet werden, verfügte die Person, die den Cluster erstellt hat, möglicherweise nicht über die erforderlichen Berechtigungen für IBM Cloud Container Registry in IAM. Siehe Vorhandene Cluster zur Verwendung von API-Schlüsseln in geheimen Schlüsseln für Image-Pull-Operationen aktualisieren.
Kann ich den Pull-Zugang auf ein bestimmtes regionales Register beschränken?
Ja, Sie können die vorhandene IAM-Richtlinie der Service-ID bearbeiten, die die Zugriffsrolle den Leser -Service auf diese regionale Registry oder eine Registry-Ressource, wie z. B. einen Namespace, beschränkt. Bevor Sie Registry-IAM-Richtlinien anpassen können, müssen Sie IBM Cloud IAM-Richtlinien für IBM Cloud Container Registry aktivieren.

Möchten Sie Ihre Registry-Berechtigungsnachweise noch sicherer machen? Fragen Sie Ihren Cluster-Administrator, einen Schlüsselmanagementservice-Anbieter in Ihrem Cluster zu aktivieren, um geheime Kubernetes-Schlüssel in Ihrem Cluster zu verschlüsseln, z. B. den geheimen Image-Pull-Schlüssel, der die Berechtigungsnachweise ihrer Registry speichert.

Kann ich in einem Red Hat OpenShift Projekt auch andere Bilder als default verwenden?
Standardmäßig nicht. Wenn Sie das Standardcluster-Setup verwenden, können Sie Container aus jedem Image, das in Ihrem IBM Cloud Container Registry-Namensbereich gespeichert ist, im default Red Hat OpenShift-Projekt Ihres Clusters bereitstellen. Zur Verwendung dieser Images in anderen Red Hat OpenShift-Projekten oder in anderen IBM Cloud-Konten haben Sie die Option zum Kopieren oder Erstellen eigener geheimer Schlüssel für Image-Pull-Operationen.
Kann ich Bilder von einem anderen IBM Cloud Konto abrufen?
Ja, Sie können einen API-Schlüssel in dem IBM Cloud-Konto erstellen, das Sie zu verwenden beabsichtigen. Anschließend erstellen Sie in jedem Projekt jedes Clusters, aus dem Sie Images von einem IBM Cloud-Konto extrahieren möchten, einen geheimen Schlüssel, der den API-Schlüssel enthält. Für weitere Informationen folgen Sie diesem Beispiel, bei dem ein API-Schlüssel für eine autorisierte Service-ID verwendet wird.

Informationen zur Verwendung einer Nicht-IBM Cloud-Registry wie Docker finden Sie unter Zugriff auf Images in anderen privaten Registrys.

Muss der API-Schlüssel für eine Service-ID sein? Was passiert, wenn ich das Limit an Service-IDs für mein Konto erreiche?
Das Standard-Cluster-Setup erstellt eine Service-ID zum Speichern von IBM Cloud IAM-API-Schlüsselberechtigungsnachweisen im geheimen Schlüssel für Image-Pull-Operationen. Sie können jedoch auch einen API-Schlüssel für einen einzelnen Benutzer erstellen und diese Berechtigungsnachweise in einem geheimen Schlüssel für Image-Pull-Operationen speichern. Wenn der IAM-Grenzwert für Service-IDs erreicht ist, wird Ihr Cluster ohne die Service-ID und den geheimen Schlüssel für Image-Pull-Operationen erstellt und kann standardmäßig keine Images aus den Domänen der icr.io-Registry extrahieren. Sie müssen einen eigenen geheimen Schlüssel für Image-Pull-Operationen erstellen, jedoch unter Verwendung eines API-Schlüssels für einen einzelnen Benutzer, wie zum Beispiel einer funktionellen ID, und nicht mittels einer IBM Cloud IAM-Service-ID.
Ich sehe Bildzugriffsgeheimnisse für die regionalen Registrierungsdomänen und alle Registrierungsdomänen. Welche soll ich verwenden?
Bisher erstellte Red Hat OpenShift on IBM Cloud separate geheime Schlüssel für jede regionale öffentliche Registry-Domäne (icr.io). Jetzt werden alle öffentlichen und privaten icr.io-Registry-Domänen für alle Regionen in einem einzigen geheimen all-icr-io-Schlüssel für Image-Pull-Operationen gespeichert, der automatisch im default-Kubernetes-Projekt Ihres Clusters erstellt wird.

Damit Workloads in anderen Kubernetes-Namensbereichen im Cluster Container-Images aus einer privaten Registry extrahieren können, müssen Sie jetzt nur den geheimen Schlüssel all-icr-io für Image-Pull-Operationen in dieses Kubernetes-Projekt kopieren. Anschließend geben Sie den geheimen Schlüssel all-icr-io in Ihrem Servicekonto oder in Ihrer Bereitstellung an. Den geheimen Schlüssel für Image-Pull-Operationen, der der regionalen Registry für Ihr Image entspricht, müssen Sie nicht mehr kopieren. Beachten Sie außerdem, dass keine geheimen Schlüssel für Image-Pull-Operationen in öffentlichen Registrys benötigt werden, für die keine Authentifizierung erforderlich ist.

Nachdem ich ein Bild in ein anderes Red Hat OpenShift Projekt kopiert oder ein Pull-Secret erstellt habe, bin ich fertig?
Nicht ganz. Ihre Container müssen zum Extrahieren von Images unter Verwendung des von Ihnen erstellten geheimen Schlüssels berechtigt sein. Sie können dem Servicekonto für den Namensbereich den geheimen Schlüssel für Image-Pull-Operationen hinzufügen oder in jeder Bereitstellung auf den geheimen Schlüssel verweisen. Anweisungen finden Sie unter Geheimen Schlüssel für Image-Pull-Operationen zum Bereitstellen von Containern verwenden.

Private Netzverbindung zu icr.io-Registrys

Wenn Sie Ihr IBM Cloud-Konto für die Verwendung von Serviceendpunkten einrichten, können Sie eine private Netzverbindung verwenden, um Images mit Push-Operationen an IBM Cloud Container Registry zu übertragen und mit Pull-Operationen von dort aus zu extrahieren.

Was muss ich tun, um meinen Cluster so einzurichten, dass er die private Verbindung zu icr.io registries nutzt?

  1. Aktivieren Sie eine virtuelle Routerfunktion (Virtual Router Function (VRF)) für Ihr Konto in der IBM Cloud-Infrastruktur, damit Sie den IBM Cloud Container Registry-Private-Cloud-Serviceendpunkt verwenden können. Informationen zum Aktivieren von VRF finden Sie im Abschnitt VRF aktivieren. Mit dem Befehl ibmcloud account show können Sie überprüfen, ob VRF bereits aktiviert ist.
  2. Aktivieren Sie Ihr IBM Cloud-Konto zur Verwendung von Serviceendpunkten.

IBM Cloud Container Registry verwendet automatisch den Endpunkt des privaten Cloud-Dienstes. Sie müssen den Serviceendpunkt der privaten Cloud für Ihre Red Hat OpenShift on IBM Cloud-Cluster nicht aktivieren.

Vorhandene Cluster zur Verwendung von API-Schlüsseln in geheimen Schlüsseln für Image-Pull-Operationen aktualisieren

Für neue Red Hat OpenShift on IBM Cloud-Cluster wird ein API-Schlüssel in geheimen Schlüsseln für Image-Pull-Operationen, um den Zugriff auf IBM Cloud Container Registry zu autorisieren. Mit diesen geheimen Schlüsseln für Image-Pull-Operationen können Sie Container aus Images bereitstellen, die in den Registry-Domänen icr.io gespeichert sind. Sie können die geheimen Schlüssel für Image-Pull-Operationen zu Ihrem Cluster hinzufügen, wenn Ihr Cluster ohne diese geheimen Schlüssel erstellt wurde.

Vorbereitende Schritte

  1. Rufen Sie Ihren Red Hat OpenShift-Cluster auf.

  2. Stellen Sie sicher, dass Sie über die folgenden Berechtigungen verfügen: IBM Cloud IAM Operator or Administrator-Plattformzugriffsrolle für Red Hat OpenShift on IBM Cloud. Der Account-Besitzer kann Ihnen die Rolle mit dem folgenden Befehl zuweisen.

    ibmcloud iam user-policy-create EMAIL --service-name containers-kubernetes --roles "Administrator,Operator"
    
  3. IBM Cloud IAM-Plattformzugriffsrolle Administrator für IBM Cloud Container Registry, über alle Regionen und Ressourcengruppen. Die Gültigkeit der Richtlinie kann nicht auf eine bestimmte Region oder Ressourcengruppe begrenzt werden. Der Account-Besitzer kann Ihnen die Rolle mit dem folgenden Befehl zuweisen.

    Überprüfen Sie, ob das Geheimnis erfolgreich erstellt wurde

    ibmcloud iam user-policy-create <your_user_email> --service-name container-registry --roles Administrator
    
  4. Wenn Ihr Konto das Erstellen von Service-IDs einschränkt, fügen Sie die Rolle Erstellungsfunktion für Service-IDs zu Identity and Access Management in der Konsole hinzu (iam-identity in der API oder in der CLI).

  5. Wenn Ihr Konto das Erstellen von API-Schlüsseln einschränkt, fügen Sie die Rolle Erstellungsfunktion für Benutzer-API-Schlüssel zu Identity and Access Management in der Konsole hinzu (iam-identity in der API oder in der CLI).

Aktualisierung Ihres geheimen Image-Pull-Schlüssels

Ihren geheimen Image-Pull-Schlüssel des Clusters in dem default-Kubernetes-Namensbereich aktualisieren.

  1. Rufen Sie Ihre Cluster-ID ab.

    ibmcloud oc cluster ls
    
  2. Führen Sie den folgenden Befehl aus, um eine Service-ID für den Cluster zu erstellen und der Service-ID die IAM-Servicezugriffsrolle Leseberechtigter für IBM Cloud Container Registry zuzuordnen. Mit dem Befehl wird auch ein API-Schlüssel erstellt, der die Identität der Berechtigungsnachweise der Service-ID annimmt, und der API-Schlüssel wird in einem geheimen Kubernetes-Schlüssel für Image-Pull-Operationen im Cluster gespeichert. Der geheime Schlüssel für Image-Pull-Operationen befindet sich im default Red Hat OpenShift-Projekt.

    ibmcloud oc cluster pull-secret apply --cluster <cluster_name_or_ID>
    

    Wenn Sie diesen Befehl ausführen, wird die Erstellung von IAM-Berechtigungsnachweisen und geheimen Schlüsseln für Image-Pull-Operationen eingeleitet, deren Ausführung einige Zeit dauern kann. Sie können Container, die ein Image aus IBM Cloud Container Registry-Domänen icr.io extrahieren, erst bereitstellen, wenn die geheimen Schlüssel für Image-Pull-Operationen erstellt wurden.

  3. Überprüfen Sie, ob die geheimen Schlüssel (Secrets) für Image-Pull-Operationen in Ihrem Cluster erstellt wurden.

    oc get secrets | grep icr-io
    

    Beispielausgabe

    all-icr-io           kubernetes.io/dockerconfigjson        1         16d
    
  4. Aktualisieren Sie Ihre Containerbereitstellungen, um Images aus dem icr.io-Domänennamen zu extrahieren.

  5. Optional: Wenn Sie eine Firewall haben, stellen Sie sicher, dass Sie ausgehenden Netzverkehr an die Registry-Teilnetze für die Domänen zulassen, die Sie verwenden.

  6. Führen Sie Ihre Konfiguration mit einer der folgenden Optionen aus.

Verwendung eines Bildabrufgeheimnisses für den Zugriff auf Bilder in externen privaten Registern

Richten Sie einen eigenen geheimen Schlüssel für Image-Pull-Operationen in Ihrem Cluster ein, um Container in anderen Red Hat OpenShift-Projekten als default bereitzustellen, um Images zu verwenden, die in anderen IBM Cloud-Konten gespeichert sind, oder um Images zu verwenden die in externen privaten Registrys gespeichert sind. Weiterhin können Sie einen eigenen geheimen Schlüssel für Image-Pull-Operationen erstellen, um IAM-Zugriffsrichtlinien anzuwenden, die Berechtigungen auf bestimmte Namensbereiche für Registry-Images oder Aktionen (z. B. push oder pull) beschränken.

Nachdem Sie den geheimen Schlüssel zum Extrahieren von Images erstellt haben, müssen Ihre Container den geheimen Schlüssel verwenden, um zum Extrahieren eines Image aus der Registry berechtigt zu sein. Sie können dem Servicekonto für das Projekt den geheimen Schlüssel für Image-Pull-Operationen hinzufügen oder in jeder Bereitstellung auf den geheimen Schlüssel verweisen. Anweisungen finden Sie unter Geheimen Schlüssel für Image-Pull-Operationen zum Bereitstellen von Containern verwenden.

Geheime Schlüssel für Image-Pull-Operationen sind nur für die Red Hat OpenShift-Projekte gültig, für die sie erstellt wurden. Wiederholen Sie diese Schritte für jeden Namensbereich, in dem Sie Container bereitstellen möchten.

Vorbereitende Schritte:

  1. Richten Sie einen Namensbereich in IBM Cloud Container Registry ein und übertragen Sie Images per Push-Operation an diesen Namensbereich.
  2. Erstellen Sie einen Cluster.
  3. Rufen Sie Ihren Red Hat OpenShift-Cluster auf.

Wählen Sie zur Verwendung Ihres eigenen geheimen Schlüssels für Image-Pull-Operationen eine der folgenden Optionen aus:

Wenn Sie bereits einen geheimen Schlüssel für Image-Pull-Operationen in Ihrem Projekt erstellt haben, den Sie in Ihrer Bereitstellung verwenden möchten, finden Sie weitere Informationen unter Container mithilfe des erstellten geheimen Schlüssels für Image-Pull-Operationen (imagePullSecret) bereitstellen.

Vorhandenen geheimen Schlüssel für Image-Pull-Operationen kopieren

Sie können einen geheimen Schlüssel für Image-Pull-Operationen, wie z. B. den, der automatisch für das default Red Hat OpenShift-Projekt erstellt wird, in andere Projekte in Ihrem Cluster kopieren. Wenn Sie andere IBM Cloud IAM-API-Schlüsselberechtigungsnachweise für dieses Projekt verwenden möchten, z. B. um den Zugriff auf bestimmte Projekte einzuschränken oder um Images mit Pull-Operation aus anderen IBM Cloud-Konten zu extrahieren, erstellen Sie stattdessen einen geheimen Schlüssel für Image-Pull-Operationen.

  1. Listen Sie die verfügbaren Red Hat OpenShift-Projekte in Ihrem Cluster auf oder erstellen Sie ein Projekt, das verwendet werden soll.

    oc get projects
    

    Beispielausgabe

    default          Active
    ibm-cert-store   Active
    ibm-system       Active
    kube-public      Active
    kube-system      Active
    

    Erstellung eines Projekts

    oc new-project <project_name>
    
  2. Listen Sie die vorhandenen geheimen Schlüssel für Image-Pull-Operationen im default Red Hat OpenShift-Projekt für IBM Cloud Container Registry auf.

    oc get secrets -n default | grep icr-io
    

    Beispielausgabe

    all-icr-io          kubernetes.io/dockerconfigjson        1         16d
    
  3. Kopieren Sie den geheimen Schlüssel all-icr-io für Image-Pull-Operationen vom Projekt default in das Projekt Ihrer Wahl. Die neuen geheimen Schlüssel für Image-Pull-Operationen tragen den Namen <project_name>-icr-<region>-io.

    oc get secret all-icr-io -n default -o yaml | sed 's/default/<new-project>/g' | oc create -n <new-project> -f -   
    
  4. Überprüfen Sie, ob die geheimen Schlüssel erfolgreich erstellt wurden.

    oc get secrets -n <project_name> | grep icr-io
    
  5. Zum Bereitstellen von Containern fügen Sie den geheimen Schlüssel für Image-Pull-Operationen zu jeder Bereitstellung oder zum Servicekonto des Projekts hinzu, sodass alle Bereitstellungen im Projekt Images aus der Registry extrahieren können.

Geheimen Schlüssel für Image-Pull-Operationen mit unterschiedlichen Berechtigungsnachweisen für IAM-API-Schlüssel erstellen

Sie können Benutzern oder einer Service-ID IBM Cloud IAM-Zugriffsrichtlinien zuweisen, um die Berechtigungen auf bestimmte Namensbereiche für Registry-Images oder Aktionen (wie push oder pull) zu beschränken. Anschließend erstellen Sie einen API-Schlüssel und speichern diese Registry-Berechtigungsnachweise in einem geheimen Schlüssel für Image-Pull-Operationen für Ihren Cluster.

Wenn Sie beispielsweise auf Images in anderen IBM Cloud-Konten zugreifen möchten, erstellen Sie einen API-Schlüssel, der die IBM Cloud Container Registry-Berechtigungsnachweise eines Benutzers oder einer Service-ID in diesem Konto speichert. Anschließend speichern Sie Im Konto Ihres Clusters die API-Schlüsselberechtigungsnachweise in einem geheimen Schlüssel für Image-Pull-Operationen für jeden Cluster und jedes Clusterprojekt.

Bei Ausführung der folgenden Schritte wird ein API-Schlüssel erstellt, von dem die Berechtigungsnachweise einer IBM Cloud IAM-Service-ID gespeichert werden. Anstatt eine Service-ID zu verwenden, können Sie auch einen API-Schlüssel für eine Benutzer-ID erstellen, die eine IBM Cloud IAM-Servicezugriffsrichtlinie für IBM Cloud Container Registry hat. Stellen Sie jedoch sicher, dass der Benutzer eine funktionsfähige ID ist, oder treffen Sie Vorkehrungen für den Fall, dass der Benutzer ausscheidet, sodass der Cluster weiterhin auf die Registry zugreifen kann.

  1. Listen Sie die verfügbaren Red Hat OpenShift-Projekte in Ihrem Cluster auf oder erstellen Sie ein Projekt, in dem Container aus Ihren Registry-Images bereitgestellt werden sollen.

    oc get projects
    

    Beispielausgabe

    default          Active
    ibm-cert-store   Active
    ibm-system       Active
    kube-public      Active
    kube-system      Active
    

    Erstellung eines Projekts

    oc new-project <project_name>
    
  2. Erstellen Sie eine IBM Cloud IAM-Service-ID für Ihren Cluster, die für die IAM-Richtlinien und die API-Schlüsselberechtigungsnachweise in dem geheimen Schlüssel für Image-Pull-Operationen verwendet wird. Stellen Sie sicher, dass Sie die Service-ID mit einer Beschreibung versehen, die Ihnen später beim Abrufen der Service-ID hilft, zum Beispiel indem Sie den Clusternamen und das Projekt mitangeben.

    ibmcloud iam service-id-create <cluster_name>-<project>-id --description "Service ID for IBM Cloud Container Registry in Red Hat OpenShift on IBM Cloud cluster <cluster_name> project <project>"
    
  3. Erstellen Sie eine angepasste IBM Cloud IAM-Richtlinie für Ihre Cluster-Service-ID, die Zugriff auf IBM Cloud Container Registry erteilt.

    ibmcloud iam service-policy-create <cluster_service_ID> --roles <service_access_role> --service-name container-registry [--region <IAM_region>] [--resource-type namespace --resource <registry_namespace>]
    
    cluster_service_ID
    Erforderlich. Ersetzen Sie den Wert durch die <cluster_name>-<kube_namespace>-id-Service-ID, die Sie zuvor für Ihren Kubernetes-Cluster erstellt haben.
    --service-name container-registry
    Erforderlich. Geben Sie container-registry so ein, dass die IAM-Richtlinie für IBM Cloud Container Registry gilt.
    --roles <service_access_role>
    Erforderlich. Geben Sie die Servicezugriffsrolle für IBM Cloud Container Registry ein, an die Sie den Service-ID-Zugriff bereichsorientieren möchten. Gültige Werte sind Reader, Writer und Manager.
    --region <IAM_region>
    Optional. Wenn Sie den Bereich der Zugriffsrichtlinie auf bestimmte IAM-Regionen festlegen wollen, geben Sie die Regionen in einer durch Kommas getrennten Liste ein. Mögliche Werte sind global und die lokalen Registry-Regionen.
    --resource-type namespace --resource <registry_namespace>
    Optional. Wenn Sie den Zugriff ausschließich auf Images in bestimmten IBM Cloud Container Registry-Namensbereichen beschränken möchten, geben Sie den Ressourcentyp namespace ein und geben Sie <registry_namespace> an. Führen Sie zum Auflisten von Registry-Namensbereichen den Befehl ibmcloud cr namespaces aus.
  4. Erstellen Sie einen API-Schlüssel für die Service-ID. Benennen Sie den API-Schlüssel ähnlich wie Ihre Dienst-ID und geben Sie die zuvor erstellte Dienst-ID an, <cluster_name>-<kube_namespace>-id. Stellen Sie sicher, dass Sie für den API-Schlüssel eine Beschreibung angeben, die Ihnen später das Abrufen des Schlüssels erleichtert.

    ibmcloud iam service-api-key-create <cluster_name>-<project>-key <cluster_name>-<project>-id --description "API key for service ID <service_id> in Red Hat OpenShift on IBM Cloud cluster <cluster_name> project <project>"
    
  5. Ermitteln Sie Ihren Wert für API Key in der Ausgabe des vorherigen Befehls.

    Please preserve the API key! It can't be retrieved after it's created.
    
    Name          <cluster_name>-<kube_namespace>-key   
    Description   key_for_registry_for_serviceid_for_kubernetes_cluster_multizone_namespace_test   
    Bound To      crn:v1:bluemix:public:iam-identity::a/1bb222bb2b33333ddd3d3333ee4ee444::serviceid:ServiceId-ff55555f-5fff-6666-g6g6-777777h7h7hh   
    Created At    2019-02-01T19:06+0000   
    API Key       i-8i88ii8jjjj9jjj99kkkkkkkkk_k9-llllll11mmm1   
    Locked        false   
    UUID          ApiKey-222nn2n2-o3o3-3o3o-4p44-oo444o44o4o4   
    
  6. Erstellen Sie einen geheimen Schlüssel für Image-Pull-Operationen, um die API-Schlüssel-Berechtigungsnachweise im Cluster-Projekt zu speichern. Wiederholen Sie diesen Schritt für jedes Projekt jedes Clusters und für jede icr.io-Domäne, aus der Sie Images extrahieren möchten.

    oc --namespace <project> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=iamapikey --docker-password=<api_key_value> --docker-email=<docker_email>
    
    --namespace <project>
    Erforderlich. Geben Sie das Red Hat OpenShift-Projekt Ihres Clusters an, das Sie für den Service-ID-Namen verwendet haben.
    <secret_name>
    Erforderlich. Geben Sie einen Namen für Ihren geheimen Schlüssel für Image-Pull-Operationen ein.
    --docker-server <registry_URL>
    Erforderlich. Setzen Sie die URL auf die Image-Registry, in der Ihr Registry-Namensbereich eingerichtet ist. Informationen zu verfügbaren Domänen finden Sie unter Lokale Regionen.
    --docker-username iamapikey
    Erforderlich. Geben Sie den Benutzernamen für die Anmeldung bei Ihrer privaten Registry ein. Wenn Sie IBM Cloud Container Registry verwenden, geben Sie iamapikey ein.
    --docker-password <token_value>
    Erforderlich. Geben Sie den Wert für Ihren API-Schlüssel (API Key) ein, den Sie zuvor ermittelt haben.
    --docker-email <docker-email>
    Erforderlich. Falls Sie über eine Docker-E-Mail-Adresse verfügen, geben Sie diese ein. Wenn nicht, geben Sie eine fiktive E-Mail-Adresse ein, z. B. a@b.c. Diese E-Mail-Adresse ist erforderlich, um einen geheimen Kubernetes-Schlüssel zu erstellen, wird aber nach der Erstellung nicht weiter genutzt.
  7. Überprüfen Sie, ob der geheime Schlüssel erfolgreich erstellt wurde. Ersetzen Sie <project> durch den project, in dem Sie den geheimen Schlüssel für Image-Pull-Operationen erstellt haben.

    oc get secrets --namespace <project>
    
  8. Fügen Sie einem Kubernetes Service-Konto den geheimen Schlüssel für Image-Pull-Operationen hinzu, sodass jeder Pod in dem Projekt den geheimen Schlüssel für Image-Pull-Operationen verwenden kann, wenn Sie einen Container bereitstellen.

Zugriff auf Images in anderen privaten Registrys

Wenn bereits eine private Registry vorhanden ist, müssen Sie die Berechtigungsnachweise für die Registry in einem geheimen Kubernetes-Schlüssel für Image-Pull-Operationen speichern und diesen geheimen Schlüssel in Ihrer Konfigurationsdatei referenzieren.

Vorbereitende Schritte:

  1. Erstellen Sie einen Cluster.
  2. Rufen Sie Ihren Red Hat OpenShift-Cluster auf.

Gehen Sie wie folgt vor, um einen geheimen Schlüssel für Image-Pull-Operationen zu erstellen:

  1. Erstellen Sie den geheimen Kubernetes-Schlüssel, um Ihre Berechtigungsnachweise für die private Registry zu speichern.

    oc --namespace <project> create secret docker-registry <secret_name>  --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email>
    
    --namespace <project>
    Erforderlich. Das Red Hat OpenShift-Projekt Ihres Clusters, in dem Sie den geheimen Schlüssel verwenden und Container bereitstellen möchten. Zum Auflisten der Projekte in Ihrem Cluster führen Sie den Befehl oc get projects aus.
    <secret_name>
    Erforderlich. Der Name, den Sie für Ihren geheimen Schlüssel für Image-Pull-Operationen verwenden wollen.
    --docker-server <registry_URL>
    Erforderlich. Die URL der Registry, in der Ihre privaten Images gespeichert sind.
    --docker-username <docker_username>
    Erforderlich. Der Benutzername für die Anmeldung bei Ihrer privaten Registry.
    --docker-password <token_value>
    Erforderlich. Das Kennwort für die Anmeldung bei Ihrer privaten Registry, z. B. ein Tokenwert.
    --docker-email <docker-email>
    Erforderlich. Falls Sie über eine Docker-E-Mail-Adresse verfügen, geben Sie diese ein. Falls Sie nicht über eine solche Adresse verfügen, geben Sie eine fiktive E-Mail-Adresse ein (z. B. a@b.c). Diese E-Mail-Adresse ist erforderlich, um einen geheimen Kubernetes-Schlüssel zu erstellen, wird aber nach der Erstellung nicht weiter genutzt.
  2. Überprüfen Sie, ob der geheime Schlüssel erfolgreich erstellt wurde. Ersetzen Sie <project> durch den Namen des Projekts, in dem Sie den geheimen Schlüssel für Image-Pull-Operationen erstellt haben.

    oc get secrets --namespace <project>
    
  3. Erstellen Sie einen Pod, der den geheimen Schlüssel für Image-Pull-Operationen referenziert.

Geheimen Schlüssel für Image-Pull-Operationen zum Bereitstellen von Containern verwenden

Sie können einen geheimen Schlüssel für die Pull-Operation von Images in Ihrer Pod-Bereitstellung definieren oder den geheimen Schlüssel für die Pull-Operation von Images in Ihrem Kubernetes-Servicekonto speichern, sodass er für alle Bereitstellungen verfügbar ist, die kein Kubernetes-Servicekonto im Projekt angeben.

Zur Planung, wie geheime Image-Pull-Schlüssel in Ihrem Cluster verwendet werden sollen, wählen Sie zwischen den folgenden Optionen.

  • Verweis auf den geheimen Schlüssel für die Pull-Operation von Images in Ihrer Pod-Bereitstellung: Verwenden Sie diese Option, wenn Sie nicht allen Pods in Ihrem Projekt standardmäßig Zugriff auf Ihre Registry gewähren wollen. Entwickler können den geheimen Schlüssel für Image-Pull-Operationen in jede Podbereitstellung einbeziehen, die auf Ihre Registry zugreifen muss.
  • Seichern des geheimen Schlüssels für Image-Pull-Operationen im Kubernetes Servicekonto: Verwenden Sie diese Option, um Zugriff auf Images in Ihrer Registry für alle Bereitstellungen in den ausgewählten Red Hat OpenShift-Projekten zu erteilen. Um einen geheimen Schlüssel für Image-Pull-Operationen im Kubernetes Service-Konto zu speichern, verwenden Sie die folgenden Schritte.

Geheimen Schlüssel für Image-Pull-Operationen im Kubernetes Service-Konto für das ausgewählte Projekt speichern

Jedes Red Hat OpenShift-Projekt verfügt über ein Kubernetes Servicekonto mit dem Namen default. Innerhalb des Projekts können Sie den geheimen Schlüssel für Image-Pull-Operationen zu diesem Servicekonto hinzufügen, um den Zugriff für Pods zu erteilen, die die Images aus Ihrer Registry extrahieren. Bereitstellungen, die kein Servicekonto angeben, verwenden automatisch das default-Servicekonto für dieses Red Hat OpenShift-Projekt.

  1. Prüfen Sie, ob bereits ein geheimer Schlüssel für Image-Pull-Operationen für Ihr Standardservicekonto vorhanden ist.

    oc describe serviceaccount default -n <project_name>
    

    Wenn <none> im Eintrag Geheime Schlüssel für Image-Pull-Operationen angezeigt wird, ist kein geheimer Schlüssel für Image-Pull-Operationen vorhanden.

  2. Fügen Sie Ihrem Standardservicekonto den geheimen Schlüssel für Image-Pull-Operationen hinzu.

    • Beispielbefehl zum Hinzufügen des geheimen Image-Pull-Schlüssels, wenn kein geheimer Image-Pull-Schlüssel definiert ist.

      oc patch -n <project_name> serviceaccount/default -p '{"imagePullSecrets":[{"name": "<image_pull_secret_name>"}]}'
      
    • Beispielbefehl zum Hinzufügen des geheimen Image-Pull-Schlüssels, wenn kein geheimer Image-Pull-Schlüssel bereits definiert ist.

      oc patch -n <project_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]'
      
  3. Überprüfen Sie, ob Ihr geheimer Schlüssel für Image-Pull-Operationen Ihrem Standardservicekonto hinzugefügt wurde.

    oc describe serviceaccount default -n <project_name>
    

    Beispielausgabe

    Name:                default
    Namespace:           <namespace_name>
    Labels:              <none>
    Annotations:         <none>
    Image pull secrets:  <image_pull_secret_name>
    Mountable secrets:   default-token-sh2dx
    Tokens:              default-token-sh2dx
    Events:              <none>
    

    Wenn der geheime Schlüssel für Image-Pull-Operationen den Eintrag <secret> (not found) enthält, überprüfen Sie, dass der geheime Schlüssel für Image-Pull-Operationen im selben Projekt wie Ihr Servicekonto vorhanden ist, indem Sie oc get secrets -n project ausführen.

  4. Erstellen Sie eine Podkonfigurationsdatei mit dem Namen mypod.yaml, um einen Container aus einem Image in Ihrer Registry bereitzustellen.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod-container
          image: <region>.icr.io/<project>/<image>:<tag>
    
  5. Erstellen Sie den Pod in dem Cluster, indem Sie die Konfigurationsdatei mypod.yaml anwenden.

    oc apply -f mypod.yaml
    

Cluster einrichten, mit dem Software per Pull-Operation übertragen werden kann

Sie können Ihren Red Hat OpenShift on IBM Cloud-Cluster so einrichten, dass Software, für die Sie berechtigt sind, per Pull-Operation übertragen wird. Bei der Software handelt es sich um eine Gruppe geschützter Container-Images, die in Helm-Charts gepackt sind, für deren Nutzung Sie durch IBM berechtigt wurden. Die Software, für die Sie eine Berechtigung haben, wird in der speziellen IBM Cloud Container Registry-Domäne cp.icr.io gespeichert. Um auf diese Domäne zugreifen zu können, müssen Sie einen geheimen Schlüssel für Image-Pull-Operationen mit einem Berechtigungsschlüssel für Ihren Cluster erstellen und diesen geheimen Schlüssel für Image-Pull-Operationen dem Kubernetes Servicekonto für jedes Projekt hinzufügen, in dem die Software bereitgestellt werden soll.

Vorbereitende Schritte: Greifen Sie auf Ihren Red Hat OpenShift-Cluster zu.

  1. Fordern Sie den Berechtigungsschlüssel für die Bibliothek mit der Software an, für die Sie berechtigt sind.

    1. Melden Sie sich auf MyIBM.com an und blättern Sie zum Abschnitt Containersoftware-Bibliothek. Klicken Sie auf View library.
    2. Klicken Sie auf der Seite Access your container software > Entitlement keys auf Copy key. Mit diesem Schlüssel wird der Zugriff auf die gesamte Software in Ihrer Containersoftwarebibliothek autorisiert, für die Sie berechtigt sind.
  2. Erstellen Sie in dem Projekt, in dem Sie die Container, für die Sie berechtigt sind, bereitstellen möchten, einen geheimen Schlüssel für Image-Pull-Operationen, damit Sie auf die Registry cp.icr.io, für die Sie berechtigt sind, zugreifen können. Verwenden Sie den Berechtigungsschlüssel, den Sie zuvor als Wert für --docker-password abgerufen haben. Weitere Informationen finden Sie unter Zugriff auf Images in anderen privaten Registrys.

    oc create secret docker-registry entitled-cp-icr-io --docker-server=cp.icr.io --docker-username=cp --docker-password=<entitlement_key> --docker-email=<docker_email> -n <project>
    
  3. Fügen Sie den geheimen Schlüssel für Image-Pull-Operationen dem Servicekonto des Namensbereichs hinzu, sodass jeder Container im Projekt den Berechtigungsschlüssel zum Übertragen von Images, für die eine Berechtigung besteht, verwenden kann. Weitere Informationen finden Sie unter Geheimen Schlüssel für Image-Pull-Operationen zum Bereitstellen von Containern verwenden.

    oc patch -n <project> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"entitled-cp-icr-io"}}]'
    
  4. Erstellen Sie einen Pod in dem Projekt, der einen Container aus einem Image in der Registry erstellt, für die Sie berechtigt sind.

    oc run <pod_name> --image=cp.icr.io/<image_name> -n <project> --generator=run-pod/v1
    
  5. Stellen Sie sicher, dass Ihr Container erfolgreich aus dem Image, für das Sie berechtigt sind, erstellt werden konnte, indem Sie überprüfen, ob sich der Pod in einem aktiven Status (Running) befindet.

    oc get pod <pod_name> -n <project>
    

Welcher Schritt soll als Nächstes ausgeführt werden? Sie können das Helm-Chart-Repository entitled einrichten, in dem Helm-Charts gespeichert werden, die Software mit Berechtigung enthalten. Wenn Sie Helm bereits in Ihrem Cluster installiert haben, führen Sie folgenden Befehl aus: helm repo add entitled https://raw.githubusercontent.com/IBM/charts/master/repo/entitled.

Private Registry zum globalen geheimen Schlüssel für Pull-Operationen hinzufügen

RHEL-Arbeitsknoten

In Clustern, die nur RHEL-Arbeitsknoten verwenden, können Sie ein globales Image-Pull-Geheimnis einrichten, das jeder Arbeitsknoten im Cluster verwenden kann, um Images aus einer privaten Registry zu ziehen.

Standardmäßig verfügt Ihr Red Hat OpenShift on IBM Cloud-Cluster über einen globalen geheimen Schlüssel für Image-Pull-Operationen für die folgenden Registrys, damit die Red Hat OpenShift-Standardkomponenten bereitgestellt werden können.

  • cloud.openshift.com
  • quay.io
  • registry.connect.redhat.com
  • registry.redhat.io

Ersetzen Sie den geheimen Schlüssel für Image-Pull-Operationen nicht durch einen geheimen Schlüssel für Image-Pull-Operationen, der nicht über die Berechtigungsnachweise für die Standard-Registrys von Red Hat verfügt. Wenn Sie dies tun, können die Red Hat OpenShift-Standardkomponenten, die in Ihrem Cluster installiert sind, wie z. B. der OperatorHub, fehlschlagen, weil sie keine Images aus diesen Registrys extrahieren können.

Vorbereitende Schritte:

Um private Registrys hinzuzufügen, bearbeiten Sie den Wert für globale geheime Schlüssel für Image-Pull-Operationen pull-secret im Projekt openshift-config.

  1. Erstellen Sie einen Wert für einen geheimen Schlüssel, der die Berechtigungsnachweise enthält, um auf Ihre private Registry zuzugreifen, und speichern Sie den Wert für den decodierten geheimen Schlüssel in einer JSON-Datei. Wenn Sie den Wert für den geheimen Schlüssel erstellen, werden die Berechtigungsnachweise automatisch in Base64 codiert. Mit der Option --dry-run wird der Wert für den geheimen Schlüssel nur erstellt und es wird kein Wert für ein geheimes Objekt in Ihrem Cluster erstellt. Der Wert für den decodierten geheimen Schlüssel wird anschließend zur späteren Verwendung in Ihrem globalen geheimen Schlüssel für Pull-Operationen in einer JSON-Datei gespeichert.

    oc create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email> --dry-run=true --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > myregistryconfigjson
    
    --namespace <project>
    Erforderlich. Das Red Hat OpenShift-Projekt Ihres Clusters, in dem Sie den geheimen Schlüssel verwenden und Container bereitstellen möchten. Zum Auflisten der Projekte in Ihrem Cluster führen Sie den Befehl oc get ns aus.
    <secret_name>
    Erforderlich. Der Name, den Sie für Ihren geheimen Schlüssel für Image-Pull-Operationen verwenden wollen.
    --docker-server <registry_URL>
    Erforderlich. Die URL der Registry, in der Ihre privaten Images gespeichert sind.
    --docker-username <docker_username>
    Erforderlich. Der Benutzername für die Anmeldung bei Ihrer privaten Registry.
    --docker-password <token_value>
    Erforderlich. Das Kennwort für die Anmeldung bei Ihrer privaten Registry, z. B. ein Tokenwert.
    --docker-email <docker-email>
    Erforderlich. Falls Sie über eine Docker-E-Mail-Adresse verfügen, geben Sie diese ein. Falls Sie nicht über eine solche Adresse verfügen, geben Sie eine fiktive E-Mail-Adresse ein (z. B. a@b.c). Diese E-Mail-Adresse ist erforderlich, um einen geheimen Kubernetes-Schlüssel zu erstellen, wird aber nach der Erstellung nicht weiter genutzt.
    --dry-run=true
    Wählen Sie diese Option, um nur den geheimen Wert zu erstellen und nicht das geheime Objekt in Ihrem Cluster zu erstellen und zu speichern.
    --output="jsonpath={.data.\.dockerconfigjson}"
    Rufen Sie nur den Wert .dockerconfigjson aus dem Datenabschnitt des geheimen Kubernetes-Schlüssels ab.
    | base64 --decode > myregistryconfigjson
    Laden Sie die decodierten geheimen Daten in eine lokale Datei myregistryconfigjson herunter.
  2. Rufen Sie den decodierten Wert des geheimen Schlüssels des standardmäßigen globalen geheimen Schlüssels für Pull-Operationen ab und speichern Sie ihn in einer Datei dockerconfigjson.

    oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > dockerconfigjson
    
  3. Kombinieren Sie die heruntergeladene Datei myregistryconfigjson für geheime Schlüssel für Pull-Operationen für die private Registry mit der standardmäßigen Datei dockerconfigjson für globale geheime Schlüssel für Pull-Operationen.

    jq -s '.[0] * .[1]' dockerconfigjson myregistryconfigjson > dockerconfigjson-merged
    
  4. Aktualisieren Sie den globalen geheimen Schlüssel für Pull-Operationen mit der kombinierten Datei dockerconfigjson-merged.

    oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=dockerconfigjson-merged
    
  5. Überprüfen Sie, ob der globale geheime Schlüssel aktualisiert wurde. Stellen Sie sicher, dass sich Ihre private Registry und jede der standardmäßigen Red Hat-Registrys in der Ausgabe des folgenden Befehls wiederfinden.

    oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
    

    Beispielausgabe

    {
        "auths": {
            "cloud.openshift.com": {
                "auth": "<encoded_string>",
                "email": "email@example.com"
            },
            "quay.io": {
                "auth": "<encoded_string>",
                "email": "email@example.com"
            },
            "registry.connect.redhat.com": {
                "auth": "<encoded_string>",
                "email": "email@example.com"
            },
            "registry.redhat.io": {
                "auth": "<encoded_string>",
                "email": "email@example.com"
            },
            "<private_registry>": {
                "username": "iamapikey",
                "password": "<encoded_string>",
                "email": "email@example.com",
                "auth": "<encoded_string>"
            }
        }
    }
    
  6. Damit die globalen Konfigurationsänderungen aufgenommen werden, müssen Sie alle Workerknoten in Ihrem Cluster erneut laden.

    1. Notieren Sie sich die IDs der Workerknoten in Ihrem Cluster.

      ibmcloud oc worker ls -c <cluster_name_or_ID>
      
    2. Für klassische Cluster Laden Sie jeden Workerknoten erneut. Sie können mehrere Worker Nodes neu laden, indem Sie mehrere -w Optionen einbeziehen, aber stellen Sie sicher, dass genügend Worker Nodes gleichzeitig für Ihre Anwendungen laufen, um einen Ausfall zu vermeiden.

      ibmcloud oc worker reload -c <cluster_name_or_ID> -w <workerID_1> -w <workerID_2>
      
    3. Für VPC-Cluster Ersetzen Sie jeden Workerknoten. Bevor Sie beginnen, stellen Sie sicher, dass Ihr Cluster über genügend andere Workerknoten verfügt, damit Ihre Pods neu geplant und weiter ausgeführt werden können.

      ibmcloud oc worker replace --cluster <cluster_name_or_ID> --worker <worker_node_ID>
      
  7. Wenn sich die Workerknoten wieder in einwandfreiem Zustand befinden, überprüfen Sie, ob der globale geheime Schlüssel für Pull-Operationen auf einem Workerknoten aktualisiert wurde.

    1. Starten Sie einen Debug-Pod, um sich bei einem Workerknoten anzumelden. Verwenden Sie die Private IP, die Sie zuvor für <node_name> abgerufen haben.

      oc debug node/<node_name>
      
    2. Ändern Sie das Stammverzeichnis in den Host, so dass Sie Dateien auf dem Workerknoten anzeigen können.

      chroot /host
      
    3. Stellen Sie sicher, dass die Docker-Konfigurationsdatei die Registry-Berechtigungsnachweise enthält, die mit dem globalen geheimen Schlüssel für Pull-Operationen übereinstimmen, den Sie festgelegt haben.

      vi /.docker/config.json
      

Aktualisierung des globalen Pull-Geheimnisses

RHCOS-Arbeiter-Knoten RHEL-Arbeitsknoten

In Clustern, die RHCOS-Worker oder eine Kombination aus RHCOS- und RHEL-Workern verwenden, können Sie die folgenden Schritte ausführen, um das globale Pull-Secret in Ihrem Red Hat OpenShift on IBM Cloud-Cluster zu aktualisieren.

Standardmäßig verfügt Ihr Red Hat OpenShift on IBM Cloud-Cluster über einen globalen geheimen Schlüssel für Image-Pull-Operationen für die folgenden Registrys, damit die Red Hat OpenShift-Standardkomponenten bereitgestellt werden können.

  • cloud.openshift.com
  • quay.io
  • registry.connect.redhat.com
  • registry.redhat.io

Ersetzen Sie den geheimen Schlüssel für Image-Pull-Operationen nicht durch einen geheimen Schlüssel für Image-Pull-Operationen, der nicht über die Berechtigungsnachweise für die Standard-Registrys von Red Hat verfügt. Wenn Sie dies tun, können die Red Hat OpenShift-Standardkomponenten, die in Ihrem Cluster installiert sind, wie z. B. der OperatorHub, fehlschlagen, weil sie keine Images aus diesen Registrys extrahieren können.

  1. Erstellen Sie ein Geheimnis, das die Anmeldeinformationen für die zu verwendende Registrierung enthält.
    oc create secret docker-registry docker-auth-secret \
    --docker-server=REGISTRY \
    --docker-username=USERNAME \
    --docker-password=PASSWORD \
    --namespace kube-system
    
    Beispiel für einen create secret-Befehl
    oc create secret docker-registry docker-auth-secret \
    --docker-server=REGISTRY \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  2. Erstellen Sie ein DaemonSet, um das Geheimnis auf alle Arbeitsknoten anzuwenden.
    cat << EOF | oc create -f -
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: update-docker-config
      namespace: kube-system
      labels:
        app: update-docker-config
    spec:
      selector:
        matchLabels:
          name: update-docker-config
      template:
        metadata:
          labels:
            name: update-docker-config
        spec:
          initContainers:
            - command: ["/bin/sh", "-c"]
              args:
                - >
                  echo "Checking if RHEL or RHCOS host";
                  [[ -s /docker-config/.docker/config.json  ]] && CONFIG_PATH=/docker-config/.docker || CONFIG_PATH=/docker-config/root/.docker;
                  echo "Backing up or restoring config.json";
                  [[ -s \$CONFIG_PATH/config.json ]] && cp \$CONFIG_PATH/config.json \$CONFIG_PATH/config.json.bak || cp \$CONFIG_PATH/config.json.bak \$CONFIG_PATH/config.json;
                  echo "Merging secret with config.json";
                  /host/usr/bin/jq -s '.[0] * .[1]' \$CONFIG_PATH/config.json /auth/.dockerconfigjson > \$CONFIG_PATH/config.tmp;
                  mv \$CONFIG_PATH/config.tmp \$CONFIG_PATH/config.json;
                  echo "Sending signal to reload crio config";
                  pidof crio;
                  kill -1 \$(pidof crio)
              image: icr.io/ibm/alpine:latest
              imagePullPolicy: IfNotPresent
              name: updater
              resources: {}
              securityContext:
                privileged: true
              volumeMounts:
                - name: docker-auth-secret
                  mountPath: /auth
                - name: docker
                  mountPath: /docker-config
                - name: bin
                  mountPath: /host/usr/bin
                - name: lib64
                  mountPath: /lib64
          containers:
            - resources:
                requests:
                  cpu: 0.01
              image: icr.io/ibm/alpine:latest
              name: sleepforever
              command: ["/bin/sh", "-c"]
              args:
                - >
                  while true; do
                    sleep 100000;
                  done
          hostPID: true
          volumes:
            - name: docker-auth-secret
              secret:
                secretName: docker-auth-secret
            - name: docker
              hostPath:
                path: /
            - name: bin
              hostPath:
                path: /usr/bin
            - name: lib64
              hostPath:
                path: /lib64
                hostPathType: Directory
    EOF
    
  3. Überprüfen Sie, ob die Pods laufen.
    oc get daemonset -n kube-system update-docker-config
    

Containerd-Konfiguration für angepasste IBM Cloud Kubernetes Service-Registry aktualisieren

Mit Kubernetes Version 1.22 oder höher können Sie containerd-Konfigurationsdateien auf Workerknoten verwenden, um das Extrahieren aus einer Container-Registry zu konfigurieren. Sie können eine Dämongruppe verwenden, um die Konfigurationen für alle Knoten in einem Cluster zu aktualisieren. Dadurch wird verhindert, dass Konfigurationen gelöscht werden, wenn Workerknoten erneut geladen oder neue Worker hinzugefügt werden.

Beispiel für eine Dämongruppe zur Aktualisierung einer containerd-Konfiguration für eine angepasste Registry

Verwenden Sie die YAML-Beispieldatei, um eine Dämongruppe zu definieren, die auf allen Workerknoten ausgeführt wird, um eine Hostkonfiguration für die containerd-Registry festzulegen oder zu aktualisieren und an den entsprechenden containerd-Registry-Pfad anzuhängen.

Das Beispiel legt die folgende Registry-Hostkonfiguration für DockerHub fest. Diese Registry-Hostkonfiguration wird bereits während der Worker-Bereitstellungsphase bereitgestellt und automatisch konfiguriert. Der Container init initialisiert hosts.toml auf jedem Arbeitsknoten nach der Bereitstellung und nach dem Neuladen oder Neustart der Arbeitsknoten.

server = "https://docker.io"
[host."https://registry-1.docker.io"]
capabilities = ["pull", "resolve"]

Beispiel für YAML-Datei:

apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
    name: containerd-dockerhub-registry-config
name: containerd-dockerhub-registry-config
namespace: kube-system
spec:
selector:
    matchLabels:
    name: containerd-dockerhub-registry-config
template:
    metadata:
    labels:
        name: containerd-dockerhub-registry-config
    spec:
    initContainers:
    - image: alpine:3.13.6
        name: containerd-dockerhub-registry-config
        command:
        - /bin/sh
        - -c
        - |
            #!/bin/sh
            set -uo pipefail
            cat << EOF > /etc/containerd/certs.d/docker.io/hosts.toml
            server = "https://docker.io"
            [host."https://registry-1.docker.io"]
            capabilities = ["pull", "resolve"]
            EOF
        volumeMounts:
        - mountPath: /etc/containerd/certs.d/docker.io/
        name: dockerhub-registry-config
    containers:
    - name: pause
        image: "us.icr.io/armada-master/pause:3.5"
        imagePullPolicy: IfNotPresent
    volumes:
    - name: dockerhub-registry-config
        hostPath:
        path: /etc/containerd/certs.d/docker.io/

Weitere Informationen zum Aktualisieren einer containerd-Registry-Hostkonfiguration finden Sie in der containerd-Dokumentation.