k8s 命名空间

介绍

1、k8s 中的命名空间与容器(或pod)中的命名空间是不一样的,k8s 中的命名空间指的是提供了一个作用域,而后者是linux内核提供的命名空间(主机名、网络、文件系统、进程等各个维度),所谓的作用域,例如通过建立service 访问pod 时,如果service 的命名空间不指定正确,那么就无法通过标签关联到pod 。其他资源也是如此。
 
2、与标签选择器相比,标签选择器把资源分组后各组之间资源可以有重叠,命名空间不可以重叠,命名空间具有隔离资源的效果,不同命名空间的同名资源是不同的东西。
 
3、所谓的隔离指的是在作用域的作用下任何对资源的操作都是在某一个命名空间下的,而不是针对于全局。例如对命名空间层面的资源进行增上改查的时候需要指定命名空间,否则无法找到资源。
 
4、命名空间不会隔离不同空间下的Pod 之间的网络通讯,除非针对命名空间加了相应的安全策略。

命名空间的使用需求

1、在使用多个namespace 的前提下,我们可以将包含大量组件的复杂系统拆分为更小的不同组,这些不同组也可以用于在多租户环境中分配资源,将资源分配为生产、开发和 环境,或者以其他任何你需要的方式分配资源。
 
2、资源名称只需在命名空间内保持唯一即可,因此两个不同的命名空间可以包含同名的资源。虽然大多数类型的资源都与命名空间相关(pod,service,ingress),但仍有一些与它无关,其中之一便是全局且未被约束于单一命名空间的节点资源。
 
3、namespace 使我们能够将不属于一组的资源分到不重叠的组中。如果有多个用户或用户组正在使用同Kubernetes集群,并且它们都各自管理自己独特的资源集合,那么它们就应该分别使用各自的命名空间这样,它们就不用特别担无意中修改或删除其他用户的资源,也无须关心名称冲突。
 
4、除了隔离资源,命名空间还可用于仅允许某些用户访问某些特定资源,甚至限制单个用户可用的计算资源数量

相关操作

列出所有命名空间
kubectl get ns

列出命名空间下的资源(pod,service,ingress)

kubectl get pods  --namespace或-n  kube-system        #如果不指定命名空间,默认就是在default 命名空间内操作,包括其他更改资源的操作,都需要只能命名空间,否则都是在默认命名空间default 下的操作

创建命名空间

方式一

vi ns.yaml
apiVersion vl kind : Namespace metadata : name: custom
-namespace #这是命名空间的名称

kubectl create -f ns.yaml

方式二

kubectl create namespace custom-namespace  

 Tips: 命名空间名字和另外几个不允许包含点号

在已创建的命名空间中创建资源
kubectl create -f kubia-manual.yaml  -n custom-namespace

默认命名空间与当前上下文

在列出描述、修改或删除其他命名空间中的对象时需要给 kubectl 命令传递-- name space (或 -n) 选项如果不指定命名空间,kubect 将在当前上下文中配置的默认命名空间中执行操作 。而当前上下文的命名空间和当前上下文本身都可以通过 kubectl config命令进行更改

命名空间提供的隔离

解释一下命名空间不提供什么一一至少不是开箱即用的 。尽管命名空 将对象分隔到不同的组,只 许你对属于特定命名空间的对象进行操作但实际上命名空间之间并不提供对正在运行的对象的任何隔离
例如,你可能会认为当不同的用户在不同的命名空间中部署pod时,这些pod应该彼 隔离,并且无法通信,但事实却并非如此。命名空间之间是否提供网络隔离取决于 Kubemetes 所使用的网络解决方案。当该解决方案不提供命名空间间的网络隔离时-,如果命名空间中的某个pod知道命名空间 bar po IP 地址,那它就可以将流量( 例如 HTT 请求)发送到另一 pod
 
posted @ 2019-12-30 17:28  fanggege  阅读(13971)  评论(0编辑  收藏  举报