이번 글에서는 Kubernetes 환경에서 gVisor 런타임을 사용하여 파드를 생성하는 방법에 대해 알아보겠습니다. gVisor는 Google에서 개발한 컨테이너 격리 솔루션으로, 보안을 강화하고 리소스 격리를 보장하는 데 유용합니다.
먼저, gVisor 런타임을 사용하기 위해 Kubernetes에 RuntimeClass 객체를 생성해야 합니다. 이 객체는 두 가지 주요 필드를 가지고 있습니다: RuntimeClass name과 handler.
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: gvisor-class
handler: runsc
여기서 name
은 RuntimeClass의 이름을 지정하며, 위 예제에서는 gvisor-class
로 설정했습니다. handler
는 실제로 사용할 런타임을 지정하는 부분입니다. gVisor의 경우, runsc를 사용합니다.
Runtime | Handlers |
---|---|
gVisor | runsc |
Kata | kata |
위 YAML 파일을 사용하여 RuntimeClass 객체를 생성하기 위해 다음 명령어를 실행합니다:
kubectl create -f runtimeclass.yaml
이제 gVisor 런타임을 사용하여 NGINX 컨테이너를 포함한 파드를 생성할 수 있습니다. 파드 정의 파일에서 runtimeClassName
필드를 사용하여 방금 생성한 RuntimeClass의 이름을 명시적으로 지정합니다.
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:latest
runtimeClassName: gvisor-class
위 YAML 파일에서 runtimeClassName
은 gvisor-class
로 설정되어 있어, 이제 NGINX 컨테이너는 gVisor 런타임을 사용하여 실행됩니다.
파드를 생성한 후, gVisor가 제대로 동작하는지 확인하기 위해 다음 명령어를 사용하여 노드에서 NGINX 프로세스가 격리되어 있는지 확인할 수 있습니다:
$ pgrep -a nginx
만약 gVisor가 올바르게 작동하고 있다면, NGINX 프로세스가 나타나지 않아야 합니다. 또한, 노드에서 runsc
런타임이 실행 중인 것을 확인할 수 있습니다.
$ ps -ef | grep runsc
27259 runsc --root=/run/containerd/runsc/k8s.io -–
log=/run/containerd/io.containerd.runtime.v2.task/k8s.io/e6d7we978d7d6f7g98b9g8d8723424g77567
fds/log.json --log-format=json
이로써, Kubernetes 환경에서 gVisor 런타임을 사용하여 파드를 생성하고, 그 결과로 컨테이너를 격리하는 방법에 대해 알아보았습니다. gVisor는 안전하고 효율적인 컨테이너 격리 솔루션으로, 고도의 보안 요구사항을 충족시키는 데 이상적입니다.