Private Image-Registry verwenden

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:

  • Der Verwaltungsdienst muss installiert sein.
  • Nutzercluster erstellen
  • Verwenden Sie im anthos-aws-Verzeichnis anthos-gke, um den Kontext zu Ihrem Nutzercluster zu wechseln.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Nutzerclusters.
  • 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:

  1. 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.

  2. 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:

  1. 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.

  2. 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
  3. 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:

  1. 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
  2. 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.

  1. 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 Namen hello-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
    
  2. Wenden Sie die Konfiguration mithilfe von kubectl auf Ihren Cluster an.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-pod.yaml
    
  3. 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

  4. 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 namens hello-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
    
  5. Wenden Sie die Konfiguration mithilfe von kubectl auf Ihren Cluster an.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-deployment.yaml
    
  6. 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
    

Nächste Schritte