如何列出所有 kubernetes DNS 记录?

Posted

技术标签:

【中文标题】如何列出所有 kubernetes DNS 记录?【英文标题】:how can I list all kubernetes DNS records? 【发布时间】:2019-11-04 20:23:40 【问题描述】:

我在(裸机)集群中运行 kube-dns。我知道它可以工作,因为我可以interpolate a service to a name 我已经创建并获得了一个主机条目:

$ host elk-service-headless.default.svc.cluster.local
elk-service-headless.default.svc.cluster.local has address 10.42.0.151
elk-service-headless.default.svc.cluster.local has address 10.42.0.152
elk-service-headless.default.svc.cluster.local has address 10.42.0.153
(...)

我不知道该怎么做是列出 kube-dns 持有的所有记录。我已经尝试过 standard DNS tricks 之类的 dig 和 host -l 并且无法获得它们。但无论如何,Kubernetes 本身必须有办法做到这一点。我尝试检查 ConfigMap,但没有找到我要查找的内容。

【问题讨论】:

【参考方案1】:

如果你使用kube-dns,它使用dnsmaq来缓存 DNS记录,可以通过this answer转储记录。

如果您使用coredns,它嵌入了一个cache 插件来缓存DNS 记录,我找不到在这个缓存插件中获取数据的方法。但是我发现 coredns 可以使用 etcd 作为后端,所以 DNS 记录可以缓存在 etcd 中,但这需要用这个 Corefile 重新配置你的 coredns:

.:53 
    etcd 
        path /skydns
        endpoint <etcd_endpoint>
        upstream /etc/resolv.conf
    
    ...

【讨论】:

【参考方案2】:

这篇文章将帮助您在运行 kube-dns 的集群上找到您的 K8s 服务的内部 DNS 记录:

    找到kube-dns服务的ClusterIP:

kubectl -n kube-system get svc kube-dns

现在我们知道 K8s 内部的 DNS 解析器 IP 是 172.20.0.10

    找到应用服务端点IP:

kubectl -n fe get ep

    执行到应用程序 pod:

kubectl -n fe exec -it fe-app-575fdf6cb6-lt7t6 -- sh

    获取 DNS 服务名称:

【讨论】:

以上是关于如何列出所有 kubernetes DNS 记录?的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes DNS 记录

Kubernetes 部署集群内部DNS服务

如何避免阻止托管在 Kubernetes 上的网站

k8s中的dns应用

如何在 Kubernetes 中切换命名空间

k8s-dns