GKE Sandbox로 보안

이 문서에서는 Google Kubernetes Engine(GKE)에서 실행되는 Knative serving을 구성하여 호스트 커널에서 워크로드 격리를 개선하는 GKE Sandbox를 사용하는 방법을 설명합니다.

기존 Knative serving 클러스터에 GKE Sandbox 노드 풀 추가

기존 Knative serving 클러스터에 GKE Sandbox를 사용하도록 설정된 노드 풀을 추가하는 단계를 따릅니다. 여기에서 GKE Sandbox를 사용하도록 선택한 워크로드가 실행됩니다.

GKE Sandbox 노드 풀에 워크로드 배포

GKE Sandbox가 사용 설정된 노드 풀이 있는 GKE 클러스터가 있으면 Knative serving 구성을 업데이트합니다. 또한 새 노드를 사용하도록 각 서비스 사양을 업데이트합니다. 이러한 업데이트는 한 번만 수행하면 됩니다.

런타임 클래스 기능 플래그 사용 설정

이 섹션에서는 knative-serving 네임스페이스의 config-features ConfigMap에서 Knative 기능 및 확장 프로그램 플래그를 사용하여 Kubernetes 런타임 클래스를 사용 설정합니다. 런타임 클래스를 사용 설정하려면 ConfigMap 플래그 kubernetes.podspec-runtimeclassnameenabled로 설정합니다. 자세한 내용은 Knative 기능 및 확장 프로그램 문서에서 Kubernetes 런타임 클래스플래그 구성을 참조하세요.

  1. 수정할 config-features ConfigMap을 엽니다.

    kubectl edit configmap config-features -n knative-serving
    
  2. kubernetes.podspec-runtimeclassname: enabled 기능 플래그를 data 필드에 추가합니다.

  3. 앞의 단계를 실행하는 대신 다음 명령어를 실행하여 이 플래그를 Knative 기능에 패치할 수 있습니다.

    kubectl patch configmap config-features \
        --type='json' \
        -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \
        -n knative-serving
    
  4. 수정사항을 확인하려면 다음 명령어를 실행하여 ConfigMap을 확인합니다.

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

    ConfigMap은 다음과 유사합니다.

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

GKE Sandbox에서 실행되도록 구성된 서비스 배포

런타임 클래스 기능 플래그를 사용 설정한 후에는 사양에서 runtimeClassName을 지정하는 서비스를 만들 수 있습니다. runtimeClassNamegvisor로 설정하여 서비스가 GKE Sandbox 노드 풀에서 실행되도록 지정합니다.

  1. 다음 명령어를 실행하여 'Hello World' Knative 애플리케이션을 배포합니다.

    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
    

    Kubernetes 런타임 클래스 이름 기능이 사용 설정된 경우 명령어가 오류 없이 완료됩니다.

  2. 다음을 실행하여 실행 중인 서비스 포드와 구성된 런타임 클래스를 가져옵니다.

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

    다음과 유사한 결과가 출력됩니다.

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