我可以像链接在 Docker 中具有别名一样在 K8s DNS 中添加服务名称别名吗?

lcf*_*cfd 5 kubernetes kube-dns

在 Docker 中,客户端容器可以通过使用链接别名以不同的名称引用服务器容器:

--link server-container:my_preferred_server
Run Code Online (Sandbox Code Playgroud)

第二个客户端可以使用自己选择的名称

-- link server-container:server
Run Code Online (Sandbox Code Playgroud)

我可以通过在 K8s 的 DNS 中添加不同的记录来更好地在 K8s 中实现这一点吗?

请注意,我们现在使用的解决方案是让客户端容器不使用服务器容器的硬编码名称,而是使用环境变量 SERVER_HOSTNAME='server-container' 的值和不带别名的链接:

--link server_container
Run Code Online (Sandbox Code Playgroud)

编辑:回答回复中的一些问题:
* 有多个客户端容器,否则别名将毫无意义。每个客户端通过不同的名称知道服务器
* 客户端和服务器不在同一个 pod 中

mat*_*ann 9

我有同样的需求,并且能够添加一个外部服务,该服务指向集群内其他服务的 FQDN:

apiVersion: v1
kind: Service
metadata:
  name: "my-alias"
spec:
  type: ExternalName
  externalName: "other-service.my-namespace.svc.cluster.local"

Run Code Online (Sandbox Code Playgroud)

现在,我可以other-service从my-alias集群和命名空间内进行访问。

  • “name”不支持添加点“.”,这并不能真正使其成为一个非常可靠的解决方案。您对这个限制有什么建议吗?如果我已经拥有特定域的证书,这一点尤其重要。 (4认同)

Rad*_*nka 2

有几种方法可以实现这一目标。

  • 您可以简单地为服务器容器(在其自己的Pod中)创建一个Service,如果Pod位于同一个 Kubernetes 集群中,那么典型的Service就可以了,如果服务器容器位于 Kubernetes 之外,您可以创建一个 Service 来定义端点的IPExternalIPs

  • 如果这是并行部署(即 1 个客户端 <-> 1 个服务器),您可能会考虑将客户端和服务器保留在相同的Podlocalhost定义中:在单个 Pod 中,客户端容器可以通过其特定的方式访问服务器容器港口。

  • 您可以摆弄 kube-dns 来注入任意 dns 名称(甚至覆盖公共名称),但您实际上不必这样做。