如何列出所有Kubernetes DNS记录?

von4xj4u  于 2023-01-04  发布在  Kubernetes
关注(0)|答案(2)|浏览(450)

我有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本身完成此操作。我尝试检查ConfigMaps,但没有找到我要查找的内容。

yws3nbqq

yws3nbqq1#

这篇文章将帮助您在运行kube-dns的集群上查找K8s服务的内部DNS记录:
1.查找kube-dns服务的ClusterIP:
第一个月

现在我们知道内部K8s DNS解析器IP是172.20.0.10
1.查找应用程序服务端点IP:
kubectl -n fe get ep

1.执行到应用程序Pod:
kubectl -n fe exec -it fe-app-575fdf6cb6-lt7t6 -- sh
1.获取DNS服务名称:

1.列出所有K8s SVC DNS记录的脚本:

#!/bin/bash

echo =========== Create an ubuntu pod ==================
kubectl run ubuntu --image=ubuntu -- bash -c "while true; do echo hello; sleep 10;done"

# Wait for the pod "ubuntu" to contain the status condition of type "Ready"
kubectl wait --for=condition=Ready pod/ubuntu

# Save a sorted list of IPs of all of the k8s SVCs:
kubectl get svc -A|egrep -v 'CLUSTER-IP|None'|awk '{print $4}'|sort -V > ips

# Copy the ip list to owr Ubuntu pod:
kubectl cp ips ubuntu:/

echo =========== Installing dig tool into the pod ===============
kubectl exec -it ubuntu -- apt-get update
kubectl exec -it ubuntu -- apt install -y dnsutils

# Print 7 blank lines
yes '' | sed 7q
echo =========== Print all k8s SVC DNS records ====================
for ip in $(cat ips); do echo -n "$ip "; kubectl exec -it ubuntu -- dig -x $ip +short; done
echo ====== End of list =====================

echo ========= Cleanup  ===============
kubectl delete po ubuntu
rm ips
exit 0
tuwxkamq

tuwxkamq2#

如果您使用的是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
    }
    ...
}

相关问题