【问题标题】:skydns troubles - i must not 'get it'?skydns 的麻烦 - 我不能“明白”吗?
【发布时间】:2015-07-24 05:48:20
【问题描述】:

我正在使用谷歌容器引擎,我可以在我的集群中创建 pod 和服务。但是当我尝试使用 DNS 功能 (skydns) 来查找我的服务时,什么也找不到。如果我登录到非主节点,我可以看到 DNS 容器,并且可以使用“主机”命令进行 DNS 查找(使用 apt-get 安装)。但我找不到我的服务名称。它将 kubernetes.local 与服务的 IP 相关联。实际上,它将 kubernetes.local 与我的每一项服务的 IP 相关联(我有 9 个)。但它不关联服务名称“my-service-name”。

有人知道让它工作的诀窍吗?要么创建服务不会导致 skydns 创建 DNS 条目(也许有一些魔法让它工作)......或者我完全一无所知(不那么神奇,也许更有可能)。

我不知道是哪个。

b

【问题讨论】:

  • 您运行的是什么版本的 GKE?您能否在 dns pod(尤其是 kube2sky)中的容器上运行 kubectl 日志并查看它们是否显示任何持续性错误?

标签: kubernetes


【解决方案1】:

其中涉及到一点点魔法,旨在使 Kubernetes 中的 DNS 在 pod 中更方便。让我试着解释一下。

在 Kubernetes 中构建 DNS 名称的方式是 <service-name>.<namespace>.kubernetes.local。这就是为什么kubernetes.local 在您的节点上解析,但my-service-name 不是。假设您的服务是在默认命名空间中定义的(除非您在不同的命名空间中显式创建它),您应该能够在 my-service-name.default.kubernetes.local 解析它。

有关 DNS 的文档假定您关心如何从 pod 中解析服务名称,而不是直接在主机上解析。在您的 pod 中,应将 DNS 设置为首先搜索您指定的相对于 default.kubernetes.localkubernetes.local 的名称,这意味着从集群中任何不是 kube-dns(它经过特殊处理)的 pod 中,您应该能够使用my-service-namemy-service-name.default.kubernetes.local 解析您的服务。

如果您想尝试一下,请使用 docker exec 附加到集群的 fluentd pod 之一,然后尝试从容器中查找您的服务。

请注意,命名空间在 0.17.0 和 0.18.0 之间从 kubernetes.local 更改为 cluster.local,因此如果您的第一次尝试不起作用,请检查您的集群版本(使用 kubectl version)。

【讨论】:

  • 没问题!作为警告,这将很快更改为 <service-name>.<namespace>.cluster.local,但该格式将成为 1.0 版本的一部分,因此会在很长一段时间内保持稳定。
猜你喜欢
  • 2015-07-04
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多