K8s DNS中是否可以像Docker中的链接一样为服务名称添加别名?

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

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

-- link server-container:server

我能否通过在K8s的DNS中添加不同的记录来实现这一点?

注意:我们目前使用的解决方案是让客户端容器不使用服务器容器的硬编码名称,而是使用一个名为SERVER_HOSTNAME='server-container'的环境变量值,并且在没有别名的情况下进行链接。

--link server_container

编辑:回复中收到一些问题的答案:
* 存在多个客户端容器,否则别名将没有意义。每个客户端都以不同的名称知道服务器
* 客户端和服务器不在同一个 pod 中


需要相互通信的容器是否驻留在同一个 Pod 中? - Yaron Idan
1
你尝试过添加另一个服务,名称不同但选择相同的Pod吗?此外,如果您熟悉Kubernetes服务并已设置kube DNS,则这些都不应该是您需要解决的问题。 - iamnat
@Yaron 不同的 pods - lcfd
@iamnat 添加另一个服务将需要其自己的端口定义和至少另一个容器实例,而我想要的只是名称别名。 - lcfd
1
添加另一个服务不需要另一个实例,服务仅注册 Pod,不会创建任何内容。 - Yaron Idan
2个回答

9

我之前也有类似的需求,我可以添加一个外部服务,该服务指向集群内另一个服务的FQDN:

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

现在,我可以从集群和命名空间内部以 my-alias 的方式访问other-service


谢谢,正是我想要的:它完美地运行。奇怪的是没有一种原生的方法来定义一个“服务别名”,这可能是一个有用的选项。 - Mauro Dorni
2
“name”不支持添加点“.”,这使得它并不是一个非常可靠的解决方案。您有什么建议来解决这个限制?如果我已经拥有特定域名的证书,这一点尤其重要。 - Mohammed Noureldin

2
有几种方法可以实现这个目标。
  • 您可以为服务器容器(在自己的 Pod 中)创建一个简单的 Service,如果该 Pod 在同一 Kubernetes 集群中,则典型的 Service 将起作用。如果服务器容器在 Kubernetes 之外,则可以使用 ExternalIPs 创建服务来定义端点的 IP。

  • 如果这是并排部署(即 1 客户端 <-> 1 服务器),则可以考虑将客户端和服务器保留在同一个Pod定义中:在单个 Pod 中,客户端容器可以通过其特定端口上的 localhost 访问服务器容器。

  • 您可以调整 kube-dns 来注入任意 DNS 名称(甚至覆盖公共名称),但您真的不必这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接