Kubernetes/KoudKloud - CKAD with Tests

PodSecurityPolicy 관련 명령어

비번변경 2021. 11. 25. 20:43

PodSecurityPolicy는 포드 생성 및 업데이트에 대한 권한 부여에 사용한다.

하지만 Kubernetes v1.21부터 deprecated 되었으며, v1.25에서는 제거된다.

 

포드 명령어 실행 사용자 설정

포드 정의 yaml 파일에서 spec.securityContext.runAsUser 필드에 uid를 지정한다.

edit 명령으로 수정할 수 없기 때문에 yaml 파일 수정 및 포드 재생성이 필요하다.

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2021-11-16T09:59:05Z"
  name: ubuntu-sleeper
  namespace: default
  resourceVersion: "743"
  uid: 646a92a3-cd08-4543-acd6-960ab0f67114
spec:
  securityContext:
    runAsUser: 1010
  containers:
  - command:
    - sleep
    - "4800"

 

포드 삭제 및 재생성은 아래 명령으로도 할 수 있다.

 kubectl delete pod <POD_NAME>; kubectl apply -f <FILE_NAME>

 

참고로 포드 명령어 실행 사용자과 포드 내 컨테이너의 명령어 실행 사용자는 서로 다르게 설정할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: multi-pod
spec:
  securityContext:
    runAsUser: 1001
  containers:
  -  image: ubuntu
     name: web
     command: ["sleep", "5000"]
     securityContext:
      runAsUser: 1002

  -  image: ubuntu
     name: sidecar
     command: ["sleep", "5000"]

 

 

컨테이너에 capabilites 설정

루트 사용자의 권한을 부여하지 않고 특정 권한을 사용할 수 있도록 한다.

포드 정의 yaml 파일의 spec.containers.securityContext.capabilites 필드 아래에 add 필드와 배열을 이용해 추가할 capabilites를 나열한다.

기존 포드에 capabilites를 추가하는 경우, 삭제 후 재생성이 필요하다.

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2021-11-16T10:13:54Z"
  name: ubuntu-sleeper
  namespace: default
  resourceVersion: "768"
  uid: 47c01a68-9a0b-4bb3-8ac5-b0f755b1de2d
spec:
  containers:
  - command:
    - sleep
    - "4800"
    securityContext:
      capabilities:
        add: ["SYS_TIME", "NET_ADMIN"]