- 포드 내에서 호스트 노드의 네임스페이스 사용하기
- 포드에서 노드의 네트워크 네임스페이스 사용하기
- 호스트 네임스페이스를 사용하지 않고 호스트 포드에 바인딩
- 노드의 PID와 IPC 네임스페이스 사용
- 컨테이너 보안 컨텍스트 설정: 사용자 ID 지정, 루트 실행 방지…
- 특정 사용자로 컨테이너 실행: runAsUser
- 컨테이너가 루트로 실행되는 것을 방지하기: RunAsNonRoot: true
- 권한 모드에서 포드 실행: previleged: true
- 컨테이너에 개별 커널 기능 추가: capabilities:
- 컨테이너에서 기능 제거: drop:
- 프로세스가 컨테이너의 파일 시스템에 쓰는 것 방지: readOnlyRootFileSystem: true
- 컨테이너가 다른 사용자로 실행될 때 볼륨 공유: fsGroup, supplementalGroups:
- 포드의 보안 관련 기능 사용 제한하기
- PodSecurityPolicy 리소스의 소개: 포드가 호스트의 IPC, PID, 네트워크 네임스페이스 사용 제한…
- runAsUser, fsGroup, supplementalGroups 정책
- MustRunAs 규칙 사용
- 정책의 범위를 벗어나는 runAsUser 포드 배포
- 범위를 벗어난 사용자 ID로 설정된 컨테이너 이미지가 있는 포드를 배포
- runAsUser 필드에서 MustRunAsNonRoot 사용
- 허용, 기본 값, 허용하지 않음 설정: allowedCapabilities, defaultCapabilities, requredDropCapabilities
- 컨테이너에 추가할 수 있는 기능 지정
- 모든 컨테이너에 기능 추가
- 컨테이너에서 기능 사용 못하게 하기
- 포드가 사용할 수 있는 볼륨의 유형 제한: volumes
- 다른 사용자 및 그룹에 다른 PodSecurityPolicies 할당
- 특정 컨테이너를 배포할 수 있는 PodSecurityPolicy 생성하기
- 여러 사용자에게 다른 PodSecurityPolicy 할당하기 위해 RBAC 사용
- kubectl을 위한 추가 사용자 생성
- 다른 사용자로 포드 생성
- 포드 네트워크 분리
- 네임스페이스에서 네트워크 격리 사용: kind: NetworkPolicy
- 네임스페이스의 일부 포드만 서버 포드에 연결하도록 허용
- 쿠버네티스 네임스페이스 간 네트워크 격리
- CIDR 표기법을 사용한 격리: ingress.from.ipBlock.cidr:
- 포드 세트의 아웃바운드 트래픽 제한: egress.to.podSelector:
- 요약
- 포드는 자체 네임스페이스 대신 노드의 리눅스 네임스페이스를 사용할 수 있다.
- 컨테이너는 컨테이너 이미지에 정의된 것 대신에 사용자나 그룹으로 실행되도록 구성할 수 있다.
- 컨테이너는 특권 모드로 실행될 수 있기 때문에 포드에 노출되지 않은 노드의 장치에 액서스 가능하도록 허용할 수 있다.
- 컨테이너는 읽기 전용으로 실행돼 프로세스가 컨테이너의 파일 시스템에 쓰지 못하도록 한다(그리고 마운트된 볼륨에만 쓸 수 있음)
- 클러스터 수준의 PodSecurityPolicy 리소스를 생성해 사용자가 노드를 손상시킬 수 있는 포드를 만들지 못하게 할 수 있다.
- PodSecurityPolicy 리소스는 RBAC의 클러스터롤 및 클러스터롤바인딩을 사용해 특정 사용자와 연관 지을 수 있다.
- NetworkPolicy 리소스는 포드의 인바운드나 아웃바운드 트래픽을 제한하는 데 사용된다.