Auf Container-Registrys zugreifen
Von IBM Cloud® Code Engine verwendete Images werden in der Regel in einer Registry gespeichert, auf die entweder öffentlich zugegriffen werden kann (öffentliche Registry) oder die mit eingeschränktem Zugriff für eine kleine Gruppe von Benutzern eingerichtet wird (private Registry).
Eine Container-Registry oder Registry ist ein Service, in dem Container-Images gespeichert werden. IBM Cloud Container Registry und Docker Hub sind beispielsweise Container-Registrys. Eine Container-Registry kann öffentlich oder privat sein. Bei einer öffentlichen Container-Registry sind keine Berechtigungsnachweise für den Zugriff erforderlich. Im Gegensatz dazu erfordert der Zugriff auf eine private Registry Berechtigungsnachweise.
Code Engine erfordert Zugriff auf Container-Registrys, um die folgenden Aktionen auszuführen:
- Zum Abrufen (oder "Extrahieren") eines Container-Image zur Ausführung einer App oder eines Jobs
- So speichern Sie ein neu erstelltes Container-Image als Ausgabe eines Image-Builds
- Speichern und Abrufen lokaler Dateien, wenn ein Build aus einer lokalen Quelle ausgeführt wird
Code Engine verarbeitet viele der zugrunde liegenden Details der Interaktionen zwischen System und Registry.
Zum Extrahieren von Images aus einer Registry wird von Code Engine eine besondere Art von geheimen Kubernetes-Schlüssel verwendet, der den Namen imagePullSecret aufweist. In diesem geheimen Schlüssel für Image-Pull-Operationen werden
die Berechtigungsnachweise für den Zugriff auf eine Container-Registry gespeichert. Wenn Sie den Zugriff auf eine Container-Registry mit Code Engine hinzufügen, um Images zu ziehen, erstellen Sie ein Image Pull Secret. Weitere Informationen
über Image Pull Secrets finden Sie in der Dokumentation Kubernetes.
Typen von Image-Registrys
Images werden typischerweise in einer Registry gespeichert, die entweder öffentlich zugänglich ist (öffentliche Registry) oder mit eingeschränktem Zugriff für eine kleine Benutzergruppen eingerichtet ist (private Registry).
Öffentliche Registrys, wie z. B. öffentlicher Docker Hub, können verwendet werden, um mit Docker und Code Engine gestartet zu werden, um Ihre erste Anwendung oder Ihren ersten Job zu erstellen. Wenn es jedoch um Unternehmensworkloads geht, verwenden Sie eine private Registry wie die in IBM Cloud Container Registry bereitgestellte, um Ihre Images vor der Verwendung durch nicht berechtigte Benutzer zu schützen. Verwenden Sie bei privaten Registern Registrierungsgeheimnisse, um sicherzustellen, dass die Anmeldedaten für den Zugriff auf das private Register verfügbar sind.
| Registry | Beschreibung |
|---|---|
| IBM Cloud Container Registry |
Mit dieser Art von Registrierung können Sie Ihr eigenes gesichertes Bildarchiv in IBM Cloud Container Registry einrichten, in dem Sie Bilder sicher speichern und mit anderen Benutzern austauschen können.
|
| Jede andere private Registry |
Sie können jede vorhandene private Registry durch Hinzufügen eines Zugriffs mit Code Engine verbinden. Wenn Sie den Zugriff sicher hinzufügen, werden die Registry-URL und die Berechtigungsnachweise in einem geheimen Kubernetes-Schlüssel
gespeichert.
|
| Öffentliche Docker Hub-Registry |
Verwenden Sie diese Art von Registry, um bestehende öffentliche Images von Docker Hub direkt in Ihre Code Engine Anwendungen oder Jobs zu ziehen. Wichtig:
Mit dem öffentlichen Docker Hub können Sie das:
|
Typen von geheimen Registry-Schlüsseln
Um auf Bilder in einer Registrierung zuzugreifen, verwendet Code Engine eine der folgenden Arten von Registrierungsgeheimnissen.
- Code Engine verwaltetes Geheimnis - Wenn Ihre Registrierung einen IBM Cloud Container Registry Namensraum verwendet, der sich in Ihrem Konto befindet, können Sie Code Engine das Registrierungsgeheimnis für Sie erstellen und verwalten lassen.
In der Konsole wird dieser automatisch erstellte geheime Registry-Schlüssel als
Code Engine managed secretbezeichnet. In der Befehlszeilenschnittstelle hat der Name eines automatisch erstellten Registrierungsgeheimnisses das Formatce-auto-icr-private-<region>. - Vom Benutzer verwalteter geheimer Schlüssel – Dies ist ein geheimer Schlüssel, den Sie erstellen und verwalten. Sie können mit einem API-Schlüssel von Ihrem Konto aus auf Images zugreifen oder ein Zugriffstoken für die Container-Registry Ihrer Auswahl verwenden; z. B. Docker Hub. In diesem Fall ist das Registrierungsgeheimnis, das in der Konsole aufgeführt wird, der Name Ihres Registrierungsgeheimnisses.
Wenn Ihre Registrierung öffentlich ist und keine Anmeldeinformationen erfordert, z. B. Code Engine Beispielbilder in icr.io/codeengine oder Docker Hub public, dann benötigen Sie kein Registrierungsgeheimnis. In diesem Fall lautet
das Registrierungsgeheimnis, das in der Konsole aufgeführt ist, None.
Auf Images von einem öffentlichen Konto zugreifen
Wenn Ihr Image in einem öffentlichen Repository, wie z. B. einem öffentlichen Docker Hub, gespeichert ist, können Sie das Image einfach direkt referenzieren, wenn Sie Ihre Anwendung implementieren oder Ihren Job ausführen. Beachten Sie, dass das Speichern von Images in einer öffentlichen Registry zwar für den Einstieg in Anwendungen und Jobs in Ordnung ist, Sie Ihre Unternehmens-Images jedoch in einer privaten Registry speichern sollten.
Zugriff auf Bilder auf Ihrem eigenen Konto von der Konsole aus
Wenn Sie auf Code Engine von einem Konto zugreifen, dessen Eigner oder Verwalter Sie sind, dann kann Code Engine automatisch Images in einen {{site.data.registryfull_notm}} Namensbereich in Ihrem Konto mit Push-Operation übertragen und mit Pull-Operation extrahieren, wenn Sie Anwendungen, Jobs oder Builds über die Konsole erstellen oder aktualisieren. Code Engine kann sogar einen Namensbereich für Sie erstellen, wenn Sie ein Image mit Push-Operation übertragen. Vollständige Informationen finden Sie in den folgenden Abschnitten:
Zugriff auf Images von Ihrem Konto mit einem API-Schlüssel
Wenn Sie mit der CLI auf Code Engine zugreifen, müssen Sie zuerst einen IAM-API-Schlüssel erstellen und dann den IAM-API-Schlüssel als Registrierungszugriff in Code Engine speichern.
Mit den folgenden Schritten wird ein API-Schlüssel erstellt, in dem die Berechtigungsnachweise einer Benutzer-ID gespeichert werden. Anstatt eine Benutzer-ID zu verwenden, können Sie einen API-Schlüssel für eine Service-ID erstellen, die über eine IBM Cloud IAM-Service-Zugriffsrichtlinie für IBM Cloud Container Registry verfügt. Wenn Sie sich für die Authentifizierung einer Benutzer-ID entscheiden, stellen Sie sicher, dass es sich bei dem Benutzer um eine Funktions-ID handelt, oder planen Sie für Fälle, in denen der Benutzer ausscheidet, damit Code Engine weiterhin auf die Registry zugreifen kann.
API-Schlüssel in Konsole erstellen
Gehen Sie wie folgt vor, um einen IBM Cloud IAM-API-Schlüssel in der Konsole zu erstellen.
-
Starten Sie die Übersicht Zugriff (IAM).
-
Wählen Sie API-Schlüssel aus.
-
Klicken Sie auf Erstellen eines IBM Cloud-API-Schlüssels.
-
Geben Sie einen Namen und eine optionale Beschreibung für den API-Schlüssel ein und klicken Sie auf Erstellen.
-
Kopieren Sie den API-Schlüssel oder klicken Sie auf die Schaltfläche für den Download, um den Schlüssel zu speichern.
Der API-Schlüssel wird nicht erneut angezeigt; stellen Sie deswegen sicher, dass Sie ihn notiert haben und bewahren Sie ihn an einem sicheren Ort auf.
Jetzt, da Sie Ihren API-Schlüssel erstellt haben, speichern Sie ihn als Registry-Zugriff.
API-Schlüssel in Befehlszeilenschnittstelle erstellen
Führen Sie zum Erstellen eines IBM Cloud IAM-API-Schlüssels in der Befehlszeilenschnittstelle den Befehl iam api-key-create aus. Um beispielsweise einen API-Schlüssel mit dem Namen cliapikey und der Beschreibung My CLI API key zu erstellen und ihn in einer Datei mit dem Namen key_file zu speichern, führen Sie den folgenden
Befehl aus:
ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
Wenn Sie Ihren Schlüssel nicht in einer Datei speichern möchten, müssen Sie den API-Schlüssel notieren, der angezeigt wird, wenn Sie ihn erstellen. Sie können ihn später nicht mehr abrufen.
Jetzt, da Sie Ihren API-Schlüssel erstellt haben, speichern Sie ihn als Registry-Zugriff.
Auf Images in einem anderen Konto zugreifen
Sie können Benutzern oder einer Service-ID IBM CloudIAM-Zugriffsrichtlinien zuordnen, um die Berechtigungen auf bestimmte Namensbereiche oder Aktionen (zum Beispiel Push- oder Pull-Aktionen) des Registry-Image zu beschränken. Danach erstellen Sie einen API-Schlüssel und speichern diese Berechtigungsnachweise für die Registry in Code Engine.
Um beispielsweise auf Images in anderen IBM Cloud Konten zuzugreifen, erstellen Sie einen API-Schlüssel, der die IBM Cloud Container Registry Berechtigungsnachweise eines Benutzers oder einer Service-ID auf diesem Konto speichert. Verwenden Sie dann in Code Enginediesen Schlüssel, um in Ihrem Konto den Zugriff zu erstellen.
Zugriff auf Images in einem privaten Docker-Hub-Konto
Um auf Images in einem privaten Docker-Hub-Konto zuzugreifen, erstellen Sie einen Registry-Zugriff, indem Sie Ihr Kennwort oder ein Zugriffstoken bereitstellen. Falls Sie ein Zugriffstoken verwenden, können Sie den Zugriff auf das Docker Hub-Konto ohne erforderliche Kennwortänderung erteilen oder widerrufen. Weitere Informationen zu Zugriffstokens und Docker Hub finden Sie unter Erstellen und Verwalten von Zugriffstokens.
Nachdem Sie entschieden haben, ob Sie Ihr Kennwort direkt verwenden oder ein Zugriffstoken erstellen möchten, erstellen Sie Ihren Registry-Zugriff.
Zugriff auf Registry zu Code Engine hinzufügen
Wenn Sie den Zugriff auf ein IBM Cloud Container Registry in einem anderen IBM Cloud-Konto einrichten möchten, um Images von einem privaten Docker-Hub-Konto mit Pull-Operation zu extrahieren oder Images mithilfe der Code Engine CLI mit Pull- oder Push-Operation zu extrahieren oder zu übertragen, können Sie den IBM API-Schlüssel oder das Docker-Hub-Kennwort oder -Zugriffstoken verwenden, um einen Registry-Zugriff über Code Engine zu erstellen, um Ihren Authentifizierungsschlüssel oder Token für Sie zu speichern.
Zugriff auf Registry in Konsole hinzufügen
Erstellen Sie zunächst ein Projekt, bevor Sie beginnen.
- Wenn Ihr Projekt den Status Aktiv hat, klicken Sie auf der Seite Code Engine Projekte auf den Namen Ihres Projekts.
- Klicken Sie auf der Seite 'Komponenten' auf Geheime Schlüssel und Konfigurationszuordnungen.
- Klicken Sie auf der Seite 'Geheime Schlüssel und Konfigurationszuordnungen' auf Erstellen, um Ihren geheimen Schlüssel zu erstellen.
- Führen Sie auf der Seite 'Create secret or configmap' die folgenden Schritte aus:
- Wählen Sie Geheimer Registry-Schlüssel aus und klicken Sie dann auf Next.
- Geben Sie einen Namen an, z. B.
mysecret-registry. - Geben Sie die Zielregistry für diesen geheimen Schlüssel an, z. B. IBM Cloud Container Registry oder Docker Hub.
- Geben Sie die Position der Registry an.
- Geben Sie einen Benutzernamen an. Wenn dieser geheime Schlüssel für IBM Cloud Container Registrygilt, lautet der Benutzername
iamapikey. Wenn dieser geheime Schlüssel für Docker Hub gilt, ist dies Ihre Docker-ID. - Geben Sie die Berechtigungsnachweise für den Benutzernamen ein. Verwenden Sie für IBM Cloud Container RegistryIhren IAM-API-Schlüssel. Für Docker Hub können Sie Ihr Docker-Hub-Kennwort oder ein Zugriffstoken verwenden. Geben Sie für andere Zielregistrys das Kennwort oder den API-Schlüssel für den Benutzernamen an.
- Klicken Sie auf Erstellen, um den geheimen Schlüssel zu erstellen.
Nachdem Ihr Geheimnis von der Konsole aus erstellt wurde, gehen Sie zur Seite Secrets and configmaps, um eine Liste der definierten Geheimnisse und configmaps anzuzeigen. Sie können Filter anwenden, um die Liste an Ihre Anforderungen anzupassen.
Sie können Zugriff auf eine Container-Registry hinzufügen, wenn Sie eine Anwendung oder einen Job erstellen, oder wenn Sie ein Image erstellen. Klicken Sie auf Image konfigurieren und geben Sie das auszuführende Container-Image an, einschließlich der Registry, in der das Image gespeichert ist, und des Registry-Zugriffs, der zum Abrufen des Images verwendet werden soll.
Zugriff auf Registry in Befehlszeilenschnittstelle hinzufügen
Seit der CLI-Version 1.42.0 sind die Definition und die Arbeit mit Secrets in der CLI unter der secret befehlsgruppe zusammengefasst. Siehe ibmcloud ce secret-Befehle.
Verwenden Sie die Option --format, um die Kategorie des Geheimnisses anzugeben, z. B. basic_auth, generic, hmac, ssh, tls oder registry. Sie können
zwar weiterhin die registry befehlsgruppe verwenden können, nutzen Sie die Vorteile der vereinheitlichten secret befehlsgruppe. Um ein Geheimnis für den Zugriff auf eine Container-Registrierung
zu erstellen, verwenden Sie den ibmcloud ce secret create --format registry befehl. Um mehr über die Arbeit mit Geheimnissen in Code Engine
zu erfahren, siehe Arbeiten mit Geheimnissen.
Um IBM Cloud Container Registry oder Docker Hub-Zugang über die CLI hinzuzufügen, verwenden Sie den secret create --format registry befehl. Dieser Befehl erfordert den Namen des Registrierungsgeheimnisses, die
URL des Registrierungsservers sowie den Benutzernamen und das Kennwort für den Zugriff auf den Registrierungsserver und lässt auch andere optionale Argumente zu. Eine vollständige Liste der Optionen finden Sie unter dem ibmcloud ce secret create befehl.
Der folgende Befehl erstellt beispielsweise einen Registrierungszugriff auf eine IBM Cloud Container Registry-Instanz namens myregistry, die sich auf dem Registrierungsserver us.icr.io befindet:
ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password API_KEY
Beispielausgabe
Creating registry secret 'myregistry'...
OK
Die folgende Tabelle fasst die Optionen zusammen, die mit dem secret create --format registry befehl in diesem Beispiel verwendet werden. Weitere Informationen über den Befehl und seine Optionen finden Sie unter
dem ibmcloud ce secret create befehl.
| Option | Beschreibung |
|---|---|
--name |
Der Name des geheimen Registry-Schlüssels. Verwenden Sie einen Namen, der innerhalb des Projekts eindeutig ist. Dieser Wert ist erforderlich.
|
--server |
Geben Sie die URL des Registry-Servers ein. Für Container Registry ist der Servername <region>.icr.io. Beispiel: us.icr.io. Für Docker Hub lautet der Wert https://index.docker.io/v1/. |
--username |
Geben Sie den Benutzernamen für den Zugriff auf den Registry-Server ein. Der Name für Container Registry lautet iamapikey. Der Name für Docker Hub ist die Docker-ID. |
--password |
Geben Sie das -Kennwort ein. Das Kennwort für Container Registry ist der API-Schlüssel. Für Docker Hub können Sie Ihr Docker-Hub-Kennwort oder ein Zugriffstoken verwenden. |
Steuern des Zugriffs auf Container Registry für Code Engine-Workloads
Angenommen, Sie möchten den Zugriff auf IBM Cloud Container Registry steuern, wenn Code Engine Images extrahiert. Beispiel: Sie möchten den Zugriff auf Container Registry auf bestimmte IP-Adressen steuern. Betrachten Sie die folgenden Ansätze.
-
Verwenden Sie eine kontextbasierte Einschränkung. Wenn Sie eine kontextbasierte Einschränkung verwenden und sich die IP-Adressen für Ihr Code Engine-Projekt ändern, müssen Sie Ihren Zugriff nicht ändern. Sie können den Zugriff auf Container Registry auf eine Netzzone beschränken, in der Ihre Netzzone Code Engine und alles umfasst, was Zugriff auf die Registry erfordert.
-
Inaktivieren Sie den öffentlichen Zugriff auf IBM Cloud Container Registry und stellen Sie sicher, dass Code Engine die privaten Endpunkte anstelle der öffentlichen Endpunkte verwendet. Siehe Verbindung zu Container Registry.
-
Um den Zugriff durch einen bestimmten IP-Bereich zu steuern, verwenden Sie einen API-Endpunkt zum Abrufen der IP-Adressen für Ihr bestimmtes Code Engine-Projekt. Es ist wichtig zu beachten, dass sich diese IP-Adressen ändern können. Sie müssen in diesem Fall die entsprechenden Schritte ausführen. Siehe Code Engine öffentliche und private IP-Adressen und Wie kann ich meine App Code Engine zu einer Zulassungsliste hinzufügen?
Hinweise zu Images in Ihrer Registry
Der Name Ihres Images, das für Ihre Anwendung bzw. Ihren Job verwendet wird, muss eines der folgenden Formate haben:
REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY:TAG, wobeiREGISTRYundTAGoptional sind. WirdREGISTRYnicht angegeben, istdocker.ioder Standardwert. WennTAGnicht angegeben ist, schließen Sie den Doppelpunkt (:) nicht ein. Der Standardwert fürTAGistlatest.REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEID, wobeiREGISTRYoptional ist WennREGISTRYnicht angegeben wird, lautet der Standardwertdocker.ioundibmals Docker-Organisation.
| Komponente | Zulässige Zeichen | Länge | Zusätzliche Regeln |
|---|---|---|---|
REGISTRY |
a-zA-Z0-9 -_. --__ |
1-253 | (0-127Periods)(label:1-63,noDashOnEnd) |
NAMESPACE |
a-z 0-9 -_ --__ |
4-30 | (start/end with letterOrNumber) |
DOCKERUSERorDOCKERORG |
a-z 0-9 |
4-30 | |
REPOSITORY |
a-z 0-9 -_. / |
2-255 | (start/end with letterOrNumber) |
TAG |
a-zA-Z0-9 -_. --__.. |
0-128 | (NOT start with periodOrDash) |
IMAGEID |
a-z 0-9 : |
(startwith sha256: noOtherColon) |
Die Teile des Imagenamens müssen die folgenden Kriterien erfüllen:
REGISTRYdarf maximal 253 Zeichen lang sein und Klein-oder Großbuchstaben, Zahlen, Punkte (.), Bindestriche (-) und Unterstreichungszeichen (_) enthalten. Verwenden Sie keinen Gedankenstrich (.) als letztes Zeichen. Verwenden Sie nicht mehr als 127 Punkte (.) und die Bezeichnungen zwischen ihnen können zwischen 1 und 63 Zeichen lang sein.NAMESPACEmuss zwischen 4 und 30 Zeichen lang sein und mit einem Kleinbuchstaben oder einer Zahl beginnen und enden.NAMESPACEkann alphanumerische Zeichen in Kleinschreibung, Bindestriche (-) und Unterstreichungszeichen (_) enthalten.DOCKERUSERorDOCKERORGkann für Docker-Registrys anstelle vonNAMESPACEverwendet werden. Geben Sie Ihren Docker-Benutzernamen oder Ihre Docker-Organisation an. Ihr Docker und Ihre Organisation müssen zwischen 4 und 30 Zeichen lang sein und dürfen nur alphanumerische Zeichen oder Zahlen in Kleinschreibung enthalten.REPOSITORYmuss zwischen 2 und 255 Zeichen lang sein und mit einem Kleinbuchstaben oder einer Zahl beginnen und enden.REPOSITORYkann alphanumerische Kleinbuchstaben, Schrägstriche (/), Punkte (.), Bindestriche (-) und Unterstreichungszeichen (_) enthalten.TAGmuss zwischen 0 und 128 Zeichen lang sein und kann Groß-oder Kleinbuchstaben, Zahlen, Punkte (.), Bindestriche (-) und Unterstreichungszeichen (_) enthalten.TAGdarf nicht mit einem Punkt oder Gedankenstrich beginnen. Wenn Sie keinen Doppelpunkt (TAG) angeben, schließen Sie auch keinen Doppelpunkt ein.IMAGEIDhat das Präfixsha256:und kann Kleinbuchstaben und Zahlen enthalten.