什么是Kubernetes的名称空间?

Kubernetes名称空间

Kubernetes 中的名称空间本质上是一个逻辑分组,但名称空间也可以帮助管理员和用户创建物理隔离,还可以控制资源访问量。Kubernetes 项目中的所有资源,比如 Pod,ReplicationControllers,和 Services 运行于特定的名称空间上。Kubernetes 中,在每个名称空间的资源的唯一标识符可以是相同的,因此,可以通过使用名称空间来创建不同的部署环境。

(1)划分逻辑分组,提升效率 Kubernetes的名称空间为不同组织或团队提供了一种划分组织分区的方法,Kubernetes中的资源在不同名称空间之间可共享,因此可以创建资源之间的共享,同时不影响资源之间的隔离。

(2)安全控制 Kubernetes 名称空间还支持静态和动态能力,它提供了一种机制来控制集群内部访问资源的能力。可以使用RBAC(基于角色的访问控制)定义不同名称空间之间的信任,以防止跨名称空间的访问权限滥用。

(3)增加灵活性 Kubernetes名称空间可以作为微服务组件的划分,通过增加集群的可用性,可以更灵活地编排依赖,变更和测试。

首先,使用 kubectl可以创建名称空间,以下是创建一个名为 test 的名称空间的示例:


$ kubectl create namespace test
namespace/test created

使用 kubectl 可以查看所有的名称空间,以下是查看 kubernetes 集群中所有的名称空间的示例:


$ kubectl get ns
NAME          STATUS    AGE
default       Active    17m
kube-public   Active    17m
kube-system   Active    17m
test          Active    2m

如果资源在 Kubernetes 集群中运行,但没有在指定的名称空间中,可以使用 kubectl 将该资源移动到指定的名称空间中,以下是示例:


$ kubectl get Service/test-service -n default
NAME           TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
test-service   ClusterIP   10.0.0.1     <none>        80/TCP    19m

$ kubectl get Service/test-service -n test
No resources found in test namespace.

$ kubectl move Service -n default test-service -n test
service/test-service moving to test namespace 
$ kubectl get Service/test-service -n test
NAME           TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
test-service   ClusterIP   10.0.0.1     <none>        80/TCP    2m

Kubernetes 的名称空间可以提供一个很好的资源管理方案,使用 kubectl 命令可以根据名字空间查看其中的资源,以下是查看 test 名称空间中所有资源的示例:


$ kubectl get all -n test
NAME           TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
test-service   ClusterIP   10.0.0.1     <none>        80/TCP    7m

NAME                TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
test-replication   ReplicationController   10.0.0.2      <none>    80/TCP    6m

如果确定不再使用某个名称空间,可以使用下面的命令来删除名称空间:


$ kubectl delete namespace test
namespace "test" deleted

随机文章