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 内的可见性边界:

Kubernetes Namespace 隔离与作用域示意图 Kubernetes Namespace 隔离与作用域 Kubernetes 集群 Namespace: team-alpha Pod: app-v1 Service: app-svc ConfigMap: cfg Secret: db-pass Namespace: team-beta Pod: app-v2 Service: app-svc PVC: data-vol 不可见 系统 Namespace(kube-system / kube-public / kube-node-lease) CoreDNS kube-proxy metrics-server Lease 不同 Namespace 内的资源名称可以相同(如 app-svc),但彼此不可见、不可直接访问

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 是高危操作,会级联销毁内部所有资源。
  • 区分集群级与命名空间级资源,是设计多租户隔离架构的前提。