🐳 Container/K8S

[K8s][CKS] 컨테이너의 불변성 보장

heywantodo 2024. 5. 24. 18:28
728x90
반응형

[K8s][CKS] 컨테이너의 불변성 보장

컨테이너는 기본적으로 변경이 불가능하지만, 내부 업데이트를 수행할 수 있다.

파일을 pod에 직접 복사하거나, 셀에 접속해서 변경하는 등 다양한 방법으로 작업을 수행할 수 있다.

 

이를 방지하기 위해선, pod가 시작된 후에는 파일시스템에 쓸 수 없도록 해야한다.

이 때 사용할 수 있는게 security contexts다.

 

Security Contexts

불변성 보장하기 위해 readOnlyRootFilesystem=true를 사용한다.

다음과 같은 manifest file을 임의로 생성해보자.

k run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml

 

해당 yaml 파일의 container단에 securityContexts를 추가 해준다. 

권한이 없어서 cache 폴더가 생성이 안되기 때문에, cache 경로 또한 마운트를 해준다.

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
    securityContext:
      readOnlyRootFilesystem: true
    volumeMounts:
    - name: cache-volume
      mountPath: /var/cache/nginx
    - name: runtime-volume
      mountPath: /var/run
  volumes:
    - name: cache-volume
      emptyDir: {}
    - name: runtime-volume
      emptyDir: {}

 

리소스 생성 후 불변성 테스트를 해본다.

k create -f nginx.yaml
k exec -it nginx -- apt update

 

참고

https://github.com/kodekloudhub/certified-kubernetes-security-specialist-cks-course/blob/main/docs/07-Monitoring,-Logging-and-Runtime-Security/08-Ensure-Immutability-of-Containers-at-Runtime.md

728x90
반응형