Systemartefakte sind in der Artifact Registry des Infrastrukturclusters der Organisation vorhanden. Wenn ein Plattformadministrator (Platform Administrator, PA) eine Organisation in einer GDC-Appliance (Google Distributed Cloud) mit Air-Gap erstellt, werden alle Systemartefakte aus dem Infrastrukturcluster der Organisation repliziert.
Der Infrastrukturbetreiber muss neue Systemartefakte in den Organisationsinfrastrukturcluster übertragen. Das Pushen neuer Systemartefakte erfolgt nur, wenn der PA die Aktivierung optionaler Funktionen anfordert oder wenn das System Fehler oder Ausfälle aufweist, die Sie durch Patchen neuer Artefakte beheben können.
Hinweise
Bitten Sie Ihren Sicherheitsadministrator, Ihnen die folgenden Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie als Administrator für den Zugriff auf Ressourcen in Artifact Registry-Systemprojekten benötigen. Die Rollen hängen vom Cluster ab, in den Sie das Container-Image übertragen möchten.
Nachdem Sie die erforderlichen Berechtigungen erhalten haben, führen Sie die folgenden Schritte aus, bevor Sie ein Image per Push an die System-Artifact Registry des Infrastrukturclusters übertragen:
Laden Sie die Distributed Cloud CLI herunter und installieren Sie sie. Folgen Sie dabei der Anleitung unter gdcloud-Befehlszeilenschnittstelle (CLI).
Installieren Sie die
docker-credential-gdcloud
-Komponente gemäß der Anleitung unter Komponenten installieren:gdcloud components install docker-credential-gdcloud
Mit dem konfigurierten Identitätsanbieter anmelden:
gdcloud auth login
Exportieren Sie die kubeconfig-Datei:
gdcloud clusters get-credentials CLUSTER_NAME
Ersetzen Sie
CLUSTER_NAME
durch den Namen des Clusters.Docker konfigurieren:
gdcloud auth configure-docker
Container-Image aus einem Speicher-Bucket herunterladen
Folgen Sie der Anleitung in diesem Abschnitt, wenn die PA das Bild aus einem Speicher-Bucket herunterladen und in die System-Artifact Registry hochladen soll. Der PA muss Details wie die Projekt- und Bucket-Namen angeben.
Als IO benötigen Sie Berechtigungen zum Herunterladen des Container-Image aus dem Speicher-Bucket:
- Bitten Sie Ihren Sicherheitsadministrator, Ihnen die Rolle „Project Bucket Object Viewer“ (
project-bucket-object-viewer
) im Namespace des Projekts zuzuweisen.
Weitere Informationen finden Sie im IAM-Runbook R0005.
Sie erhalten Lesezugriff auf den Bucket im Projekt und auf die Objekte in diesem Bucket.
Nachdem Sie die erforderlichen Berechtigungen erhalten haben, gehen Sie so vor, um das Container-Image aus dem Storage-Bucket des Namespace des PA-Projekts herunterzuladen:
Fragen Sie den PA nach dem Secret-Namen des Buckets. Der Secret-Name sieht so aus:
object-storage-key-std-user-ID
Der Secret-Name enthält einen eindeutigen
ID
-Wert für den Zugriff auf den Bucket.Kopieren Sie den Secret-Namen des Buckets.
Rufen Sie Anmeldedaten für den Bucket-Zugriff ab und konfigurieren Sie die gcloud CLI:
SECRET_NAME=SECRET_NAME ACCESS_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.access-key-id}' | base64 -d) SECRET_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.secret-access-key}' | base64 -d) S3_ENDPOINT=objectstorage.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}') echo "Access Key: ${ACCESS_KEY}" \ && echo "Secret Key: ${SECRET_KEY}" \ && echo "S3 Endpoint: ${S3_ENDPOINT}" gdcloud config set storage/s3_access_key_id ${ACCESS_KEY} gdcloud config set storage/s3_secret_access_key ${SECRET_KEY} gdcloud config set storage/s3_endpoint ${S3_ENDPOINT}
Ersetzen Sie
SECRET_NAME
durch den Wert, den Sie im vorherigen Schritt kopiert haben.Laden Sie das Container-Image aus dem Speicher-Bucket auf Ihre Workstation herunter:
gdcloud cp s3://BUCKET_NAME/g/CONTAINER_IMAGE_NAME
Ersetzen Sie Folgendes:
BUCKET_NAME
: Der Name des Storage-Buckets, der das Container-Image enthält. Dieser Name wird von der PA bereitgestellt.CONTAINER_IMAGE_NAME
: Der Name der Container-Image-Datei, die Sie aus dem Storage-Bucket herunterladen möchten.
Image in die System Artifact Registry hochladen
Führen Sie die folgenden Schritte aus, um die Datei des Container-Images, die sich auf Ihrer Workstation befindet, per Push in die System-Artifact Registry auf dem Management API-Server zu übertragen:
Öffnen Sie die Konsole.
Rufen Sie den Pfad zum System Artifact Registry-Endpunkt des Clusters ab, in den Sie das Container-Image übertragen möchten:
export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
Laden Sie das Container-Image, versehen Sie es mit einem Tag und übertragen Sie es per Push an den System Artifact Registry-Endpunkt des Clusters:
docker load --input CONTAINER_IMAGE_PATH docker tag CONTAINER_IMAGE_PATH ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH docker push ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH
Ersetzen Sie
CONTAINER_IMAGE_PATH
durch den Pfad der Container-Imagedatei in Ihrem lokalen Dateisystem. Ein gültiger Wert für diesen Pfad ist beispielsweiseoracle_db.tar
.
Harbor-Artefakt abrufen
In den meisten Fällen interagiert das GDC-System automatisch mit der System Artifact Registry (SAR), um das neueste Artefakt aus Harbor abzurufen. In einigen Sonderfällen müssen Sie diesen Vorgang manuell ausführen. So rufen Sie das Artefaktbild manuell aus Harbor ab:
Legen Sie die Artefaktdetails fest, die von den einzelnen Anwendungen definiert werden:
APP_NAME=APP HARBOR_PROJECT=HARBOR_PROJECT_NAME REPOSITORY=REPOSITORY
Ersetzen Sie Folgendes:
APP
: der Name der Anwendung.HARBOR_PROJECT_NAME
: der Name des Harbor-Projekts.REPOSITORY
: Name des Repositorys.
Informationen zum Hafen abrufen:
HARBOR_URL=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}') HARBOR_IP=${HARBOR_URL#https://}
Rufen Sie das Artefakt-Tag ab. Es gibt zwei Möglichkeiten, das Tag abzurufen:
Methode 1: Dies ist die bevorzugte Option:
- Artefakte im lokalen Bundle auflisten und das entsprechende Tag abrufen:
TAG=$(gdcloud artifacts tree ${BUNDLE_SUB_FOLDER:?} | grep ${HARBOR_PROJECT:?}/${REPOSITORY:?} | cut -d ":" -f2 | grep -v '.sig')
2. Methode: Verwenden Sie diese Methode nur, wenn die erste Methode nicht wie erwartet funktioniert:
Listen Sie die Tags in Harbor auf und wählen Sie den neuesten aus:
ADMIN_PASS=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} -n harbor-system get secret harbor-admin -o jsonpath="{.data.secret}" | base64 -d) curl -k -X GET \ --header 'Accept: application/json' \ --header "authorization: Basic $(echo -n admin:${ADMIN_PASS:?} | base64)" \ "${HARBOR_URL}/api/v2.0/projects/${HARBOR_PROJECT:?}/repositories/${REPOSITORY:?}/artifacts?with_tag=true" | jq -r '.[] | select(.tags != null) | .tags[] | {tag: .name, updated:.push_time}'
Die Ausgabe muss dem folgenden Beispiel ähneln:
{ "tag": "<tag1>", "updated": "<date1>" } { "tag": "<tag2>", "updated": "<date2>" }
Exportieren Sie den Wert des Tags mit der zuletzt aktualisierten Zeit:
TAG=MOST_RECENT_TAG
Ersetzen Sie
MOST_RECENT_TAG
durch das Tag mit dem zuletzt aktualisierten Zeitstempel.
Artefakte aus Harbor herunterladen:
gdcloud artifacts pull --single-manifest-repo \ ${HARBOR_IP:?}/${HARBOR_PROJECT:?}/${REPOSITORY:?}:${TAG:?} \ ${APP_NAME:?}-${TAG:?}
Wenn die folgende Fehlermeldung angezeigt wird, können Sie sie ignorieren:
tee: '/root/logs/artifacts_pull_--single-manifest-repo_2023.07.13:14.59.24.log': Permission denied
Bekannte Probleme
Es gibt mehrere bekannte Probleme beim Abrufen des Harbor-Artefakts:
- Möglicherweise müssen Sie das Argument
--kubeconfig ${INFRA_ORG_KUBECONFIG:?}
hinzufügen. Der Befehl
curl
kann die folgende Fehlermeldung ausgeben:certificate signed by unknown authority
. Sie können diesen Fehler mit einer der folgenden Methoden beheben:- Vorübergehende Lösung: Fügen Sie dem Befehl
gdcloud artifacts pull
das Flag--insecure
hinzu. - Zuverlässige Lösung: Vertrauen Sie der Zertifizierungsstelle der Organisationsinfrastruktur. Weitere Informationen finden Sie unter Fehler beim Abrufen von Images.
- Vorübergehende Lösung: Fügen Sie dem Befehl
Möglicherweise müssen Sie den Inhalt extrahieren:
gdcloud artifacts extract ${APP_NAME:?}-${TAG:?} ${APP_NAME:?}-${TAG:?}-extracted