Zulassung privilegierter Arbeitslasten im Autopilot-Modus steuern

Sie können privilegierte Arbeitslasten im GKE-Autopilot-Modus (Google Kubernetes Engine) ausführen, indem Sie Zulassungslisten für diese Arbeitslasten in Ihren Clustern installieren. In diesem Dokument wird beschrieben, wie Sie die folgenden Aufgaben ausführen:

  • Konfigurieren Sie GKE so, dass nur bestimmte privilegierte Arbeitslasten im Autopilot-Modus ausgeführt werden.
  • Installieren Sie Zulassungslisten für privilegierte Arbeitslasten.

Dieses Dokument richtet sich an Personen mit den folgenden Rollen:

  • Sicherheitsingenieure, die dafür sorgen möchten, dass Drittanbieter-Arbeitslasten eine Zulassungsliste benötigen, um in Ihren Clustern ausgeführt zu werden, und aus von GKE genehmigten Quellen stammen.
  • Plattformtechniker, die Drittanbieter-Arbeitslasten in Clustern aktivieren möchten, um Anwendungsteams zu unterstützen.

Sie sollten mit den folgenden Konzepten vertraut sein:

Privilegierte Arbeitslasten in Autopilot

Im Autopilot-Modus wird eine Standardgruppe von Einschränkungen für Arbeitslasten erzwungen, um die Sicherheit zu verbessern. Sie können diese Einschränkungen ändern, um bestimmte privilegierte Arbeitslasten auszuführen, indem Sie Zulassungslisten installieren, die diesen Arbeitslasten entsprechen. Standardmäßig können Sie mit Autopilot Zulassungslisten von Autopilot-Partnern und bestimmten Open-Source-Projekten installieren. Berechtigte GKE-Kunden können auch Zulassungslisten für privilegierte Arbeitslasten erstellen, die sie in Cloud Storage-Buckets hochladen.

Jede Zulassungsliste ist eine Datei, die einer bestimmten privilegierten Arbeitslast entspricht. So führen Sie eine privilegierte Arbeitslast aus:

  1. Konfigurieren Sie den Cluster so, dass die Installation von Zulassungslisten aus bestimmten Pfaden zulässig ist. Standardmäßig werden alle Zulassungslisten von Autopilot-Partnern und genehmigten Open-Source-Projekten unterstützt.
  2. Erstellen Sie im Cluster einen AllowlistSynchronizer, der die Zulassungsliste installiert und auf dem neuesten Stand hält.

Fehlerberichte und Feature Requests für privilegierte Arbeitslasten und Zulassungslisten

Der Inhaber einer privilegierten Arbeitslast ist für das Erstellen, Entwickeln und Verwalten seiner Arbeitslasten und Zulassungslisten verantwortlich. Wenn Sie einen Fehler finden oder einen Feature-Antrag für eine privilegierte Arbeitslast oder Zulassungsliste haben, wenden Sie sich an den entsprechenden Inhaber.

Hinweise

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl gcloud components update ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.

Voraussetzungen

  • Für die benutzerdefinierte Ressource „AllowlistSynchronizer“ ist die GKE-Version 1.32.2-gke.1652000 oder höher erforderlich.
  • Sie müssen wissen, welche privilegierte Arbeitslast Sie in Ihrem Cluster ausführen möchten.
  • Wenn Sie die Konfiguration des Zulassungslistenpfads für einen Cluster ändern möchten, muss Ihr Cluster die GKE-Version 1.35 oder höher ausführen.

Zulassungslistenpfade für einen Cluster konfigurieren

In diesem Abschnitt erfahren Sie, wie Sie einen Cluster so konfigurieren, dass die Installation von Zulassungslisten aus einer Reihe genehmigter Pfade unterstützt wird. Standardmäßig unterstützt Autopilot die Installation von der Zulassungsliste von GKE-Partnern und genehmigten Open-Source-Projekten. Sie können diese Standardkonfiguration für einzelne Cluster ändern. Sie können auch zugelassene Quellen auf der Zulassungsliste für eine gesamte Organisation, einen Ordner oder ein Projekt mit einer Organisationsrichtlinie angeben.

  1. Ermitteln Sie die Pfade zu den Dateien, die Sie auf die Zulassungsliste setzen und dem Cluster hinzufügen möchten. Sie können beim Erstellen oder Aktualisieren Ihres Clusters mehrere Pfade angeben. Sie können die Installation von der Zulassungsliste aus einer beliebigen Quelle auch deaktivieren, indem Sie anstelle eines Pfads einen leeren String angeben. Weitere Informationen zu den Pfaden, die Sie angeben können, finden Sie unter Pfade für Zulassungslisten.

  2. Wenn Sie die zugelassenen Quellen auf der Zulassungsliste für einen Cluster steuern möchten, verwenden Sie das Flag --autopilot-privileged-admission, wenn Sie einen Autopilot- oder Standardcluster erstellen oder aktualisieren, wie im folgenden Befehl:

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME: ein Name für den neuen Cluster.
    • LOCATION: Der Standort der Clustersteuerungsebene, z. B. us-central1.
    • ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: eine durch Kommas getrennte Liste von Pfaden zu Dateien oder Verzeichnissen auf der Zulassungsliste. Beispiel: gke://*,gs://my-agent/privileged-logging-agent.yaml. Sie können die Installation von der Zulassungsliste aus einer beliebigen Quelle auch deaktivieren, indem Sie einen leeren String ("") angeben.

Wenn Sie einen vorhandenen Cluster aktualisieren, ohne das Flag --autopilot-privileged-admission anzugeben, ändert sich die vorhandene Pfadkonfiguration für diesen Cluster nicht. Sie müssen dieses Flag nicht jedes Mal angeben, wenn Sie einen Cluster aktualisieren.

Nachdem der Vorgang zum Erstellen oder Aktualisieren des Clusters abgeschlossen ist, können Sie Zulassungslisten aus den angegebenen Pfaden installieren, indem Sie AllowlistSynchronizers erstellen.

Neuen AllowlistSynchronizer erstellen

Wenn Sie eine privilegierte Arbeitslast ausführen möchten, fügen Sie den Pfad zur entsprechenden Zulassungslistendatei in einer YAML-Datei zu einer AllowlistSynchronizer-Spezifikation hinzu. Anschließend stellen Sie den AllowlistSynchronizer in Ihrem Cluster bereit.

  1. Erstellen Sie in einem Texteditor eine neue YAML-Datei.
  2. Fügen Sie der YAML-Datei den folgenden Inhalt hinzu:

    apiVersion: auto.gke.io/v1
    kind: AllowlistSynchronizer
    metadata:
      name: ALLOWLIST_SYNCHRONIZER_NAME
    spec:
      allowlistPaths:
      - ALLOWLIST1_PATH
      - ALLOWLIST2_PATH
    

    Ersetzen Sie Folgendes:

    • ALLOWLIST_SYNCHRONIZER_NAME: Name des neuen Synchronizers. Wählen Sie einen aussagekräftigen Namen, der die Arbeitslast oder das Team angibt, für die bzw. das die Zulassungsliste gilt.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: Eine Liste von Pfaden zu Dateien oder Verzeichnissen, die Sie auf die Zulassungsliste setzen möchten, um sie zu installieren, wie im folgenden Beispiel:

      allowlistPaths:
      - gke://*
      - gs://my-agent/privileged-logging-agent.yaml
      

      Die Clusterkonfiguration muss die von Ihnen angegebenen Pfade unterstützen, wie im Abschnitt Zulassungslistenpfade für einen Cluster konfigurieren beschrieben.

  3. Stellen Sie die YAML-Datei im Cluster bereit:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Ersetzen Sie PATH_TO_YAML_FILE durch den Pfad zur YAML-Datei, die Sie im vorherigen Schritt erstellt haben.

    Der AllowlistSynchronizer-Controller installiert Zulassungslistendateien aus den angegebenen Pfaden in Ihrem Cluster.

  4. Warten Sie, bis der Synchronizer den Status Ready meldet:

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
        --timeout=60s
    

Sie können die Installation von Zulassungslisten und die Bereitstellung privilegierter Arbeitslasten auch in Ihre CI/CD-Pipeline (Continuous Integration/Continuous Deployment) einbinden. Konfigurieren Sie Ihren Workflow so, dass er wartet, bis die Zulassungsliste erfolgreich installiert wurde, bevor die entsprechende Arbeitslast bereitgestellt wird.

Vorhandenen AllowlistSynchronizer aktualisieren

Sie können einen vorhandenen AllowlistSynchronizer aktualisieren, um Dateien für die Zulassungsliste hinzuzufügen oder zu entfernen. Sie können vorhandene Synchronisierer in Situationen wie den folgenden aktualisieren:

  • Der Workload-Inhaber fügt eine neue Zulassungslistendatei mit einem anderen Namen hinzu.
  • Sie möchten einem vorhandenen Synchronizer, in dem ähnliche Zulassungslisten gruppiert sind, eine neue Arbeitslast-Zulassungsliste hinzufügen.
  • Sie möchten eine Zulassungsliste aus einem Synchronizer entfernen, weil Sie die entsprechende Arbeitslast nicht mehr verwenden möchten.

So aktualisieren Sie ein vorhandenes AllowlistSynchronizer-Objekt:

  1. Listen Sie die vorhandenen Synchronizer in Ihrem Cluster auf:

    kubectl get allowlistsynchronizer
    
  2. Öffnen Sie die Spezifikation des Synchronizers, den Sie aktualisieren möchten, in einem Texteditor.

  3. Aktualisieren Sie das Feld spec.allowlistPaths, um Dateipfade auf der Zulassungsliste hinzuzufügen, zu ändern oder zu entfernen.

  4. Speichern Sie die Datei und schließen Sie den Texteditor.

  5. Aktualisierte Konfiguration auf den Cluster anwenden:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Ersetzen Sie PATH_TO_YAML_FILE durch den Pfad zur YAML-Datei, die Sie im vorherigen Schritt aktualisiert haben.

Wenn Sie eine aktualisierte Synchronizer-Konfiguration bereitstellen, wird das Feld managedAllowlistStatus.generation im Status des AllowlistSynchronizer-Objekts um eins erhöht. Der AllowlistSynchronizer-Controller wendet dann Ihre Änderungen an.

Status der Allowlist-Synchronisierung beobachten

Nachdem Sie einen AllowlistSynchronizer installiert oder einen vorhandenen Synchronizer aktualisiert haben, können Sie den Synchronisierungsstatus überwachen. Anhand des Status können Sie die Installation, Entfernung oder Änderung von Zulassungslistendateien sowie alle Fehler nachvollziehen, die auftreten können.

Führen Sie den folgenden Befehl aus, um den allgemeinen Status der Synchronisierung zu überwachen:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

Die Ausgabe sieht etwa so aus:

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/example-allowlist-2.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/example-allowlist-1.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

In diesem Beispiel konnte die Zulassungsliste example-allowlist-1.yaml nicht synchronisiert werden, die Zulassungsliste example-allowlist-2.yaml wurde jedoch erfolgreich installiert. Eine Beschreibung dieser Felder finden Sie unter AllowlistSynchronizer-Status.

Prüfen, ob in Ihrem Cluster eine Zulassungsliste vorhanden ist

Führen Sie den folgenden Befehl aus, um zu prüfen, ob in Ihrem Cluster eine Zulassungsliste vorhanden ist:

kubectl get workloadallowlist

Die Ausgabe ist eine Liste der installierten Zulassungslisten im Cluster. Prüfen Sie, ob die Ausgabe die Zulassungsliste enthält, die Sie verwenden möchten.

Arbeitslast mit Berechtigungen bereitstellen

Nachdem eine Zulassungsliste erfolgreich installiert wurde, können Sie die entsprechende Arbeitslast in Ihrem Cluster bereitstellen. Der Arbeitslastinhaber sollte Ihnen auch eine Installationsanleitung für die Arbeitslast zur Verfügung stellen. Eine Liste der Autopilot-Partner und Links zu ihrer Dokumentation finden Sie unter Autopilot-Partner.

Private Spiegel-Repositories für Images verwenden

Sie können die Container-Images privilegierter Arbeitslasten in privaten Repositories spiegeln, die Ihnen gehören. Damit Sie diese gespiegelten Bilder in einer Arbeitslast ausführen können, müssen alle folgenden Anforderungen erfüllt sein:

  • Der SHA‑256-Digest des gespiegelten Images muss mit dem Image-Digest der öffentlich verfügbaren Arbeitslast übereinstimmen.
  • Der von Ihnen angegebene SHA-256-Image-Digest muss im Objekt WorkloadAllowlist vorhanden sein, das mit Ihrem Cluster synchronisiert wird.

Wenn die Arbeitslast gespiegelte Bilder unterstützt, enthält die Zulassungslistenspezifikation für diese Arbeitslast eine Liste von Image-Digests für das Feld containers.imageDigests in der Zulassungslistenspezifikation für diese Arbeitslast. In der Regel enthält dieses Feld für jede verfügbare Version des Container-Images einen separaten Digest. So rufen Sie diese Liste der Image-Digests auf:

  1. Prüfen, ob die Zulassungsliste in Ihrem Cluster vorhanden ist
  2. Rufen Sie die Spezifikation der installierten Zulassungsliste ab:

    kubectl get workloadallowlist ALLOWLIST_NAME -o yaml
    

    Ersetzen Sie ALLOWLIST_NAME durch den Namen der installierten Zulassungsliste. Beispiel: company-name-solution-v1.0.0.

    Bei Arbeitslasten, die diese Funktion unterstützen, sieht die Ausgabe in etwa so aus. Das Feld imageDigests enthält eine Liste der zulässigen Digests.

    # lines omitted for clarity
    - containerName: pause-container1
      imageDigests:
      - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
      - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
    

    Wenn die Ausgabe kein Feld imageDigests enthält oder der Digest für die Version, die Sie verwenden möchten, nicht in der Liste ist, wenden Sie sich direkt an den Arbeitslastinhaber und bitten Sie ihn, seine Zulassungsliste zu aktualisieren. Nachdem der Arbeitslastinhaber der Zulassungsliste Image-Digests hinzugefügt hat, wird die aktualisierte Zulassungsliste automatisch vom Zulassungslistensynchronisierer in Ihrem Cluster installiert.

  3. Fügen Sie Ihrem Arbeitslastmanifest einen der unterstützten Bild-Digests hinzu.

Sehen Sie sich beispielsweise das folgende Bild in der öffentlich verfügbaren Pod-Spezifikation eines Partners an:

...
  containers:
  - name: pause-container1
    image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Sie können ein gespiegeltes Image verwenden, wenn der Digest mit dem öffentlich verfügbaren Digest übereinstimmt, wie im folgenden Beispiel:

...
  containers:
  - name: pause-container1
    image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Sie müssen den SHA-256-Digest in Ihr Bildfeld einfügen, ähnlich wie im vorherigen Beispiel. Wenn die Digests nicht übereinstimmen, wird das gespiegelte Bild nicht ausgeführt. Wenn Sie Bild-Digests beim Spiegeln von Partnerbildern beibehalten möchten, sollten Sie ein Tool wie crane, ORAS oder skopeo verwenden.

Privilegierte Arbeitslast löschen

Wenn Sie nicht mehr zulassen möchten, dass eine privilegierte Arbeitslast in Ihren Clustern ausgeführt wird, entfernen Sie den Pfad zur entsprechenden Zulassungsliste aus Ihrem AllowlistSynchronizer. Der Synchronizer deinstalliert die Zulassungsliste.

Wenn Sie ein WorkloadAllowlist-Objekt aus Ihrem Cluster löschen, anstatt den Synchronizer zu aktualisieren, wird die Zulassungsliste vom Synchronizer neu installiert. Entfernen Sie den Pfad aus dem AllowlistSynchronizer.

So deinstallieren Sie eine Zulassungsliste:

  1. Entfernen Sie im YAML-Manifest für den AllowlistSynchronizer, der die Zulassungsliste verwaltet, den Pfad zur Zulassungsliste, die Sie deinstallieren möchten. Eine Anleitung dazu finden Sie im Abschnitt Vorhandenen AllowlistSynchronizer aktualisieren.
  2. So prüfen Sie, ob die Zulassungsliste deinstalliert wurde: Rufen Sie eine Liste der WorkloadAllowlist-Objekte in Ihrem Cluster ab:

    kubectl get workloadallowlist
    

    Prüfen Sie in der Ausgabe, ob die Zulassungsliste, die Sie entfernen wollten, nicht angezeigt wird.

  3. Löschen Sie die Arbeitslast aus Ihrem Cluster. Eine Anleitung finden Sie in der Dokumentation des Arbeitslastanbieters.

Installation auf der Zulassungsliste in Ihren Clustern verhindern

Wenn Sie die Installation von Zulassungslisten für privilegierte Workloads in bestimmten Clustern verhindern möchten, geben Sie beim Erstellen oder Aktualisieren eines Clusters einen leeren String ("") im Flag --autopilot-privileged-admission an.

  • Wenn Sie bestimmte Zulassungslistenpfade für einen Cluster deaktivieren möchten, lassen Sie die Pfade zu diesen Zulassungslisten beim Erstellen oder Aktualisieren eines Clusters aus:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Ersetzen Sie ALLOWLIST1_PATH,ALLOWLIST2_PATH,... durch eine durch Kommas getrennte Liste mit Pfaden zu Quellen auf der Zulassungsliste. Lassen Sie die Pfade weg, die Sie deaktivieren möchten.

  • Wenn Sie alle Zulassungslisten in einem vorhandenen Cluster deaktivieren möchten, geben Sie einen leeren String als genehmigten Pfad an:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-allowlist-paths=""
    

Fehlerbehebung

Wenn die Synchronisierung oder die Bereitstellung der Arbeitslast fehlschlägt, lesen Sie den Abschnitt Fehlerbehebung bei der Bereitstellung von privilegierten Autopilot-Arbeitslasten.

Nächste Schritte