이 항목에서는 TKG(Tanzu Kubernetes Grid)에서 배포한 워크로드 클러스터를 보호하기 위해 PSA(포드 보안 승인) 컨트롤러를 구성하는 방법을 설명합니다.
Kubernetes v1.23 이상을 실행하는 클러스터 또는 클러스터 내의 네임스페이스의 경우 TKG는 PSA(포드 보안 승인) 컨트롤러를 통해 privileged
, baseline
또는 restricted
유형의 포드 보안 정책을 적용할 수 있습니다.
Kubernetes의 PSA 컨트롤러를 사용하면 다음 두 축을 따라 워크로드 보안 정책을 구성할 수 있습니다.
privileged
, baseline
, restricted
순으로 가장 제한적입니다.warn
은 경고를 출력하고, audit
는 감사 로그 항목을 추가하고, enforce
는 포드 생성을 차단합니다.PSA 컨트롤러가 특정 네임스페이스 또는 클러스터 전체에서 작동하도록 구성할 수 있습니다. 예를 들어 baseline
포드가 보안 정책을 위반할 때 감사 로그를 트리거하도록 클러스터를 구성하고 restricted
포드가 정책을 위반하는 경우 차단할 수 있습니다.
자세한 내용은 Kubernetes 설명서의 포드 보안 표준을 참조하십시오.
PSA 시스템은 Kubernetes v1.25 릴리스 정보에 설명된 대로 Kubernetes v1.21에서 더 이상 사용되지 않으며 v1.25에서 제거된 PSP(포드 보안 정책)를 대체합니다.
노드용 PSP는 Kubernetes에서의 사용 중단을 반영하기 위해 TKG v2.1에서 더 이상 사용되지 않습니다. PSP에서 PSA 컨트롤러로 포드를 마이그레이션하는 방법에 대한 자세한 내용은 PodSecurityPolicy에서 기본 제공 PodSecurity 승인 컨트롤러로 마이그레이션을 참조하십시오.
TKG 워크로드 클러스터의 기본 PSA 설정은 실행 중인 Kubernetes 버전에 따라 다릅니다.
warn
및 audit
모드: restricted
enforce
모드: 설정 없음warn
및 audit
모드: baseline
enforce
모드: 설정 없음TKG 2.3, v2.2, v2.1에서 네이티브 Kubernetes 버전을 실행하는 클러스터의 기본 PSA 설정은 정책 위반에 대한 경고를 생성하더라도 PSP에서 PSA로 마이그레이션하는 동안 포드가 계속 실행되도록 합니다.
TKG v2.2부터 모든 내부 TKG 구성 요소는 PSA restricted
프로파일을 준수합니다.
클러스터 전체 PSA를 사용하여 새 클러스터를 구성하거나 기존 클러스터의 PSA를 변경할 수 있습니다.
새 워크로드 클러스터를 위한 클러스터 전체 PSA를 구성하려면 클러스터 구성 파일의 POD_SECURITY_STANDARD_DEACTIVATED
을 false
로 설정하고, 다른 POD_SECURITY_STANDARD_*
변수를 구성 파일 변수 참조의 포드 보안 표준 표에 설명된 대로 설정합니다.
POD_SECURITY_STANDARD_DEACTIVATED
POD_SECURITY_STANDARD_AUDIT
POD_SECURITY_STANDARD_WARN
POD_SECURITY_STANDARD_ENFORCE
클래스 기반 클러스터 생성에 설명된 2단계 프로세스의 1단계로 클러스터 매니페스트를 생성한 다음, 2단계에서 클러스터를 생성하기 전에 아래 기존 클래스 기반 클러스터의 PSA 변경에 설명된 대로 Cluster
규격에서 podSecurityStandard
변수 값을 편집할 수도 있습니다.
기존 클래스 기반 클러스터의 PSA 구성을 변경하려면 다음을 수행합니다.
편집기에서 Cluster
개체 규격을 엽니다.
kubectl edit -namespace NAMESPACE CLUSTER
spec.topology.variables
의 podSecurityStandard
블록에서 값을 편집합니다.
- name: podSecurityStandard
value:
deactivated: DEACTIVATED
audit: AUDIT-PROFILE
enforce: ENFORCE-PROFILE
warn: WARN-PROFILE
auditVersion: AUDIT-VERSION
enforceVersion: ENFORCE-VERSION
warnVersion: WARN-VERSION
exemptions:
namespaces: [EXEMPT-NS]
여기서:
DEACTIVATED
는 클러스터 전체 PSA를 적용하려면 false
이고, 그렇지 않으면 true
입니다.AUDIT-PROFILE
, ENFORCE-PROFILE
, WARN-PROFILE
은 각 모드의 PSA 프로파일이며, "privileged"
, "baseline"
또는 "restricted"
가 될 수 있습니다. 기본값은 "privileged"
입니다.VERSION
값은 세 가지 모드(예: "v1.26"
)의 Kubernetes 버전입니다.EXEMPT-NS
PSA 제어에서 제외할 네임스페이스의 쉼표로 구분된 목록입니다.참고: 시스템 네임스페이스
kube-system
및tkg-system
은 항상 PSA 제어에서 제외됩니다.
Cluster
개체 규격을 적용한 후 변경 내용이 클러스터의 제어부 노드로 롤아웃됩니다.기존 레거시 클러스터의 PSA 구성을 변경하려면 다음을 수행합니다.
KubeadmControlPlane
개체에서 현재 AdmissionConfiguraton
규격 파일을 검색하고 로컬로 저장합니다. 예를 들면 다음과 같습니다.
kubectl get kcp my-cluster-control-plane --template='{{ range $v := .spec.kubeadmConfigSpec.files }}{{ if eq $v.path "/etc/kubernetes/admission-control-config.yaml" }}{{ $v.content }}{{ end }}{{ end }}' > admission-config.yaml
admission-config.yaml
파일을 새 구성에 편집합니다. 예를 들어 다음은 enforce
를 baseline
으로 설정하고, audit
및 warn
모드를 restricted
로 유지합니다.
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
configuration:
apiVersion: pod-security.admission.config.k8s.io/v1beta1
kind: PodSecurityConfiguration
defaults:
enforce: "baseline"
enforce-version: "v1.24"
audit: "restricted"
audit-version: "v1.24"
warn: "restricted"
warn-version: "v1.24"
exemptions:
usernames: []
runtimeClasses: []
namespaces: ["kube-system", "tkg-system"]
KubeadmControlPlane
개체 규격을 편집하고 spec.kubeadmConfigSpec.files
의 어레이 항목을 새 구성 파일로 바꿉니다.
KubeadmControlPlane
개체 규격을 적용한 후 변경 내용이 클러스터의 제어부 노드로 롤아웃됩니다.
PSA를 추가하거나 변경하기 전에 PSA 클러스터 또는 네임스페이스의 모든 기존 워크로드가 새 정책 설정을 준수하는지 확인하여 예기치 않은 다운타임을 방지합니다.
기존 네임스페이스에서 실행되는 포드가 kubectl label --overwrite --dry-run=server
를 실행하여 지정된 정책을 준수하는지 여부를 평가할 수 있습니다.
kubectl label --overwrite --dry-run=server namespace <namespace> pod-security.kubernetes.io/enforce=<policy>
포드 보안 승인의 audit
모드를 구성할 때 또는 클러스터에 리소스를 적용하고 warn
모드를 구성할 때 동일한 정보가 감사 로그에 기록됩니다.
포드 보안을 위한 다양한 프로파일에 대한 최신 정보는 Kubernetes 설명서에서 확인할 수 있습니다.