kubernetes:具有名称空间的服务名称解析

时间:2018-01-12 10:40:28

标签: kubernetes

使用kubernetes

aws上创建了包含私有拓扑的kops群集

我的应用程序公开了几项服务。正如所料,服务使用其名称相互通信,即下面的name字段:

kind: Service
metadata:
  name: myservice
  namespace: staging_namespace

以下是问题:

假设我将在不同的命名空间中部署我的应用程序的 2 版本(例如testingstaging),这会阻止服务名称碰撞?

命名空间分离是否允许

  • service1myservice部署

  • 中的staging_namespace内找到正确的staging
  • service1myservice部署

  • 中的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"}

2 个答案:

答案 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支持由同一物理群集支持的多个虚拟群集。这些虚拟集群称为名称空间。

Virtual cluster are called namespaces

答案 1 :(得分:1)

简单的答案是肯定的,您可以将具有相同名称的资源放入不同的名称空间中,并且不会发生冲突。