Protege con GKE Sandbox

En este documento, se describe cómo configurar Knative serving que se ejecuta en Google Kubernetes Engine (GKE) para usar GKE Sandbox para mejorar el aislamiento de las cargas de trabajo del kernel del host.

Objetivos

  • Obtén más información para habilitar GKE Sandbox en tu clúster de Knative serving.
  • Implementa un servicio especificado para ejecutarse en nodos en zona de pruebas.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Es posible que los usuarios Google Cloud nuevos decumplan con los requisitos para acceder a una prueba gratuita.

Antes de comenzar

Agrega un grupo de nodos de GKE Sandbox a un clúster de Knative serving existente

Sigue los pasos para agregar un grupo de nodos habilitado para usar GKE Sandbox a tu clúster de Knative serving existente. Aquí es donde se ejecutan las cargas de trabajo que habilitas para usar GKE Sandbox.

Implementa una carga de trabajo en el grupo de nodos de GKE Sandbox

Una vez que tengas un clúster de GKE con un grupo de nodos habilitado para GKE Sandbox, actualiza la configuración de Knative serving. Además, actualiza cada especificación de servicio para usar los nodos nuevos. Estas actualizaciones son necesarias solo una vez.

Habilita la marca de función de la clase del entorno de ejecución

En esta sección, habilitarás la clase del entorno de ejecución de Kubernetes con las marcas de funciones y extensiones de Knative en el ConfigMap config-features en el espacio de nombres knative-serving. Para habilitar la clase del entorno de ejecución, establece la marca ConfigMap kubernetes.podspec-runtimeclassname en enabled. Para obtener más información, consulta Clase del entorno de ejecución de Kubernetes y Configura marcas en la documentación de Funciones y extensiones de Knative.

  1. Abre el ConfigMap config-features para editar:

    kubectl edit configmap config-features -n knative-serving
    
  2. Agrega la marca de función kubernetes.podspec-runtimeclassname: enabled al campo data.

  3. Como alternativa a los pasos anteriores, puedes ejecutar el siguiente comando para aplicar esta marca a tus funciones de Knative:

    kubectl patch configmap config-features \
        --type='json' \
        -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \
        -n knative-serving
    
  4. Para verificar tus ediciones, ejecuta el siguiente comando para ver el ConfigMap:

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

    El ConfigMap debería verse de la siguiente manera:

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

Implementa un objeto Service configurado para ejecutarse en GKE Sandbox

Después de habilitar la marca de función de la clase del entorno de ejecución, puedes crear objetos Service que especifiquen un runtimeClassName en la especificación. Establece runtimeClassName en gvisor para indicar que un servicio debe ejecutarse en el grupo de nodos de GKE Sandbox.

  1. Para implementar una aplicación de Knative "Hello World", ejecuta el siguiente 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
    

    Si la función de nombre de clase del entorno de ejecución de Kubernetes está habilitada, el comando debería finalizar sin errores.

  2. Obtén los Pods para tu servicio en ejecución y su clase de entorno de ejecución configurada mediante la ejecución del siguiente comando:

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

    El resultado debe parecerse al siguiente:

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

¿Qué sigue?

Después de verificar que puedes implementar apps no confiables en el grupo de nodos de GKE Sandbox recién creado, estás listo para agregar runtimeClassName: gvisor a las especificaciones de Kubernetes de otros servicios no confiables que desees ejecutar en los Pods del nodo de GKE Sandbox.

Lecturas adicionales: