Ihre GKE on AWS-Installation kann standardmäßig auf öffentliche Container-Images zugreifen. In diesem Thema wird erläutert, wie Sie GKE on AWS mit einem privaten Container-Image-Repository wie Artifact Registry verwenden.
Ab Version 1.28 bietet GKE on AWS eine Möglichkeit, private Images aus der Artifact Registry oder Container Registry abzurufen, ohne ein Kubernetes-Secret verwenden zu müssen. Weitere Informationen finden Sie unter Private Image-Registry ohne Secrets verwenden.Hinweise
Führen Sie zuerst die folgende Aufgaben aus, um die Schritte auf dieser Seite auszuführen:
- Cluster erstellen
- Erstellen Sie einen Knotenpool.
Docker-Image erstellen und in die Artifact Registry verschieben In den Beispielen auf dieser Seite wird der Container
hello-appverwendet. Um diesen Container zu erstellen, folgen Sie den Schritten zum Erstellen eines Container-Images und zum Übertragen des Docker-Images per Push an Artifact Registry, die Teil der Google Cloud -GKE sind.
In Artifact Registry nach Images suchen
Für die restlichen Schritte benötigen Sie ein Container-Image. Rufen Sie also den Namen Ihres Container-Images ab. Gehen Sie dazu so vor:
Konfigurieren Sie das Docker-Befehlszeilentool zur Authentifizierung bei Artifact Registry mit dem Google Cloud SDK:
gcloud auth configure-dockerDas
gcloud-Befehlszeilentool registriert einen Credential Helper für alle von Google unterstützten Docker-Registrys.Prüfen Sie, ob Ihre Artifact Registry ein Image mit dem Befehl
docker imagesenthält.docker imagesDocker stellt eine Verbindung zu Artifact Registry her und gibt die in Ihrem Repository verfügbaren Images zurück. Die folgende Antwort zeigt beispielsweise ein Container-Image mit dem Namen
hello-appim RepositoryPROJECT_NAMEaufus-west1-docker.pkg.dev.REPOSITORY TAG IMAGE ID CREATED SIZE us-west1-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app v1 f7cfe0d58569 21 minutes ago 11.5MB
Wenn Sie noch kein Container-Image haben, erstellen Sie eines anhand der Schritte unter Container-Webanwendung bereitstellen.
Dienstkonto erstellen
Ihre Cluster authentifizieren sich über ein Dienstkonto für Identity and Access Management (IAM).
Um ein neues Dienstkonto zu erstellen, gehen Sie so vor:
Erstellen Sie ein IAM-Dienstkonto mit der Google Cloud CLI.
gcloud iam service-accounts create ACCOUNT_NAMEErsetzen Sie ACCOUNT_NAME durch den Namen des neuen Google Cloud-Dienstkontos.
Gewähren Sie dem Dienstkonto Artifact Registry-Berechtigungen.
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/artifactregistry.readerErsetzen Sie Folgendes:
PROJECT_NAMEmit Ihrem Google Cloud ProjektACCOUNT_NAMEdurch den Namen Ihres Google Cloud Dienstkontos
Laden Sie den Dienstkontoschlüssel des Kontos herunter.
gcloud iam service-accounts keys create registry-access-key.json \ --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.comDabei gilt:
PROJECT_NAMEACCOUNT_NAME
Sie können Ihren Nutzercluster jetzt so konfigurieren, dass er eine Verbindung zu Artifact Registry herstellt.
Schlüssel im Cluster speichern
Damit der Schlüssel für die Authentifizierung bei Artifact Registry bereitgestellt wird, speichern Sie mit folgenden Schritten den Dienstkontoschlüssel als Kubernetes-Secret:
Verwenden Sie
kubectl, um das Secret zu erstellen.kubectl create secret docker-registry registry-secret \ --docker-server=LOCATION-docker.pkg.dev \ --docker-username=_json_key \ --docker-email=ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --docker-password="$(cat registry-access-key.json)"Dabei gilt:
LOCATION: der regionale oder multiregionale Speicherort für das Repository.PROJECT_NAMEACCOUNT_NAME
Löschen Sie die lokale Kopie des Dienstkontoschlüssels.
rm registry-access-key.json
Sie können jetzt in Ihren Arbeitslasten auf dieses Secret verweisen.
Arbeitslast mit einem privaten Image erstellen
Wenn Sie ein Image aus einem privaten Container-Repository mit einer Arbeitslast verwenden möchten, setzen Sie das Feld spec.imagePullSecrets auf Ihren Secret-Namen. Dieses Feld befindet sich an unterschiedlichen Standorten für Pods und Deployments.
Pod erstellen
Zum Erstellen eines Pods, der auf die Container Registry zugreifen kann, legen Sie das Feld spec.imagePullSecrets auf den Namen Ihres Secrets fest.
Erstellen Sie einen Pod, der
spec.imagePullSecretsangibt.apiVersion: v1 kind: Pod metadata: name: POD_NAME spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secretDabei gilt:
POD_NAME: der Name Ihres PodsCONTAINER_NAME: der Name des Containers im PodLOCATIONPROJECT_NAME
Wenn Sie zum Beispiel das Image
hello-appabrufen möchten, kopieren Sie die folgende YAML-Datei in eine Datei mit dem Namenhello-pod.yaml.apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secretWenden Sie die Konfiguration mithilfe von
kubectlauf Ihren Cluster an.kubectl apply -f hello-pod.yamlBestätigen Sie mithilfe von
kubectl get, dass der Pod ausgeführt wird.kubectl get pod/hello-podDie Antwort enthält einen Pod mit dem Status
Running.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Deployment erstellen
Zur Verwendung eines privaten Repositorys in einem Deployment geben Sie das
imagePullSecretin der Vorlage an.Wenn Sie beispielsweise eine Bereitstellung konfigurieren möchten, die das Image
hello-appverwendet, erstellen Sie eine Datei namenshello-deployment.yamlmit folgendem Inhalt:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 env: - name: "PORT" value: "50001" imagePullSecrets: - name: registry-secretDabei gilt:
LOCATIONPROJECT_NAME
Wenden Sie die Konfiguration mithilfe von
kubectlauf Ihren Cluster an.kubectl apply -f hello-deployment.yamlBestätigen Sie mithilfe von
kubectl pods, dass Ihre Bereitstellung ausgeführt wird.kubectl get pods --selector=app=productsDie Ausgabe zeigt drei
Running-Pods.NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m
Bereinigen
Führen Sie die folgenden Befehle aus, um die auf dieser Seite erstellten Ressourcen zu entfernen:
kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml