Tanzu Kubernetes 클러스터에 방명록 애플리케이션을 배포하여 서비스 계정, 배포 및 서비스 생성에 대한 포드 보안 정책을 탐색합니다.
방명록 애플리케이션을 배포하는 것은 Kubernetes를 살펴볼 수 있는 일반적인 방법입니다. Tanzu Kubernetes Grid 서비스에서 프로비저닝된 Tanzu Kubernetes 클러스터에 모든 방명록 YAML 파일을 배포하면 애플리케이션 포드가 생성되지 않습니다. kubectl describe pod
명령을 실행하면 다음 오류 메시지가 나타납니다.
“Error: container has runAsNonRoot and image will run as root”
방명록 애플리케이션에서는 deployment
및 replicaset
리소스를 모두 사용하여 기본 네임스페이스에 권한 있는 컨테이너를 배포합니다. Tanzu Kubernetes 클러스터에 대해 PodSecurityPolicy 컨트롤러가 사용되도록 설정되어 있으므로 클러스터 사용자가 방명록 애플리케이션 포드를 생성하려고 하면 이러한 컨트롤러의 서비스 계정이 PodSecurityPolicy에 기반하여 확인됩니다. 적절한 PSP가 이러한 서비스 계정에 바인딩되지 않으면 해당 애플리케이션이 배포되지 않습니다.
기본적으로 Tanzu Kubernetes 관리자는 사용자 계정을 사용하여 네임스페이스에 권한 있는 포드를 직접 생성할 수 있습니다. 그러나 방명록 애플리케이션에서는 서비스 계정을 사용하여 권한 있는 컨테이너를 배포합니다. 클러스터 관리자는 kube-system
네임스페이스에 Deployment, StatefulSet 및 DaemonSet를 생성할 수 있습니다. 그러나 방명록 애플리케이션에서는 이러한 리소스를 기본 네임스페이스에 배포합니다. 또한 관리자가 아닌 사용자는 적절한 PSP 및 바인딩 없이는 권한 있는 또는 권한 없는 포드를 전혀 생성할 수 없습니다.
한 가지 해결 방법은 기본 권한 있는 PSP에 대한 바인딩을 생성하여 방명록 애플리케이션 배포를 허용하는 것입니다. 권한 있는 PodSecurityPolicy는 바인딩된 계정에 대해 루트로 실행 포드 및 권한 있는 컨테이너를 허용합니다. 클러스터 전체에 vmware-system-privileged
를 적용하는 ClusterRoleBinding을 생성할 수 있지만 이렇게 하면 필요한 것보다 많은 권한을 부여하여 최소 권한의 원칙을 위반할 수 있습니다. 더 나은 접근 방법은 시스템 서비스 계정이 기본 네임스페이스에서 권한 있는 PodSecurityPolicy를 사용할 수 있도록 하는 RoleBinding을 생성하는 것입니다. 자세한 내용은 포드 보안 정책에 대한 역할 바인딩 예의 내용을 참조하십시오.
사전 요구 사항
- Kubernetes 설명서의 방명록 애플리케이션 자습서
- Tanzu Kubernetes 클러스터에서 포드 보안 정책 사용
- 포드 보안 정책에 대한 역할 바인딩 예