skydns 麻烦 - 我不能 'get it'?

skydns troubles - i must not 'get it'?

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

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

我不知道是哪个。

b

这里涉及到一些魔法,旨在使 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 pods 并尝试从容器中查找您的服务。

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