In diesem Thema wird erläutert, wie Sie GKE on AWS mit einem privaten Container-Image-Repository wie Container Registry (GCR) verwenden.
Hinweis
Bevor Sie GKE on AWS verwenden, müssen die folgenden Bedingungen erfüllt sein:
- Erfüllen Sie die Voraussetzungen.
- Der Verwaltungsdienst muss installiert sein.
- Nutzercluster erstellen
- Verwenden Sie im
anthos-aws
-Verzeichnisanthos-gke
, um den Kontext zu Ihrem Nutzercluster zu wechseln. Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Nutzerclusters.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- Erstellen Sie ein Docker-Image und laden Sie es in Container Registry hoch. In den Beispielen dieses Themas wird der
hello-app
-Container verwendet, der durch Ausführen der Schritte unter Container-Webanwendung bereitstellen erstellt wurde. Google Cloud
Private Container Registries
In einer Container Registry werden Container-Images gespeichert und verteilt. Ihre GKE on AWS-Installation kann standardmäßig auf öffentliche Images zugreifen.
In Container 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 für die Authentifizierung bei der Container Registry mit der Google Cloud CLI:
gcloud auth configure-docker
Die Google Cloud CLI registriert einen Credential Helper für alle von Google unterstützten Docker-Registries.
Prüfen Sie, ob Ihre Container Registry ein Image mit
docker images
enthält:docker images
Docker stellt eine Verbindung zu Container Registry her und gibt die in Ihrem Container Registry-Repository verfügbaren Images zurück. Die folgende Antwort zeigt beispielsweise ein Container-Image mit dem Namen
hello-app
im Repository project-id.REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 minutes ago 11.5MB
Wenn Sie noch kein Container-Image haben, erstellen Sie eines anhand der Schritte unter Container-Webanwendung bereitstellen.
Dienstkonto erstellen
Ihre Nutzercluster authentifizieren sich über ein Dienstkonto für Identity and Access Management (IAM).
Führen Sie die folgenden Schritte aus, um ein neues Dienstkonto zu erstellen:
Erstellen Sie ein IAM-Dienstkonto mit der Google Cloud CLI.
gcloud iam service-accounts create account-name
Ersetzen Sie account-name durch den Namen des neuen Google Cloud Dienstkontos.
Gewähren Sie dem Dienstkonto Zugriff auf Container Registry.
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewer
Ersetzen Sie Folgendes:
- project-id für Ihr Google Cloud Projekt
- account-name durch den Namen Ihres Google Cloud Dienstkontos
Laden Sie den Dienstkontoschlüssel des Kontos herunter.
gcloud iam service-accounts keys create key.json \ --iam-account account-name@project-id.iam.gserviceaccount.com
Ersetzen Sie Folgendes:
- project-id für Ihr Google Cloud Projekt
- account-name durch den Namen Ihres Google Cloud Dienstkontos
Sie können Ihren Nutzercluster jetzt so konfigurieren, dass er eine Verbindung zu Container Registry herstellt.
Kubernetes-Secret definieren
Um den Schlüssel zur Authentifizierung bei Container Registry bereitzustellen, speichern Sie den Dienstkontoschlüssel als Kubernetes-Secret, indem Sie die folgenden Schritte ausführen:
Verwenden Sie
kubectl
, um das Secret zu erstellen.env HTTPS_PROXY=http://localhost:8118 \ kubectl create secret docker-registry gcr-secret \ --docker-server=gcr.io \ --docker-username=_json_key \ --docker-email=account-name@project-id.iam.gserviceaccount.com \ --docker-password="$(cat key.json)"
Ersetzen Sie Folgendes:
- project-id für Ihr Google Cloud Projekt
- account-name durch den Namen Ihres Google Cloud Dienstkontos
Löschen Sie die lokale Kopie des Dienstkontoschlüssels.
rm 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.imagePullSecrets
angibt.apiVersion: v1 kind: Pod metadata: name: pod-name spec: containers: - name: container-name image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: secret-name
Dabei gilt:
- pod-name durch den Namen Ihres Pods
- container-name durch den Namen des Containers im Pod
- project-id für Ihr Google Cloud Projekt
- secret-name ist der Name Ihres Registry-Secrets.
Wenn Sie zum Beispiel das Image
hello-app
abrufen 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: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: gcr-secret
Wenden Sie die Konfiguration mithilfe von
kubectl
auf Ihren Cluster an.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yaml
Bestätigen Sie mithilfe von
kubectl get
, dass der Pod ausgeführt wird.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pod/hello-pod
Die 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
imagePullSecret
in der Vorlage an.Wenn Sie beispielsweise ein Deployment des
hello-app
-Images erstellen möchten, erstellen Sie eine Datei namenshello-deployment.yaml
mit 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: "gcr.io/project-id/hello-app:v1" env: - name: "PORT" value: "50001" imagePullSecrets: - name: gcr-secret
Wenden Sie die Konfiguration mithilfe von
kubectl
auf Ihren Cluster an.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yaml
Bestätigen Sie mithilfe von
kubectl pods
, dass Ihr Deployment ausgeführt wird.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
Die Ausgabe enthält 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