Warum tritt bei mir ein Buildfehler aufgrund einer fehlgeschlagenen Authentifizierung bei einer Image-Pull-Operation auf?
Virtuelle private Cloud Klassische Infrastruktur
Wenn ein Build (wie z. B. von OperatorHub oder des integrierten Entwicklerinhaltskatalogs) versucht, ein Image aus einer Red Hat-Registry zu extrahieren, schlägt die Erstellung möglicherweise mit einem Authentifizierungsfehler wie in folgender Nachricht fehl.
error: build error: After retrying 2 times, Pull image still failed due to error: unauthorized: authentication required
Standardmäßig wird Ihr Cluster mit geheimen Schlüsseln für Image-Pull-Operationen für Red Hat-Registrys wie registry.redhat.io, registry.connect.redhat.com und cloud.openshift.com eingerichtet. Außerdem verfügt
Ihr Cluster im default-Projekt über geheime Schlüssel für Image-Pull-Operationen, um auf die <region>.icr.io-Registrys für IBM Cloud Container Registry zuzugreifen.
Wenn jedoch ein Operator oder eine integrierte Vorlage über eine Buildkomponente verfügt, die ein Image aus einer privaten Registry extrahieren muss, kann der Build mit einem Authentifizierungsfehler fehlschlagen, weil der Build keinen Zugriff auf die standardmäßig verwendeten geheimen Schlüssel für Image-Pull-Operationen in seinem Servicekonto hat. Builds können standardmäßig Images extrahieren, die nur in der internen Registry gespeichert sind.
Richten Sie den Build mit Zugriff auf das Image ein - entweder indem Sie das Image aus der privaten Registry extrahieren oder indem Sie das Image aus der privaten Registry in die interne Registry importieren.
Weitere Informationen finden Sie in der Red Hat OpenShift-Dokumentation.
-
Ermitteln Sie anhand der Buildkonfigurationsdatei, auf welche Registry der Build zugreifen soll. Wenn Ihr Build beispielsweise Teil einer „ Red Hat OpenShift “-Vorlage ist, verweist der Wert „
spec.strategy.sourceStrategy.from.name“ in der Build-Konfiguration auf die private Registry unterregistry.redhat.io.oc -n openshift get template react-web-app-example -o yamlBeispielausgabe
strategy: sourceStrategy: from: kind: DockerImage name: registry.redhat.io/rhoar-nodejs-tech-preview/rhoar-nodejs-10-webapp -
Richten Sie den Build mit Image-Pull-Zugriff ein. Sie können auswählen, ob Sie das Image aus der privaten Registry extrahieren oder einen Image-Stream aus der internen Registry verwenden möchten.
- Extrahieren eines Images aus einer privaten Registry:
-
Fügen Sie in jedem Projekt einen geheimen Schlüssel für Image-Pull-Operationen mit Zugriff auf die private Registry hinzu, die von dem Build verwendet wird.
- Bei Red Hat-Registrys: Kopieren Sie den geheimen Schlüssel
pull-secretaus dem Projektopenshift-config. Dieser geheime Schlüssel enthält Pull-Zugriff auf die folgenden privaten Registrys:cloud.openshift.com,quay.io,registry.connect.redhat.comundregistry.redhat.io. - Für IBM Cloud Container Registry: Kopieren Sie die geheimen
<region>.icr.io-Schlüssel. aus demdefault-Projekt. - Bei anderen privaten Registrys: Erstellen Sie einen geheimen Schlüssel für Image-Pull-Operationen mit Image-Pull-Zugriff auf die private Registry.
- Bei Red Hat-Registrys: Kopieren Sie den geheimen Schlüssel
-
Fügen Sie den geheimen Schlüssel zum Builder-Servicekonto hinzu oder geben Sie den geheimen Schlüssel in der Build-Konfigurationsdatei an.
Beispiel für das Verbinden des geheimen Schlüssels mit dem Builder-Servicekonto in einem Projekt.
oc secrets link builder <pull-secret>Beispiel für das Referenzieren des geheimen Schlüssels in der Buildkonfigurationsdatei.
spec: output: to: kind: "DockerImage" name: "<private.registry.com>/<namespace>/<image>:<tag>" pushSecret: name: "<pull-secret>"
-
- Verwenden eines Image-Streams aus der internen Registry: Erstellen Sie einen Image-Stream in der internen Registry aus einem importierten Image aus der privaten Registry. Aktualisieren Sie dann die Buildkonfigurationsdatei, um auf den Image-Stream zu verweisen, anstatt das Image direkt aus der privaten Registry zu extrahieren.
- Extrahieren eines Images aus einer privaten Registry: