2. Kubernetes 命名空间基础:Namespace 概念、默认 Namespace、创建与管理 Namespace
2.1 什么是 Namespace?—— 虚拟集群的边界
在 Kubernetes 中,Namespace(命名空间) 是集群内部的一种虚拟隔离机制。它允许你将一个物理集群划分为多个逻辑子集群,每个子集群拥有独立的资源视图和访问控制边界。Namespace 是 Kubernetes 实现多租户隔离的基石。
核心特性:
- 资源隔离:Pod、Service、Deployment、ConfigMap 等资源默认只在同一 Namespace 内可见。
- 命名作用域:同一 Namespace 内资源名称必须唯一,不同 Namespace 允许重名。
- 策略挂载点:RBAC、NetworkPolicy、ResourceQuota 等策略可以绑定到特定 Namespace。
- 非物理隔离:Namespace 不提供网络或存储的硬隔离,仅通过 API 逻辑划分。
💡 关键认知:Namespace 不是安全边界,而是组织边界。真正的安全隔离需要结合 NetworkPolicy、Pod Security Admission 和 RBAC 共同实现。
2.2 默认 Namespace 与系统 Namespace
Kubernetes 集群在创建时会自动初始化 4 个 Namespace,它们承载着集群自身的核心组件与默认行为:
| Namespace 名称 | 角色说明 | 典型资源 |
|---|---|---|
default |
用户默认工作空间。未指定 Namespace 时资源默认创建于此。 | 用户应用 Pod、Service |
kube-system |
集群控制面组件与系统级守护进程。 | CoreDNS、kube-proxy、metrics-server |
kube-public |
集群内所有用户(含未认证)可读的公共资源。 | 集群公共信息 ConfigMap |
kube-node-lease |
节点心跳租约(Lease)对象,用于节点健康检测。 | Node Lease 对象 |
⚠️ 生产建议:不要将业务应用部署在
kube-system 或 kube-public 中。始终为每个租户或项目创建独立的 Namespace,避免污染系统空间。
2.3 Namespace 生命周期管理
2.3.1 创建 Namespace
方式一:声明式 YAML
apiVersion: v1
kind: Namespace
metadata:
name: team-alpha
labels:
environment: production
team: alpha
方式二:命令行快速创建
kubectl create namespace team-alpha
kubectl create namespace team-beta --dry-run=client -o yaml # 预览 YAML
2.3.2 查看与切换 Namespace
# 查看所有 Namespace
kubectl get namespaces
# 查看指定 Namespace 内的资源
kubectl get pods -n team-alpha
# 切换当前上下文默认 Namespace(避免每次加 -n)
kubectl config set-context --current --namespace=team-alpha
2.3.3 删除 Namespace
kubectl delete namespace team-alpha
🔴 删除风险:删除 Namespace 会级联删除其内部所有资源(Pod、Service、PVC 等),且不可恢复。生产环境中务必先确认 Namespace 内无重要数据。
2.4 Namespace 资源隔离与作用域示意图
下图展示了 Namespace 如何将集群划分为多个逻辑隔离域,以及资源在 Namespace 内的可见性边界:
2.5 资源作用域对比:集群级 vs 命名空间级
并非所有 Kubernetes 资源都受 Namespace 约束。理解资源的作用域对于正确规划多租户架构至关重要:
| 作用域类型 | 资源示例 | 说明 |
|---|---|---|
| 命名空间级 | Pod、Service、Deployment、ConfigMap、Secret、PVC、Ingress、Role、RoleBinding | 资源必须属于某个 Namespace,名称在 Namespace 内唯一 |
| 集群级 | Node、PersistentVolume、Namespace、ClusterRole、ClusterRoleBinding、StorageClass | 资源不属于任何 Namespace,名称在整个集群内唯一 |
📌 多租户规划要点:使用
ResourceQuota 和 LimitRange 限制每个 Namespace 的资源消耗上限;使用 NetworkPolicy 控制 Namespace 间的网络流量;使用 RBAC 控制用户对 Namespace 的访问权限。
2.6 常用 Namespace 操作命令速查
# 创建
kubectl create namespace <name>
# 列出
kubectl get ns
kubectl get namespace <name> -o yaml
# 描述详情
kubectl describe namespace <name>
# 设置默认 Namespace(当前上下文)
kubectl config set-context --current --namespace=<name>
# 删除(级联删除内部所有资源)
kubectl delete namespace <name>
# 查看资源时指定 Namespace
kubectl get pods -n <name>
kubectl get all -n <name>
2.7 本章小结
- Namespace 是 Kubernetes 实现逻辑多租户的核心抽象,提供资源命名隔离与策略挂载点。
- 集群自带
default、kube-system、kube-public、kube-node-lease四个系统 Namespace。 - 创建 Namespace 推荐使用声明式 YAML 并附加标签,便于后续策略匹配与资源审计。
- 删除 Namespace 是高危操作,会级联销毁内部所有资源。
- 区分集群级与命名空间级资源,是设计多租户隔离架构的前提。