Namespace 是k8s中做用户隔离的,适用于多租户的场景。
Namespace 是 Kubernetes 用于实现资源逻辑隔离、多租户、安全授权和环境区分的重要机制,是大规模集群必备的组织手段。
-
Namespace 是什么?
Namespace 是 Kubernetes 集群中的一种逻辑隔离方式,可以将集群内的资源(Pod、Service、Deployment、ConfigMap、Secret 等)划分到不同的空间。
每个 Namespace 里的资源名称互不影响(即可以有多个同名 Pod/Service,但在不同的 Namespace 下)。
常用于多租户环境、开发/测试/生产环境隔离、团队/项目隔离等场景。 -
Namespace 的作用
资源隔离: 不同 namespace 内的资源彼此独立,便于管理和权限控制。
名称空间下的唯一性: 只要在不同 namespace,下同名资源不会冲突。
配合 RBAC 实现权限细粒度控制。
便于批量管理和删除一组相关资源。
系统组件与业务组件分开: K8s 默认有 kube-system(系统组件)、default(默认)、kube-public(公开只读)等命名空间。 -
使用场景举例
场景1:开发、测试、生产环境隔离
dev 命名空间放开发环境应用;
test 放测试环境;
prod 放生产环境;
各自的 Service 和 Deployment 不会冲突。
场景2:多团队/多项目共享一个集群
每个团队一个 namespace,互不干扰,RBAC 控制各自权限。
场景3:系统组件与业务组件分开管理
K8s 系统组件都在 kube-system,业务应用都在自定义命名空间。
- 常见问题与注意事项
默认情况下,不同 namespace 的 Pod 无法通过 Service 名称直接访问彼此,但可以通过全限定域名访问,如 svcname.namespace.svc.cluster.local。
某些全局对象(如 Node、PersistentVolume)不属于任何 namespace。
删除 namespace 会级联删除其中所有对象,请谨慎操作!
azureuser@master-001:~$ kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-deploy-f88b65dbc-ghrcn 1/1 Running 1 (38m ago) 43h
default nginx-deploy-f88b65dbc-vf4nx 1/1 Running 1 (38m ago) 43h
default nginx-deploy-f88b65dbc-vwvmb 1/1 Running 1 (38m ago) 43h
kube-flannel kube-flannel-ds-glzb5 1/1 Running 0 11m
kube-flannel kube-flannel-ds-ltkc8 1/1 Running 0 11m
kube-flannel kube-flannel-ds-r4x7j 1/1 Running 0 11m
kube-system coredns-5dd5756b68-b6462 1/1 Running 1 (38m ago) 43h
kube-system coredns-5dd5756b68-lmhq7 1/1 Running 1 (38m ago) 43h
kube-system etcd-master-001 1/1 Running 4 (38m ago) 43h
kube-system kube-apiserver-master-001 1/1 Running 4 (38m ago) 43h
kube-system kube-controller-manager-master-001 1/1 Running 4 (38m ago) 43h
kube-system kube-proxy-88ql9 1/1 Running 1 (38m ago) 43h
kube-system kube-proxy-g4bk6 1/1 Running 1 (38m ago) 43h
kube-system kube-proxy-wb977 1/1 Running 1 (38m ago) 43h
kube-system kube-scheduler-master-001 1/1 Running 4 (38m ago) 43h
azureuser@master-001:~$