使用kubernetes
aws
上创建了包含私有拓扑的kops
群集
我的应用程序公开了几项服务。正如所料,服务使用其名称相互通信,即下面的name
字段:
kind: Service
metadata:
name: myservice
namespace: staging_namespace
以下是问题:
假设我将在不同的命名空间中部署我的应用程序的 2 版本(例如testing
和staging
),这会阻止服务名称碰撞?
命名空间分离是否允许
service1
在myservice
部署
staging_namespace
内找到正确的staging
service1
在myservice
部署
testing_namespace
内找到正确的testing
使用
kops version
Version 1.8.0 (git-5099bc5)
和
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.1", GitCommit:"f38e43b221d08850172a9a4ea785a86a3ffa3b3a", GitTreeState:"clean", BuildDate:"2017-10-11T23:27:35Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.4", GitCommit:"9befc2b8928a9426501d3bf62f72849d5cbcd5a3", GitTreeState:"clean", BuildDate:"2017-11-20T05:17:43Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
答案 0 :(得分:1)
据我所知,Namespace是k8s集群中的虚拟集群,因此它提供了关注的隔离和分离。它不会冲突如果您在不同的命名空间中有相同的服务或pod。
所有服务都分配了一个唯一的DNS记录,因此没有冲突。例如,
my-svc.my-namespace.svc.cluster.local.
在您的情况下,就像这样
my-svc.staging_namespace.svc.cluster.local.
my-svc.testing_namespace.svc.cluster.local.
我附上了进一步研究的链接。 services-networking
修改:1
命名空间的目的和动机
命名空间的功能是提供环境的逻辑分离,即使是同一个pod或服务也能为k8s资源提供唯一性。
Kubernetes支持由同一物理群集支持的多个虚拟群集。这些虚拟集群称为名称空间。
答案 1 :(得分:1)
简单的答案是肯定的,您可以将具有相同名称的资源放入不同的名称空间中,并且不会发生冲突。