Berechtigte Arbeitslasten von GKE Autopilot-Partnern ausführen


Auf dieser Seite erfahren Sie, wie Sie privilegierte Arbeitslasten von Google Kubernetes Engine (GKE) Autopilot-Partnern ausführen. Sie erfahren, wie Sie eine Synchronisierungsarbeitslast einrichten, die eine Zulassungsliste in Ihrem Cluster installiert und die Zulassungsliste auf dem neuesten Stand hält.

Diese Seite richtet sich an die folgenden Rollentypen:

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

Weitere Informationen zu den gängigen Rollen und Beispielaufgaben, auf die wir in unserer Dokumentation verweisen, finden Sie unter Häufig verwendete GKE Enterprise-Nutzerrollen und -Aufgaben.

Machen Sie sich vor dem Lesen dieser Seite mit den folgenden Themen vertraut:

Partnerarbeitslasten mit erhöhten Berechtigungen in Autopilot

GKE ermöglicht es einer Teilmenge genehmigter Partner, privilegierte Arbeitslasten in Autopilot-Clustern auszuführen. Diese privilegierten Arbeitslasten können einige der Sicherheitsbeschränkungen umgehen, die von Autopilot erzwungen werden. Beispiel: Ein Partner muss möglicherweise eine Arbeitslast ausführen, die bestimmte Linux-Funktionen verwendet oder einen privilegierten Container erfordert.

Partner erstellen und verwalten Zulassungslisten für ihre privilegierten Arbeitslasten. Jede Zulassungsliste ist eine Datei, die einer bestimmten privilegierten Partner-Arbeitslast entspricht. Partner reichen diese Zulassungslistendateien zur Genehmigung bei GKE ein. Nach der Genehmigung hostet GKE die Zulassungslistendatei in einem von Google verwalteten Repository.

Wenn Sie eine Partnerarbeitslast ausführen möchten, installieren Sie die entsprechende Zulassungslistendatei in Ihrem Cluster. GKE bietet eine benutzerdefinierte Kubernetes-Ressource namens AllowlistSynchronizer, mit der Zulassungslisten installiert und auf dem neuesten Stand gehalten werden. Nachdem eine Zulassungsliste erfolgreich installiert wurde, können Sie den entsprechenden privilegierten Partner-Workload bereitstellen.

Programmfehler und Funktionsanfragen für privilegierte Arbeitslasten und Zulassungslisten

Partner sind für die Erstellung, Entwicklung und Wartung ihrer privilegierten Arbeitslasten und Zulassungslisten verantwortlich. Wenn Sie einen Fehler finden oder einen Funktionswunsch für eine privilegierte Arbeitslast oder Zulassungsliste haben, wenden Sie sich an den entsprechenden Partner.

Informationen zum AllowlistSynchronizer-Controller

Der AllowlistSynchronizer ist ein Controller, der auf Ihrer GKE-Steuerungsebene ausgeführt wird. Sie stellen eine neue AllowlistSynchronizer als YAML-Manifest bereit, ähnlich wie bei jeder anderen Kubernetes-Arbeitslast. Im Manifest geben Sie den Pfad zur Zulassungslistendatei an, die Sie installieren möchten. Diesen Pfad erhalten Sie vom Drittanbieterpartner. Der Synchronizer sucht die Zulassungslistendatei des Partners in einem von Google verwalteten Repository und installiert die Zulassungsliste in Ihrem Cluster.

Der Synchronizer prüft alle 10 Minuten, ob die Zulassungslistendatei aktualisiert wurde. Wenn ein Update vorhanden ist, installiert der Synchronizer die aktualisierte Zulassungsliste in Ihrem Cluster.

Wenn Sie bestimmte Arbeitslasten nicht mehr zulassen möchten, aktualisieren Sie die vorhandenen AllowlistSynchronizer, um die entsprechenden Dateipfade der Zulassungsliste zu entfernen, und löschen Sie dann das WorkloadAllowlist-Objekt aus Ihrem Cluster. Wenn Sie ein installiertes WorkloadAllowlist-Objekt löschen, ohne den Pfad aus Ihrem Zulassungslistensynchronisierer zu entfernen, wird die Zulassungsliste vom Synchronisierer neu installiert. Partner können keine Dateien mit Zulassungslisten aus dem von Google verwalteten Repository löschen.

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 diese Aufgabe 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 gcloud components update ab.

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 Partnerarbeitslast Sie in Ihrem Cluster ausführen möchten. Eine Anleitung zur Installation der privilegierten Arbeitslast finden Sie in der Dokumentation Ihres Partners.

Erstellen Sie eine neue AllowlistSynchronizer

Wenn Sie eine privilegierte Arbeitslast von einem Partner ausführen möchten, fügen Sie den Pfad zur entsprechenden Zulassungslistendatei einer benutzerdefinierten AllowlistSynchronizer-Ressource 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, ...: Ein oder mehrere Pfade zu Partner-Zulassungslistendateien, die installiert werden sollen. Sehen Sie in der Dokumentation für die Arbeitslast des ausgewählten Partners nach, welche Schritte für diesen Pfad erforderlich sind. Sie können ganze Verzeichnisse oder einzelne Dateien angeben.
  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 Bereitstellung von Partnerarbeitslasten 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 Zulassungslistendateien hinzuzufügen oder zu entfernen. Sie können vorhandene Synchronisierungen in folgenden Situationen aktualisieren:

  • Der Partner fügt eine neue Zulassungslistendatei mit einem anderen Namen hinzu.
  • Sie möchten einem vorhandenen Synchronizer, in dem zugehörige 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 Änderungen 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 beobachten. 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/allowlist1.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/allowlist2.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

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 Partner, der die Arbeitslast bereitstellt, 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 von Partnerarbeitslasten in privaten Repositories spiegeln, die Ihnen gehören. Damit Sie diese gespiegelten Images in einem Arbeitslast ausführen können, müssen Sie alle folgenden Anforderungen erfüllen:

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

Wenn die Partnerarbeitslast gespiegelte Bilder unterstützt, enthält die Zulassungslistenspezifikation für diese Arbeitslast eine Liste von Bild-Digests für das Feld containers.imageDigests in der Zulassungslistenspezifikation für diese Arbeitslast. Normalerweise hat 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 Partner und bitten Sie ihn, seine Zulassungsliste zu aktualisieren. Nachdem der Partner der Zulassungsliste Bild-Digests hinzugefügt und die Änderungen an GKE gesendet hat, installiert der Zulassungslistensynchronisierer in Ihrem Cluster automatisch die aktualisierte Zulassungsliste.

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

So deinstallieren Sie eine Zulassungsliste:

  1. Entfernen Sie im YAML-Manifest für AllowlistSynchronizer, das 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 Arbeitslasten in bestimmten Clustern verhindern möchten, verwenden Sie eine ValidatingAdmissionPolicy. Durch die Validierung von Zulassungsrichtlinien wird sichergestellt, dass Kubernetes-Ressourcen bestimmte Kriterien erfüllen, bevor sie im Cluster ausgeführt werden dürfen. Sie können beispielsweise prüfen, ob ein Label einen bestimmten Wert hat.

So verhindern Sie die Installation von Zulassungslisten in einem Cluster:

  1. Speichern Sie das folgende ValidatingAdmissionPolicy-Manifest als disallow-allowlists.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicy
    metadata:
      name: "disallow-allowlists"
    spec:
      failurePolicy: Fail
      matchConstraints:
        resourceRules:
        - apiGroups:   ["auto.gke.io"]
          apiVersions: ["*"]
          operations:  ["*"]
          resources:   ["allowlistsynchronizers"]
      validations:
      - expression: "false"
        message: 'AllowlistSynchronizer creation is not allowed'
    
  2. Speichern Sie das folgende ValidatingAdmissionPolicyBinding-Manifest als disallow-allowlists-binding.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicyBinding
    metadata:
      name: "disallow-allowlists-binding"
    spec:
      policyName: "disallow-allowlists"
      validationActions: [Deny]
    
  3. Stellen Sie die ValidatingAdmissionPolicy in Ihrem Cluster bereit:

    kubectl apply -f disallow-allowlists.yaml
    kubectl apply -f disallow-allowlists-binding.yaml
    

Diese Richtlinie verhindert das Erstellen neuer AllowlistSynchronizer-Objekte im Cluster.

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