在前面的文章里面提到过,Pod、Deployment这些对象有许多的属性值,可以用来对自身做诸多限制,从本章开始,我们来一起学习下这些属性。先从最基础的namespace开始学习。
什么是Namespace?
在 Kubernetes 中,Namespace(命名空间) 是一种将集群资源划分为多个逻辑组的机制。它主要用于在同一个 Kubernetes 集群中隔离不同项目、团队或环境(如开发、测试、生产)的资源,避免命名冲突,并简化权限和资源的管理。
- 隔离资源: 通过Namespace,可以将集群中的资源(如Pod、Service、Volume等)进行逻辑上的隔离,避免命名冲突和资源干扰。
- 权限控制: Namespace也是一种权限控制的手段,允许不同的团队或用户在同一个集群中使用独立的Namespace,从而实现资源的独立管理和权限控制。
- 环境隔离: 在开发、测试和生产环境中,可以使用不同的Namespace,确保各个环境之间的资源不会互相影响。
Namespace 的核心作用
-
资源隔离
- 不同 Namespace 中的资源(如 Pod、Service、Deployment 等)是相互隔离的,同名资源可以在不同 Namespace 中存在而不会冲突。
- 例如:
dev
和prod
两个 Namespace 中都可以有一个名为nginx
的 Deployment。
-
权限控制
- 通过 Kubernetes 的 RBAC(基于角色的访问控制),可以为不同 Namespace 分配不同的权限,限制用户或团队的操作范围。
-
资源配额(Resource Quota)
- 可以为每个 Namespace 设置资源配额(如 CPU、内存、存储等),防止某个团队或项目占用过多资源。
-
逻辑分组
- 方便按业务场景(如开发、测试、生产)、团队或应用划分资源,简化管理和监控。
默认 Namespace
Kubernetes 集群初始会自带几个默认的 Namespace:
-
default
:未指定 Namespace 时,资源默认创建在此处。 -
kube-system
:存放 Kubernetes 系统组件(如kube-proxy
、kube-dns
)。 -
kube-public
:存放需要全局访问的公共资源。 -
kube-node-lease
:存放节点租约信息(用于节点心跳检测)。
常见使用场景
-
多团队协作
不同团队(如前端、后端)使用各自的 Namespace,避免资源冲突。 -
多环境管理
同一应用的不同环境(如dev
、staging
、prod
)通过 Namespace 隔离。 -
资源配额限制
限制测试环境的资源使用量,确保生产环境资源充足。 -
权限隔离
开发人员只能访问dev
Namespace,运维人员管理prod
Namespace。
基本操作示例
-
查看所有 Namespace:
kubectl get namespaces
-
创建一个名为dev的 Namespace:
kubectl create namespace dev
-
在指定 Namespace 中部署资源:
kubectl create deployment nginx --image=m.daocloud.io/docker.io/nginx --namespace=dev
-
查看某个 Namespace 的资源:
kubectl get pods --namespace=dev
注意事项
-
跨 Namespace 的通信
不同 Namespace 中的服务可以通过 <service-name>.<namespace-name>.svc.cluster.local
格式的 DNS 名称互相访问。例如,nginx.dev.svc.cluster.local
表示访问dev
Namespace 中的nginx
Service。 -
资源不跨 Namespace
Namespace 隔离的是资源对象(如 Pod、Service),但物理资源(如节点、存储卷)是集群全局共享的。 -
并非完全隔离
Namespace 主要解决逻辑隔离,而不是安全隔离。需结合 RBAC 和网络策略(Network Policies)实现更严格的隔离。