如何列出所有 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 记录?的主要内容,如果未能解决你的问题,请参考以下文章