Supported commands: ls, cd ${PATH}

Kubernetes Multi-tenancy

Jan. 20, 2022

부제: Namespaces as a Service를 제공해야 누군가가 떠먹여줬으면 하는 개발자를 위한 정리

Introduction

클러스터를 하나씩 나누어주면 비용, scale out, 자원의 효율성 등에서 문제가 발생합니다.

가장 빠른 해결 방법은 아래와 같이 하나의 클러스터를 네임스페이스로 나누어서 여러 tenant들에게 나누어 주는 것입니다.

0011

이를 통해서 여러 사용자가 분리된 환경에서 공평하게 하나의 클러스터를 나누어 쓸 수 있습니다.

CheckList

중요 항목을 [ ]로 표기했습니다.

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)

Tools

Reference

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