Risolvere i problemi relativi al deployment di workload Autopilot con privilegi


Questa pagina mostra come risolvere i problemi relativi ai carichi di lavoro con privilegi che esegui in cluster Autopilot di Google Kubernetes Engine (GKE).

Problemi di sincronizzazione della lista consentita

Quando esegui il deployment di un AllowlistSynchronizer, GKE tenta di installare e sincronizzare i file della lista consentita che specifichi. Se la sincronizzazione non va a buon fine, il campo status di AllowlistSynchronizer segnala l'errore.

Visualizza lo stato dell'oggetto AllowlistSynchronizer:

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"

I campi conditions.message e managedAllowlistStatus.lastError forniscono informazioni dettagliate sull'errore. Utilizza queste informazioni per risolvere il problema.

Problemi di deployment dei carichi di lavoro con privilegi

Dopo aver installato correttamente una lista consentita, esegui il deployment del corrispondente carico di lavoro privilegiato nel cluster. In alcuni casi, GKE potrebbe rifiutare il carico di lavoro.

Prova le seguenti opzioni di risoluzione:

  • Assicurati che la versione GKE del cluster soddisfi il requisito della versione del workload.
  • Assicurati che il workload di cui stai eseguendo il deployment sia quello a cui si applica il file della lista consentita.

Per scoprire il motivo del rifiuto di un workload con privilegi, richiedi a GKE informazioni dettagliate sulle violazioni della lista consentita:

  1. Visualizza un elenco delle liste consentite installate nel cluster:

    kubectl get workloadallowlist
    

    Trova il nome della lista consentita da applicare al carico di lavoro con privilegi.

  2. Apri il manifest YAML del carico di lavoro con privilegi in un editor di testo. Se non riesci ad accedere ai manifest YAML, ad esempio se il processo di implementazione del carico di lavoro utilizza altri strumenti, contatta il fornitore del carico di lavoro per aprire un problema. Ignora i passaggi rimanenti.

  3. Aggiungi la seguente etichetta alla sezione spec.metadata.labels della specifica del pod per i carichi di lavoro con privilegi:

    labels:
      cloud.google.com/matching-allowlist: ALLOWLIST_NAME
    

    Sostituisci ALLOWLIST_NAME con il nome della lista consentita ottenuta nel passaggio precedente. Utilizza il nome visualizzato nell'output del comando kubectl get workloadallowlist, non il percorso del file della lista consentita.

  4. Salva il manifest e applica il carico di lavoro al cluster:

    kubectl apply -f WORKLOAD_MANIFEST_FILE
    

    Sostituisci WORKLOAD_MANIFEST_FILE con il percorso del file manifest.

    L'output fornisce informazioni dettagliate sui campi del carico di lavoro che non corrispondono alla lista consentita specificata, come nell'esempio seguente:

    Error from server (GKE Warden constraints violations): error when creating "STDIN": admission webhook "warden-validating.common-webhooks.networking.gke.io" denied the request:
    
    ===========================================================================
    Workload Mismatches Found for Allowlist (example-allowlist-1):
    ===========================================================================
    HostNetwork Mismatch: Workload=true, Allowlist=false
    HostPID Mismatch: Workload=true, Allowlist=false
    Volume[0]: data
             - data not found in allowlist. Verify volume with matching name exists in allowlist.
    Container[0]:
    - Envs Mismatch:
            - env[0]: 'ENV_VAR1' has no matching string or regex pattern in allowlist.
            - env[1]: 'ENV_VAR2' has no matching string or regex pattern in allowlist.
    - Image Mismatch: Workload=k8s.gcr.io/diff/image, Allowlist=k8s.gcr.io/pause2. Verify that image string or regex match.
    - SecurityContext:
            - Capabilities.Add Mismatch: the following added capabilities are not permitted by the allowlist: [SYS_ADMIN SYS_PTRACE]
    - VolumeMount[0]: data
            - data not found in allowlist. Verify volumeMount with matching name exists in allowlist.
    

    In questo esempio si verificano le seguenti violazioni:

    • Il carico di lavoro specifica hostNetwork: true, ma la lista consentita non specifica hostNetwork: true.
    • Il carico di lavoro specifica hostPID: true, ma la lista consentita non specifica hostPID: true.
    • Il workload specifica un volume denominato data, ma la lista consentita non specifica un volume denominato data.
    • Il contenitore specifica le variabili di ambiente ENV_VAR1 e ENV_VAR2, ma la lista consentita non le specifica.
    • Il contenitore specifica l'immagine k8s.gcr.io/diff/image, ma la lista consentita specifica k8s.gcr.io/pause2.
    • Il contenitore aggiunge le funzionalità SYS_ADMIN e SYS_PTRACE, ma la lista consentita non consente di aggiungerle.
    • Il contenitore specifica un montaggio del volume denominato data, ma la lista consentita non specifica un montaggio del volume denominato data.

Se stai implementando un carico di lavoro fornito da un fornitore di terze parti, apri un problema con il fornitore per risolvere le violazioni. Fornisci l'output del passaggio precedente nel problema.

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.