: GKE Sandbox는 Pod의 컨테이너가 알 수 없는 또는 신뢰할 수 없는 코드를 실행하거나 노드에서 추가 격리가 필요한 경우 노드의 호스트 커널을 보호하는 방법이다.
먼저 Google Kubernetes Engine API가 사용 설정되었는지, Cloud SDK가 설치되었는지 확인한다.
GKE Sandbox를 사용 설정하려면 노드 풀을 구성해야한다. 기본 노드 풀(클러스터가 생성될 때 생성되는 클러스터의 첫 번째 노드 풀)은 GKE Sandbox를 사용할 수 없다. 따라서 클러스터 생성 중에 GKE Sandbox를 사용 설정하려면 클러스터를 만들 때 두 번째 노드 풀을 추가해야 한다.
클러스터 만들기
(새 클러스터를 생성하지 않고, 기존 클러스터를 활용하려면 클러스터를 수정하여 노드풀을 추가한다.)
-> 노드 풀 추가
-> 노드 섹션의 이미지 유형에서 Containerd(cos_containerd)(베타)를 포함한 Container-Optimized OS를 선택
-> 보안 섹션에서 gVisor로 샌드박스 사용 설정 체크박스를 선택
-> 노드 풀 설정 저장
(gvisor RuntimeClass는 노드가 생성 중일때, 그리고 이 노드에서 워크로드가 예약되기 전에 인스턴스화된다.)
-> GKE Sandbox가 사용 설정된 노드에서 배포 실행을 강제하려면 노드의 spec.template.spec.runtimeClassName을 gvisor로 설정
# httpd.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd
labels:
app: httpd
spec:
replicas: 1
selector:
matchLabels:
app: httpd
template:
metadata:
labels:
app: httpd
spec:
runtimeClassName: gvisor
containers:
- name: httpd
image: httpd
-> 배포를 생성하기 위해 kubectl create 명령어 사용
kubectl create -f httpd.yaml
-> Pod는 GKE Sandbox가 사용 설정된 노드 풀의 노드에 배포된다.
kubectl get pods
-> 출력에서 Pod 이름을 찾은 후 다음 명령어를 실행하여 RuntimeClass 값을 확인한다.
kubectl get pods pod-name -o jsonpath='{.spec.runtimeClassName}'
-> 출력은 다음과 같을 것이다.
gvisor