Sicurezza con GKE Sandbox


Questo documento descrive come configurare Knative serving in esecuzione su Google Kubernetes Engine (GKE) deve utilizzare GKE Sandbox per migliorare i carichi di lavoro e l'isolamento dal kernel dell'host.

Obiettivi

  • Scopri come abilitare GKE Sandbox nel tuo cluster Knative serving.
  • Esegui il deployment di un servizio specificato per l'esecuzione sui nodi sandbox.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Prima di iniziare

Aggiungi un pool di nodi GKE Sandbox a un cluster di servizi Knative esistente

Segui i passaggi per aggiungere un pool di nodi abilitato all'utilizzo GKE Sandbox al cluster Knative serving esistente. È qui che vengono eseguiti i carichi di lavoro che attivi per l'utilizzo di GKE Sandbox.

Esegui il deployment di un carico di lavoro nel pool di nodi GKE Sandbox

Dopo aver creato un cluster GKE con un pool di nodi abilitato per GKE Sandbox, aggiorna la configurazione di Knative serving. Inoltre, aggiorna ogni servizio la specifica per usare i nuovi nodi. Questi aggiornamenti sono obbligatori solo una volta.

Attivare il flag della funzionalità della classe di runtime

In questa sezione, abiliterai la classe di runtime di Kubernetes utilizzando Knative i flag di funzionalità ed estensione nel ConfigMap config-features del knative-serving. Per attivare la classe di runtime, imposta il flag ConfigMap kubernetes.podspec-runtimeclassname su enabled. Per ulteriori informazioni, vedi Runtime Kubernetes e configurazione flag in Knative Features and estensioni documentazione.

  1. Apri il ConfigMap config-features per modificarlo:

    kubectl edit configmap config-features -n knative-serving
    
  2. Aggiungi il flag funzionalità kubernetes.podspec-runtimeclassname: enabled a data.

  3. In alternativa ai passaggi precedenti, puoi eseguire il seguente comando per applicare la patch a questo flag nelle funzionalità Knative:

    kubectl patch configmap config-features \
        --type='json' \
        -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \
        -n knative-serving
    
  4. Per verificare le modifiche, esegui questo comando per visualizzare il ConfigMap:

    kubectl get configmap config-features -n knative-serving -o yaml
    

    Il ConfigMap dovrebbe essere simile al seguente:

    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: config-features
        namespace: knative-serving
        labels:
            serving.knative.dev/release: v0.22.0
    data:
        kubernetes.podspec-runtimeclassname: enabled
    

Esegui il deployment di un servizio configurato per l'esecuzione nella sandbox GKE

Dopo aver abilitato il flag funzionalità della classe di runtime, puoi creare servizi che specificano un valore runtimeClassName nella specifica. Imposta runtimeClassName su gvisor per indicare che un servizio deve essere eseguito sul pool di nodi GKE Sandbox.

  1. Esegui il deployment di un'applicazione Knative "Hello World" eseguendo il seguente comando:

    cat <<EOF | kubectl apply -f -
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
        name: helloworld-go
    spec:
        template:
            spec:
                runtimeClassName: gvisor
                containers:
                    -   image: gcr.io/knative-samples/helloworld-go
                        env:
                        -   name: TARGET
                            value: "gVisor User"
    EOF
    

    Se la funzionalità del nome della classe di runtime Kubernetes è abilitata, il comando deve terminare senza errori.

  2. Per avviare i pod per il tuo servizio e la relativa classe di runtime configurata, esegui:

    kubectl get pods \
        -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
    

    L'output dovrebbe essere simile al seguente:

    NAME                                              RUNTIME CLASS   STATUS
    helloworld-go-00001-deployment-55f58477f-fxm6m    gvisor          Running
    

Passaggi successivi

Dopo aver verificato di poter eseguire il deployment di app non attendibili nel pool di nodi GKE Sandbox appena creato, puoi aggiungere runtimeClassName: gvisor alle specifiche Kubernetes per altri servizi non attendibili che vuoi eseguire nei pool di nodi GKE Sandbox.

Letture aggiuntive: