公司需要添加个静态域名到k8s环境中, 因为马虎而浪费了2个小时排查问题。。。但是其中了解了不少内容,以及填了几个坑。我就一一列举一下:
1. 注意宿主机dns也要配置 /etc/resolve.conf 添加一个能用nameserver ,不行自己也建一个,不然在这个机器跑的 node-local-dns 会启动失败。
2. 原本操作上是直接 kubectl get cm coredns -n kube-system -o yaml > coredns.yaml , 然后直接编辑coredns.yaml 在里面添加hosts { },
如图:
启动后使用 dnsutils 容器工具一直ping不通, 也看某些博主说明说要yaml排版排好。。。。,其实不是这个原因,是下面的 注解没有删除,导致的。。
只要按需留下 labels name namespace 就可以了。 然后 kubectl delete 和 kubectl apply 一下可以了
3. 使用coredns 时,ping和curl 自定义域名有超时现象产生,我已经使用最新版本了。已经排除网络问题和版本。那就是配置问题。
思路如下:
ping 自定义域名 :
node-local-dns ClusterIP -> coredns ClusterIP -> 宿主机 /etc/resolv.conf 指定的nameserver
k8s 环境下使用dnsutils 测试ping 和 curl 本k8s 的service很正常,没有超时, 就是ping 外部ip 就延迟3秒以上。查看coredns 日志, 有大量timeout ,那就问题出现在宿主的resolve。conf 配置的IP 有延迟, 使用一个新的nameserver 或者自己搭建个内网dns服务器, 超时问题就解决了。我是存内网环境,只能自己搭建dns 服务器。开公网的服务器,我还是建议自己建个dns 服务器,比较稳妥。