[GCP] GKE Sandbox로 워크로드 격리 강화하기

Hailey·2020년 9월 12일
1

GCP

목록 보기
17/29

GKE Sandbox

: 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
profile
Business & Software 💗🌎

0개의 댓글