本文中,我们将探索Kubernetes命名空间,它是集群中组织和管理对象的一种方式。

介 绍

Kubernetes集群可以同时管理大量互不相关的工作负载,而组织通常会选择将不同团队创建的项目部署到共享集群上。随着数量的增加,部署对象常常很快就会变得难以管理,拖慢操作响应速度,并且会增加危险错误出现的概率。

Kubernetes使用命名空间的概念帮助解决集群中在管理对象时的复杂性问题。命名空间允许将对象分组到一起,便于将它们作为一个单元进行筛选和控制。无论是应用自定义的访问控制策略,还是为了测试环境而分离所有组件,命名空间都是一个按照组来处理对象、强大且灵活的概念。

在本文中,我们会讨论命名空间的工作原理,介绍一些常用实例,并分享如何使用命名空间来管理Kubernetes对象。最后,我们还会介绍一个叫做projects(项目)的Rancher特性,看它是如何构建并扩展命名空间的概念的。

什么是命名空间,为什么它很重要?

命名空间(namespace)是Kubernetes提供的组织机制,用于给集群中的任何对象组进行分类、筛选和管理。每一个添加到Kubernetes集群的工作负载必须放在一个命名空间中。

命名空间为集群中的对象名称赋予作用域。虽然在命名空间中名称必须是唯一的,但是相同的名称可以在不同的命名空间中使用。这对于某些场景来说可能帮助很大。例如,如果使用命名空间来划分应用程序生命周期环境(如开发、staging、生产),则可以在每个环境中维护利用同样的名称维护相同对象的副本。

命名空间还可以让用户轻松地将策略应用到集群的具体部分。你可以通过定义ResourceQuota对象来控制资源的使用,该对象在每个命名空间的基础上设置了使用资源的限制。类似地,当在集群上使用支持网络策略的CNI(容器网络接口)时,比如Calico或Canal(calico用于策略,flannel用于网络)。你可以将NetworkPolicy应用到命名空间,其中的规则定义了pod之间如何彼此通信。不同的命名空间可以有不同的策略。

使用命名空间最大的好处之一是能够利用Kubernetes RBAC(基于角色的访问控制)。RBAC允许您在单个名称下开发角色,这样将权限或功能列表分组。ClusterRole对象用于定义集群规模的使用模式,而角色对象类型(Role object type)应用于具体的命名空间,从而提供更好的控制和粒度。在角色创建后,RoleBinding可以将定义的功能授予单个命名空间上下文中的具体具体用户或用户组。通过这种方式,命名空间可以使得集群操作者能够将相同的策略映射到组织好的资源集合。

常见的命名空间使用模式

命名空间是一种非常灵活的特性,它不强制使用特定的结构或组织模式。不过尽管如此,还是有许多在团队内常使用的模式。

将命名空间映射到团队或项目上

在设置命名空间时有一个惯例是,为每个单独的项目或者团队创建一个命名空间。这和我们前面提到的许多命名空间的特性很好的结合在了一起。

通过给团队提供专门的命名空间,你可以用RBAC策略委托某些功能来实现自我管理和自动化。比如从命名空间的RoleBinding对象中添加或删除成员就是对团队资源访问的一种简单方法。除此之外,给团队和项目设置资源配额也非常有用。有了这种方式,你可以根据组织的业务需求和优先级合理地访问资源。

使用命名空间对生命周期环境进行分区

命名空间非常适合在集群中划分开发、staging以及生产环境。通常情况下我们会被建议将生产工作负载部署到一个完全独立的集群中,来确保最大程度的隔离。不过对于较小的团队和项目来说,命名空间会是一个可行的解决方案。

和前面的用例一样,网络策略、RBAC策略以及配额是实现用例的重要因素。在管理环境时,通过将网络隔离来控制和组件之间的通信能力是很有必要的。同样,命名空间范围的RBAC策略允许运维人员为生产环节设置严格的权限。配额能够确保对最敏感环境的重要资源的访问。

重新使用对象名称的能力在这里很有帮助。在测试和发布对象时,可以把它们放到新环境中,同时保留其命名空间。这样可以避免因为环境中出现相似的对象而产生的混淆,并且减少认知开销。

使用命名空间隔离不同的使用者

另一个命名空间可以解决的用例是根据使用者对工作负载进行分段。比如,如果你的集群为多个客户提供基础设施,那么按命名空间进行分段就能够实现管理每个客户,同时跟踪账单的去向。

另外,命名空间的特性可以让你控制网络和访问策略,为你的使用者定义不同的配额。在通用的情况下,命名空间允许你为每个用户开发和部署相同模板化环境的不同实例。这种一致性可以大大简化管理和故障诊断的过程。

理解预配置的Kubernetes命名空间

在我们进行创建命名空间之前,先讨论一下Kubernetes是如何自动设置它的。在默认情况下,新的集群上有三个命名空间:

  • default:向集群中添加对象而不提供命名空间,这样它会被放入默认的命名空间中。在创建替代的命名空间之前,该命名空间会充当用户新添加资源的主要目的地,无法删除。
  • kube-public:kube-public命名空间的目的是让所有具有或不具有身份验证的用户都能全局可读。这对于公开bootstrap组件所需的集群信息非常有用。它主要是由Kubernetes自己管理。
  • kube-system:kube-system命名空间用于Kubernetes管理的Kubernetes组件,一般规则是,避免向该命名空间添加普通的工作负载。它一般由系统直接管理,因此具有相对宽松的策略。

虽然这些命名空间有效地将用户工作负载与系统管理的工作负载隔离,但它们并不强制使用任何额外的结构对应用程序进行分类和管理。比较友好的是,创建和使用额外的命名空间非常简单

使用命名空间

使用kubectl管理命名空间及其包含的资源相当简单。在这一节中,我们将演示一些最常见的命名空间操作,便于你开始有效地分割资源。

查看现有的命名空间

要显示集群中可用的所有命名空间,使用kubectl get namespaces命令:

该命令显示了所有可用的命名空间,无论它们是否是活跃的。此外还有资源的时长(age)。

如果想获得更详细的信息,使用kubectl describe命令:

Name: default

Labels: field.cattle.io/projectId=p-cmn9g

Annotations: cattle.io/status={"Conditions":[{"Type":"ResourceQuotaInit

kubernetes不同的命名空间下的容器能通信吗_超长干货 | Kubernetes命名空间详解相关推荐

  1. kubernetes不同的命名空间下的容器能通信吗_深入浅出聊聊Kubernetes网络:容器网络初探...

    前 言 随着云计算的兴起,各大平台之争也落下了帷幕,Kubernetes作为后起之秀已经成为了事实上的PaaS平台标准,而网络又是云计算环境当中最复杂的部分,总是让人琢磨不透.本文尝试着围绕在Kube ...

  2. kubernetes不同的命名空间下的容器能通信吗_在Kubernetes环境中,容器间如何进行网络通信?...

    前 言 随着云计算的兴起,各大平台之争也落下了帷幕,Kubernetes作为后起之秀已经成为了事实上的PaaS平台标准,而网络又是云计算环境当中最复杂的部分,总是让人琢磨不透.本文尝试着围绕在Kube ...

  3. docker容器网络 - 同一个host下的容器间通信

    2019独角兽企业重金招聘Python工程师标准>>> 对于复杂的应用,不可避免需要多个服务部署在多个容器中,并且服务间存在相互间通信的情况.比如服务A需要连接mysql的容器.本文 ...

  4. Windows系统下nodejs、npm、express的下载和安装教程详解

    这篇文章主要介绍了Windows系统下nodejs.npm.express的下载和安装教程详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 1. node.js下载 首先进入http://nod ...

  5. 超长干货 | Kubernetes命名空间详解

    K8s使用命名空间的概念帮助解决集群中在管理对象时的复杂性问题.在本文中,会讨论命名空间的工作原理,介绍常用实例,并分享如何使用命名空间来管理K8s对象.最后,介绍名为projects的Rancher ...

  6. Ubuntu14.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu 14.04.4 LTS ...

  7. Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu 16.04.1 LTS ...

  8. linux下小型web服务器boa的使用,5.BoaWeb服务器使用详解

    2.编译安装 实验环境:Linux 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:58:04 UTC 2016 i686 i686 i686 GNU/Lin ...

  9. linux下crontab allow,【Python】Linux crontab定时任务配置方法(详解)

    CRONTAB概念/介绍html crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供以后读取和执行.linux ...

最新文章

  1. MySQL · 最佳实践 · 如何索引JSON字段
  2. 持续集成工具Jenkins看这篇就够啦!
  3. ubuntu怎么关防火墙
  4. linux 远程 i o 错误,故意在Linux中导致I / O错误?
  5. Linux : find big file in the all directories
  6. 树状数组的建树 单点修改 单点查询 区间修改 区间查询
  7. Python 绘制热力图参数详解
  8. 8086的内中断典型如int 21h的分析
  9. 如何选择大数据软件开发公司
  10. Mysql简单的存储过程怎么写
  11. paip.函数式编程方法概述以及总结
  12. 3ds max 2020 vray 5.0 渲染设置
  13. 利润表模板excel_让财务人看完心动的369个Excel财务分析图表,老板都忍不住点赞...
  14. VMware centos7镜像安装详细步骤
  15. NTP/PTP时间同步入门
  16. 2012年9月ITbrand笔记本品牌排行榜
  17. 导轨式串口服务器作用,什么是485串口服务器?有什么功能与作用?
  18. Chrome浏览器截取网页生成图片
  19. 微信app支付和公众号内支付JSAPI
  20. windows引导过程以及多系统引导原理

热门文章

  1. 怎么找回失踪的NTLDR文件
  2. CentOS 7 安装 MySQL
  3. Navicat Mac 快捷键有哪些
  4. win7实用技巧之十——卷影副本
  5. 水电收费系统开发日志(一)
  6. 安全挑战和SD-WAN解决方案
  7. mpls ldp lsp建立过程——Vecloud
  8. ORACLE导入导出后发生中文乱码的原因及解决办法
  9. 从命令行运行postman脚本
  10. Java并发编程——线程池的使用