测试环境中发现, 当 pod 调度到指定 node 后, pod 内部无法解析 dns, 但可以通过ip直接ping 通. 通过ip访问一切正常.
尝试使用nslookup 解析返回结果 NODATA.
后面发现 kubernetes 默认会给 /etc/resolv.conf 文件新增 4 个搜索域
search huoys.svc.cluster.local svc.cluster.local cluster.local <hostname>
其中第四个域导致出现问题, 主要因为出问题的 node 节点主机名为 git.hys.com
kubernetes 自动添加了 hys.com
搜索域:
search huoys.svc.cluster.local svc.cluster.local cluster.local hys.com
而 hys.com
是一个真实存在的域名, 以解析 baidu.com
为例, 在搜索 baidu.com.hys.com
时, dns 返回 NODATA, dns 认为找到结果不使用*域继续查找.导致dns解析失败.
解决方案
有两种解决方案
- 通过设置
options ndots:1
来解决, 但这个方案会导致 kubernetes 内部 dns 只能使用一级,不能包含.
- 修改 node 的主机名.
目前我们考虑使用第二种方案处理, 但 kubernetes 修改主机名会导致一些问题, 正在查找解决方案.