K8S Namespace
Namespace 介绍
K8S 中的 Namespace(命名空间)的作用是资源隔离。我们可以想象为在 K8S 集群内的虚拟机,用来讲不空命名空间的资源进行彼此隔离。当企业内部存在多个项目组时,可以通过 Namespace 来对项目组范围资源进行隔离,也可通过 Namespace 对应用相关环境如开发、测试、生产等进行隔离。
虽然 Namespace 可以隔离资源,但是不同的 Namespace 之间的服务是可以互相访问的。这样设计的目的是,让一个 Namespace 命名空间下的团队的服务可以调用另一个 Namespace 命名空间下的服务。
使用 Namespace 还可以提升 K8S 的可控性、安全性和灵活性。
Namespace 类型
K8S 中的 Namespce 默认提供三个命名空间,分别为:
default
当我们创建资源时,未显示的使用命名空间时默认的命名空间
kube-system
k8s 集群默认资源使用的命名空间,不建议改动该命名空间相关资源
kube-public
很少用的命名空间
custom
泛指我们自定的命名空间
Namespace 创建
Namespace 创建的方式有两种,分别如下:
命令行
$ kubectl create namespace test
声明式
# test.yaml apiVersion: v1 kind: Namespace metadata: name: test labels: name: test
$ kubectl apply -f test.yaml
Namespace 查询
Namespace 查询的方式有两种,分别如下:
查询全部
$ kubectl get namespace
查询个别
$ kubectl get namespace test
查询制定资源
$ kubectl get pod --namespace=test $ kubectl get svc --namespace=test $ kubectl get deploy --namespace=test
Namespace 使用
我们可以在创建资源时指定资源所属 Namespace,这里有两种方式,分别如下:
命令行
$ kubectl apply -f pod.yaml --namespace=test
声明式
apiVersion: v1 kind: Pod metadata: name: app namespace: test labels: name: app spac: containers: - name: nginx image: nginx
注意 :建议使用声明式,因为无论资源如何改动,使用的命名空间时不会变化的。
Namespace 激活
K8S 默认激活 default 命名空间,当我们创建资源时,未指定命名空间默认都会在 default 空间下进行资源创建。当然我们可以使用 –namespace 或 -n 进行指定命名空间的相关查询、更新等操作,但是这样还是比较麻烦的,每次执行命令都需要指定对应的命名空间。幸运的是,又一个叫做 kubens 的工具,可以简化这个工作。
kubens 使用非常简单,只需要在终端执行 kebens 然后就会在下面列出当前系统中全部的 namespace,如果需要切换直接选择对应的 namespace 安回车即可激活选中的 namespace 为默认激活命名空间。之后的全部操作,默认都会在该 namespace 下进行。
运行 kubens 查看命名空间
# 运行 kubens 查看命名空间 $ kubens default ✅ kube-public kube-system test
运行 kubens test 切换命名空间
# 运行 kubens test 切换命名空间 $ kubens test $ kubens default kube-public kube-system test ✅
Namespace 多服务
在 K8S 中我们想要访问一个服务,只需要使用每桌的 DNS 服务发现,将应用指向服务名即可,但是当一个集群内有多个同名不通作用的服务器时,这是不行的。通过 Namespace 隔离方式 K8S 允许在不同的 Namespace 中存在相同的服务,通过使用扩展形式的 DNS 地址可以轻松解决此问题。
K8S DNS 解析:
DNS 完整版:<ServiceName>.<NamespaceName>.svc.cluster.local
DNS 精简版:<ServiceName> 可以解析到当前命名空间下的服务。自动解析成完成版 DNS
DNS 命名空间版:<ServiceName>.<NamespaceName> 可以解析到指定命名空间下的服务。自动解析成完成版 DNS
例如:访问 test 命名空间下的数据库服务 < 图 1>,访问 prod 命名空间下的数据库 < 图 2>
图一图二
Namespace 选择
无需使用 Namespace 进行隔离
小团队 5-10 人
可以使用 Namespace 进行隔离
多团队
多团队多服务
多团队多环境
多团队多集群
多团队
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!