부제: Namespaces as a Service를 제공해야 누군가가 떠먹여줬으면 하는 개발자를 위한 정리
클러스터를 하나씩 나누어주면 비용, scale out, 자원의 효율성 등에서 문제가 발생합니다.
가장 빠른 해결 방법은 아래와 같이 하나의 클러스터를 네임스페이스로 나누어서 여러 tenant들에게 나누어 주는 것입니다.
이를 통해서 여러 사용자가 분리된 환경에서 공평하게 하나의 클러스터를 나누어 쓸 수 있습니다.
중요 항목을 [ ]로 표기했습니다.
Access Control
- [ ] Authentication: IAM
- [ ] Authorization: RBAC
테넌트 관리자(네임스페이스 관리자), 테넌트 개발자(네임스페이스 관리자, 네임스페이스 뷰어), https://cloud.google.com/kubernetes-engine/docs/best-practices/enterprise-multitenancy#tenant-rbac
- [ ] Auditing
Resource Sharing
- [ ] Quotas(namespace)
- Limit Range(pod)
- Pod Affinity/Anti-affinity
- Pod Priority
Runtime Isolation
- [ ] Network Policy
- Pod Secrurity Context
- Pod Security Policy(recommanded to use OPA Gatekeeper or Anthos Policy Controller)
- Runtime Class(pods in sandboxes)
Logging, Monitoring, and Alerting
- [ ] Logging(by namespace)
- [ ] Monitoring(by namespace)
- [ ] Alerting(by namespace)
kiosk: 쿠버네티스 네임스페이스 격리 도구
admin이 계정과 리소스 쿼터를 설정해서 제공하면 user가 Space라는 가상화된 네임스페이스를 사용하는 구조
vcluster: 호스트 쿠버네티스의 네임스페이스에 가상 쿠버네티스 클러스터를 만들어주는 도구(다만, vcluster control plane 파드가 추가로 떠야 한다.)
vcluster control plane 파드(control plane과 스케줄러 대체용인 syncer)를 띄워서 호스트 쿠버네티스의 네임스페이스에서 동작하게 하는 구조
Multi-Tenancy Benchmarks (MTB): 네임스페이스 별로 Multi-Tenancy 구성을 확인할 수 있는 도구
Hierarchical Namespace Controller (HNC): 사용자가 네임스페이스를 생성할 수 있게 해주는 프로젝트
https://kubernetes.io/blog/2021/04/15/three-tenancy-models-for-kubernetes/#namespaces-as-a-service
https://www.youtube.com/watch?v=NN5vLUaa_Ko
https://cloud.google.com/kubernetes-engine/docs/best-practices/enterprise-multitenancy