Esegui carichi di lavoro con privilegi dei partner di GKE Autopilot


Questa pagina mostra come eseguire carichi di lavoro con privilegi dei partner di Google Kubernetes Engine (GKE) Autopilot. Scopri come configurare un carico di lavoro di sincronizzazione che installa una lista consentita nel cluster e la mantiene aggiornata.

Questa pagina è dedicata ai seguenti tipi di ruoli:

  • Gli esperti di sicurezza che vogliono assicurarsi che i workload di terze parti debbano essere inclusi in una lista consentita per poter essere eseguiti sui cluster e provengano da origini approvate da GKE.
  • Gli ingegneri della piattaforma che vogliono attivare i carichi di lavoro di terze parti sui cluster per sbloccare i team di applicazioni.

Per scoprire di più sui ruoli comuni e sugli esempi di attività a cui facciamo riferimento nella nostra documentazione, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.

Prima di leggere questa pagina, assicurati di conoscere quanto segue:

Informazioni sui carichi di lavoro dei partner con privilegi in Autopilot

GKE consente a un sottoinsieme di partner approvati di eseguire carichi di lavoro privilegiati nei cluster Autopilot. Questi carichi di lavoro con privilegi possono aggirare alcuni dei vincoli di sicurezza applicati da Autopilot. Ad esempio, un partner potrebbe dover eseguire un carico di lavoro che utilizza funzionalità Linux specifiche o richiede un contenitore con privilegi.

I partner creano e gestiscono elenchi consentiti per i propri carichi di lavoro con privilegi. Ogni lista consentita è un file che corrisponde a un determinato carico di lavoro del partner con privilegi. I partner inviano questi file della lista consentita a GKE per l'approvazione. Dopo l'approvazione, GKE ospita il file della lista consentita in un repository gestito da Google.

Per eseguire un carico di lavoro del partner, installa il file della lista consentita corrispondente nel tuo cluster. GKE fornisce una risorsa personalizzata Kubernetes denominata AllowlistSynchronizer che installa le liste consentite e le mantiene aggiornate. Dopo aver installato correttamente una lista consentita, puoi eseguire il deployment del corrispondente workload del partner con privilegi.

Bug e richieste di funzionalità per i carichi di lavoro con privilegi e le liste consentite

I partner sono responsabili della creazione, dello sviluppo e della gestione dei propri carichi di lavoro e delle liste consentite con privilegi. Se riscontri un bug o hai una richiesta di funzionalità per un carico di lavoro o una lista consentita con privilegi, contatta il partner corrispondente.

Informazioni sul controller AllowlistSynchronizer

AllowlistSynchronizer è un controller in esecuzione nel control plane GKE. Esegui il deployment di un nuovo AllowlistSynchronizer come manifest YAML, in modo simile a come esegui il deployment di qualsiasi altro carico di lavoro Kubernetes. Nel file manifest, specifica il percorso del file della lista consentita che vuoi installare, che ottieni dal partner di terze parti. Il sincronizzatore trova il file della lista consentita del partner in un repository gestito da Google e installa la lista consentita nel cluster.

Ogni 10 minuti, il programma di sincronizzazione verifica la presenza di aggiornamenti al file della lista consentita. Se esiste un aggiornamento, il sincronizzatore installa la lista consentita aggiornata nel cluster.

Per interrompere l'autorizzazione di workload specifici, aggiorna gli oggetti AllowlistSynchronizers esistenti per rimuovere i percorsi dei file della lista consentita corrispondenti, quindi elimina l'oggetto WorkloadAllowlist dal cluster. Se elimini un oggetto WorkloadAllowlist installato senza rimuovere il percorso dal sincronizzatore della lista consentita, il sincronizzatore reinstalla la lista consentita. I partner non possono eliminare i file della lista consentita dal repository gestito da Google.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Requisiti

  • La risorsa personalizzata AllowlistSynchronizer richiede GKE versione 1.32.1-gke.1729000 o successive.
  • Devi sapere quale carico di lavoro del partner vuoi eseguire nel tuo cluster. Consulta la documentazione del tuo partner per istruzioni su come installare il workload con privilegi.

Crea un nuovo AllowlistSynchronizer

Per eseguire un carico di lavoro con privilegi da un partner, aggiungi il percorso del file della lista consentita corrispondente a una risorsa personalizzata AllowlistSynchronizer. Poi, esegui il deployment di AllowlistSynchronizer nel tuo cluster.

  1. In un editor di testo, crea un nuovo file YAML.
  2. Aggiungi i seguenti contenuti al file YAML:

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

    Sostituisci quanto segue:

    • ALLOWLIST_SYNCHRONIZER_NAME: il nome del nuovo sincronizzatore. Scegli un nome descrittivo che identifichi il workload o il team supportato dalla lista consentita.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: uno o più percorsi dei file della lista consentita dei partner da installare. Consulta la documentazione relativa al workload del partner scelto per questo percorso. Puoi specificare intere directory o singoli file.
  3. Esegui il deployment del file YAML nel tuo cluster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Sostituisci PATH_TO_YAML_FILE con il percorso del file YAML che hai creato nel passaggio precedente.

    Il controller AllowlistSynchronizer installa i file della lista consentita dai percorsi specificati nel cluster.

  4. Attendi che il sincronizzatore riporti uno stato Ready:

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

Puoi anche integrare il deployment dei carichi di lavoro dei partner nella tua pipeline di integrazione e distribuzione continua (CI/CD). Configura il tuo workflow in modo che attenda l'installazione della lista consentita prima di eseguire il deployment del workload corrispondente.

Aggiornare un AllowlistSynchronizer esistente

Puoi aggiornare un AllowlistSynchronizer esistente per aggiungere o rimuovere file della lista consentita. Potresti aggiornare i sincronizzatori esistenti in situazioni come le seguenti:

  • Il partner aggiunge un nuovo file della lista consentita con un nome diverso.
  • Vuoi aggiungere una nuova lista consentita dei carichi di lavoro a un sincronizzatore esistente che agrupa le liste consentite correlate.
  • Vuoi rimuovere una lista consentita da un sincronizzatore perché non vuoi più utilizzare il workload corrispondente.

Per aggiornare un oggetto AllowlistSynchronizer esistente:

  1. Elenca i sincronizzatori esistenti nel cluster:

    kubectl get allowlistsynchronizer
    
  2. Apri la specifica del sincronizzatore che vuoi aggiornare in un editor di testo.

  3. Aggiorna il campo spec.allowlistPaths per aggiungere, modificare o rimuovere i percorsi dei file della lista consentita.

  4. Salva e chiudi l'editor di testo.

  5. Applica la configurazione aggiornata al cluster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Sostituisci PATH_TO_YAML_FILE con il percorso del file YAML aggiornato nel passaggio precedente.

Quando esegui il deployment di una configurazione del sincronizzatore aggiornata, il campo managedAllowlistStatus.generation nello stato dell'oggetto AllowlistSynchronizer aumenta di uno. Il AllowlistSynchronizer controller applica quindi le modifiche.

Monitorare lo stato della sincronizzazione della lista consentita

Dopo aver installato un AllowlistSynchronizer o aggiornato un sincronizzatore esistente, puoi monitorare lo stato della sincronizzazione. Lo stato ti aiuta a monitorare l'installazione, la rimozione o le modifiche dei file della lista consentita, nonché eventuali errori che potrebbero verificarsi.

Per monitorare lo stato generale della sincronizzazione, esegui il seguente comando:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

L'output è simile al seguente:

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

Per una descrizione di questi campi, consulta Stato AllowlistSynchronizer.

Verifica che nel cluster esista una lista consentita

Per verificare che nel cluster esista una lista consentita, esegui il seguente comando:

kubectl get workloadallowlist

L'output è un elenco delle liste consentite installate nel cluster. Verifica che l'output includa la lista consentita che vuoi utilizzare.

Esegui il deployment del carico di lavoro con privilegi

Dopo aver installato correttamente una lista consentita, puoi eseguire il deployment del corrispondente workload nel cluster. Il partner che fornisce il carico di lavoro dovrebbe anche fornire le istruzioni di installazione per il carico di lavoro. Per un elenco dei partner di Autopilot e i link alla loro documentazione, consulta Partner di Autopilot.

Eliminare un carico di lavoro con privilegi

Per interrompere l'esecuzione di un carico di lavoro privilegiato nei cluster, rimuovi il percorso della lista consentita corrispondente da AllowlistSynchronizer. Il sincronizzatore disinstalla la lista consentita.

Se elimini un oggetto WorkloadAllowlist dal cluster anziché aggiornare il sincronizzatore, quest'ultimo reinstalla la lista consentita. Assicurati di rimuovere il percorso da AllowlistSynchronizer.

Per disinstallare una lista consentita:

  1. Nel file manifest YAML per il AllowlistSynchronizer che gestisce la lista consentita, rimuovi il percorso della lista consentita che vuoi disinstallare. Per istruzioni, consulta la sezione Aggiornare un'istanza AllowlistSynchronizer esistente.
  2. Per verificare che la lista consentita sia stata disinstallata, ottieni un elenco di oggetti WorkloadAllowlist nel cluster:

    kubectl get workloadallowlist
    

    Nell'output, assicurati che la lista consentita che volevi rimuovere non sia visualizzata.

  3. Elimina il carico di lavoro dal cluster. Per le istruzioni, consulta la documentazione del fornitore del carico di lavoro.

Impedire l'installazione della lista consentita nei cluster

Per impedire l'installazione di liste consentite di carichi di lavoro privilegiati in cluster specifici, utilizza un ValidatingAdmissionPolicy. La convalida dei criteri di ammissione garantisce che le risorse Kubernetes soddisfino criteri specifici prima di poter essere eseguite nel cluster. Ad esempio, puoi verificare che un'etichetta abbia un valore specifico.

Per impedire l'installazione di liste consentite in un cluster:

  1. Salva il seguente manifest ValidatingAdmissionPolicy come 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. Salva il seguente manifest ValidatingAdmissionPolicyBinding come disallow-allowlists-binding.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicyBinding
    metadata:
      name: "disallow-allowlists-binding"
    spec:
      policyName: "disallow-allowlists"
      validationActions: [Deny]
    
  3. Esegui il deployment di ValidatingAdmissionPolicy nel cluster:

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

Questo criterio impedisce la creazione di nuovi oggetti AllowlistSynchronizers nel cluster.

Risoluzione dei problemi

Se la sincronizzazione o il deployment del carico di lavoro non vanno a buon fine, consulta Risolvere i problemi di deployment dei carichi di lavoro Autopilot con privilegi.

Passaggi successivi