Proteja com o GKE Sandbox


Este documento descreve como configurar o Knative Serving em execução no Google Kubernetes Engine (GKE) para usar o GKE Sandbox para melhorar o isolamento da carga de trabalho do kernel do anfitrião.

Objetivos

  • Saiba como ativar o GKE Sandbox no seu cluster de serviço do Knative.
  • Implemente um serviço especificado para ser executado em nós com sandbox.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Antes de começar

Adicione um node pool do GKE Sandbox a um cluster do Knative Serving existente

Siga os passos para adicionar um conjunto de nós ativado para usar o GKE Sandbox ao seu cluster de serviço do Knative existente. É aqui que são executadas as cargas de trabalho que opta por usar o GKE Sandbox.

Implemente uma carga de trabalho no pool de nós do GKE Sandbox

Assim que tiver um cluster do GKE com um conjunto de nós ativado para o GKE Sandbox, atualize a configuração do Knative Serving. Além disso, atualize cada especificação de serviço para usar os novos nós. Estas atualizações só são necessárias uma vez.

Ative a flag de funcionalidade da classe de tempo de execução

Nesta secção, ativa a classe de tempo de execução do Kubernetes através de flags de funcionalidades e extensões do Knative no config-features ConfigMap no espaço de nomes knative-serving. Para ativar a classe de tempo de execução, defina a flag ConfigMap kubernetes.podspec-runtimeclassname como enabled. Para mais informações, consulte a classe de tempo de execução do Kubernetes e a configuração de flags na documentação Funcionalidades e extensões do Knative.

  1. Abra o config-features ConfigMap para edição:

    kubectl edit configmap config-features -n knative-serving
    
  2. Adicione a funcionalidade kubernetes.podspec-runtimeclassname: enabled ao campo data.

  3. Em alternativa aos passos anteriores, pode executar o seguinte comando para aplicar um patch a esta flag nas suas funcionalidades do Knative:

    kubectl patch configmap config-features \
        --type='json' \
        -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \
        -n knative-serving
    
  4. Para validar as edições, execute o seguinte comando para ver o ConfigMap:

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

    O ConfigMap deve ser semelhante ao seguinte:

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

Implemente um serviço configurado para ser executado no GKE Sandbox

Depois de ativar o flag da funcionalidade de classe de tempo de execução, pode criar serviços que especifiquem um runtimeClassName na especificação. Defina o runtimeClassName como gvisor para indicar que um serviço deve ser executado no conjunto de nós do GKE Sandbox.

  1. Implemente uma aplicação "Hello World" do Knative executando o seguinte 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 a funcionalidade de nome da classe de tempo de execução do Kubernetes estiver ativada, o comando deve terminar sem erros.

  2. Obtenha os pods para o seu serviço em execução e a respetiva classe de tempo de execução configurada executando o seguinte comando:

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

    O resultado deve ser semelhante ao seguinte:

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

O que se segue?

Depois de verificar que pode implementar apps não fidedignas no conjunto de nós do GKE Sandbox recém-criado, está tudo pronto para adicionar runtimeClassName: gvisor às especificações do Kubernetes para outros serviços não fidedignos que quer executar em conjuntos de nós do GKE Sandbox.

Leitura adicional: