為何因為映像檔取回鑑別而導致建置錯誤?
虛擬專用雲端 經典基礎設施
當來自 Operator Hub 或內建開發者內容目錄等建置程序嘗試從註 Red Hat 冊表拉取映像時,建置可能會因驗證錯誤而失敗,錯誤訊息類似如下所示。
error: build error: After retrying 2 times, Pull image still failed due to error: unauthorized: authentication required
預設情況下,您的叢集會設定為使用映像拉取密鑰存取 Red Hat 註冊表,例如 registry.redhat.io GitHub、Docker registry.connect.redhat.com Hub 和 cloud.openshift.com Amazon Registry。 此外,在專案 default 中,您的叢集擁有用於存取註 <region>.icr.io 冊表的映像拉取 IBM Cloud Container Registry 機密。
不過,如果操作員或內建範本具有必須從專用登錄取回映像檔的建置元件,則建置可能會因鑑別錯誤而失敗,因為建置無法存取其服務帳戶中的預設映像檔取回密碼。 依預設,建置可以取回僅儲存在內部登錄中的映像檔。
設定具有映像檔存取權的建置,方法是從專用登錄取回映像檔,或將映像檔從專用登錄匯入內部登錄。
如需相關資訊,請參閱 Red Hat OpenShift 文件。
-
請檢查建置配置檔,以查看建置需要具備取回存取權的登錄。 例如,如果您的建置是 Red Hat OpenShift 範本的一部分,則建置配置
spec.strategy.sourceStrategy.from.name值會參照registry.redhat.io專用登錄。oc -n openshift get template react-web-app-example -o yaml輸出範例
strategy: sourceStrategy: from: kind: DockerImage name: registry.redhat.io/rhoar-nodejs-tech-preview/rhoar-nodejs-10-webapp -
設定具有映像檔取回存取權的建置。 您可以選擇從專用登錄取回映像檔,或使用內部登錄中的映像檔串流。
- 從專用登錄取回映像檔:
-
在每一個專案中,將具有取回存取權的映像檔取回密鑰新增至建置所使用的專用登錄。
- 若為 Red Hat 登錄:
openshift-config專案中的 複製pull-secret密鑰。 此密鑰包括下列專用登錄的取回存取權:cloud.openshift.com、quay.io、registry.connect.redhat.com及registry.redhat.io。 - 若為 IBM Cloud Container Registry:
default專案中的 複製<region>.icr.io密碼。 - 若為其他專用登錄: 建立映像檔取回密碼,且具有專用登錄的映像檔取回存取權。
- 若為 Red Hat 登錄:
-
將密碼新增至建置器服務帳戶 或 在建置配置檔中指定映像檔取回密碼。
將密鑰鏈結至專案中的建置器服務帳戶的範例。
oc secrets link builder <pull-secret>範例: 參照建置配置檔中的密鑰。
spec: output: to: kind: "DockerImage" name: "<private.registry.com>/<namespace>/<image>:<tag>" pushSecret: name: "<pull-secret>"
-
- 使用內部登錄中的映像檔串流: 從專用登錄中匯入的映像檔在內部登錄中建立映像檔串流。 然後,更新建置配置檔以參照映像檔串流,而不是直接從專用登錄取回映像檔。
- 從專用登錄取回映像檔: