【问题标题】:Kubernetes and container name resolutionKubernetes 和容器名称解析
【发布时间】:2017-03-25 16:34:08
【问题描述】:

我正在尝试在 kubernetes 集群上设置 MongoDB 和 MongoDB 监控代理。

监控代理首先查询 mongodb 实例的服务端点,并接收主机名作为响应。然后它停止使用服务端点,并开始使用主机名连接到失败的实例,因为没有解析来解析容器名称。

我想我可以使用无头服务来实现这一点,尽管使用无头服务不是一种选择。

有没有办法在 Kubernetes 中启用容器/pod 的主机名解析或在 kube-dns 中注入自定义 DNS 记录?

【问题讨论】:

  • 您可以使用 IP 代替主机名吗?为什么不选择无头服务?您是否尝试过hostNetwork 选项?您需要提供更多详细信息,以便人们了解问题。
  • 有问题的代理不使用IP连接到数据库,而是使用主机名。无头服务不是一个选项,因为我还有一个带有访问策略的数据库的 nginx 前端,如果我使用主机名,当数据库实例关闭时,nginx 会崩溃。所以我想要 nginx 的主机名,但是监控代理的 IP 地址或名称解析,这让我陷入了第 22 条问题。我不知道 hostNetwork 选项,我会阅读它。感谢您的提示。 :)
  • 我尝试了hostNetwork 选项。它仍然无法解析内部集群 IP。另外,我有一个 mongodb 副本集(与 k8s 副本集不同),它与 FQDN 高度耦合,需要名称解析。理想情况下,如果有某种方法可以将 dns 记录添加到 kube-dns 中,我会很高兴——这表明 x.y.z 指向 10.a.b.c. 的集群内部服务。
  • 您是否尝试过:“在 v1.3 中,PodSpec 有一个主机名字段,可用于指定 Pod 的主机名。”

标签: mongodb dns kubernetes kube-dns


【解决方案1】:

您应该为您的用例创建一个 StatefulSet。因为你需要你的 pod 有一个唯一的标识符。引用文档,StatefulSets 有:

StatefulSet Pod 具有由序数、稳定的网络标识和稳定的存储组成的唯一标识。身份会附着在 Pod 上,无论它(重新)调度在哪个节点上。

因此,如果您使用 MongoDB 的 Deployment 对象,请将其修改为 StatefulSet 对象类型。

您的 pod 也将被名称解析。

文档:

【讨论】:

  • 我终于用无头服务做到了这一点。但在这种情况下,我会想要一个带有 clusterIP 的普通服务。
猜你喜欢
  • 2019-02-06
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 2023-02-22
  • 2022-11-11
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多