Sécuriser avec GKE Sandbox


Ce document explique comment configurer la diffusion Knative s'exécutant sur Google Kubernetes Engine (GKE) pour utiliser GKE Sandbox afin d'améliorer l'isolation de la charge de travail par rapport au noyau hôte.

Objectifs

  • Découvrez comment activer GKE Sandbox sur votre cluster de diffusion Knative.
  • Déployer un service spécifié pour s'exécuter sur des nœuds en bac à sable

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

Ajouter un pool de nœuds GKE Sandbox à un cluster de diffusion Knative existant

Suivez les étapes pour ajouter un pool de nœuds activé pour utiliser GKE Sandbox à votre cluster de diffusion Knative existant. C'est là que les charges de travail pour lesquelles vous choisissez d'utiliser GKE Sandbox s'exécutent.

Déployer une charge de travail sur le pool de nœuds GKE Sandbox

Une fois que vous disposez d'un cluster GKE avec un pool de nœuds compatible avec GKE Sandbox, mettez à jour votre configuration de diffusion Knative. Mettez également à jour chaque spécification de service pour utiliser les nouveaux nœuds. Ces mises à jour ne sont requises qu'une seule fois.

Activer le flag de fonctionnalité de classe d'exécution

Dans cette section, vous activez la classe d'exécution Kubernetes à l'aide des options de fonctionnalité et d'extension Knative dans le fichier ConfigMap config-features de l'espace de noms knative-serving. Pour activer la classe d'exécution, définissez l'option ConfigMap kubernetes.podspec-runtimeclassname sur enabled. Pour en savoir plus, consultez les pages Classe d'exécution Kubernetes et Configurer des options dans la documentation Fonctionnalités et extensions de Knative.

  1. Ouvrez le fichier ConfigMap config-features pour le modifier :

    kubectl edit configmap config-features -n knative-serving
    
  2. Ajoutez le flag de fonctionnalité kubernetes.podspec-runtimeclassname: enabled au champ data.

  3. Au lieu des étapes précédentes, vous pouvez exécuter la commande suivante pour appliquer un correctif à cet indicateur à vos fonctionnalités Knative:

    kubectl patch configmap config-features \
        --type='json' \
        -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \
        -n knative-serving
    
  4. Pour vérifier vos modifications, exécutez la commande suivante pour afficher le ConfigMap:

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

    Le ConfigMap doit se présenter comme suit:

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

Déployer un service configuré pour s'exécuter dans GKE Sandbox

Après avoir activé le flag de fonctionnalité de classe d'exécution, vous pouvez créer des services qui spécifient un runtimeClassName dans la spécification. Définissez runtimeClassName sur gvisor pour indiquer qu'un service doit s'exécuter sur le pool de nœuds GKE Sandbox.

  1. Déployez une application Knative "Hello World" en exécutant la commande suivante:

    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
    

    Si la fonctionnalité de nom de classe d'exécution Kubernetes est activée, la commande devrait se terminer sans erreur.

  2. Exécutez la commande suivante pour exécuter les pods de votre service et leur classe d'exécution configurée:

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

    La sortie doit ressembler à ceci :

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

Étapes suivantes

Après avoir vérifié que vous pouvez déployer des applications non approuvées sur le pool de nœuds GKE Sandbox que vous venez de créer, vous pouvez ajouter runtimeClassName: gvisor aux spécifications Kubernetes pour les autres services non approuvés que vous souhaitez exécuter sur des pools de nœuds GKE Sandbox.

Autres ressources: